1
0

WieldableSystem.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Numerics;
  2. using Content.Client.Movement.Components;
  3. using Content.Client.Movement.Systems;
  4. using Content.Shared.Camera;
  5. using Content.Shared.Hands;
  6. using Content.Shared.Movement.Components;
  7. using Content.Shared.Wieldable;
  8. using Content.Shared.Wieldable.Components;
  9. using Robust.Client.Timing;
  10. namespace Content.Client.Wieldable;
  11. public sealed class WieldableSystem : SharedWieldableSystem
  12. {
  13. [Dependency] private readonly EyeCursorOffsetSystem _eyeOffset = default!;
  14. [Dependency] private readonly IClientGameTiming _gameTiming = default!;
  15. public override void Initialize()
  16. {
  17. base.Initialize();
  18. SubscribeLocalEvent<CursorOffsetRequiresWieldComponent, ItemUnwieldedEvent>(OnEyeOffsetUnwielded);
  19. SubscribeLocalEvent<CursorOffsetRequiresWieldComponent, HeldRelayedEvent<GetEyeOffsetRelayedEvent>>(OnGetEyeOffset);
  20. }
  21. public void OnEyeOffsetUnwielded(Entity<CursorOffsetRequiresWieldComponent> entity, ref ItemUnwieldedEvent args)
  22. {
  23. if (!TryComp(entity.Owner, out EyeCursorOffsetComponent? cursorOffsetComp))
  24. return;
  25. if (_gameTiming.IsFirstTimePredicted)
  26. cursorOffsetComp.CurrentPosition = Vector2.Zero;
  27. }
  28. public void OnGetEyeOffset(Entity<CursorOffsetRequiresWieldComponent> entity, ref HeldRelayedEvent<GetEyeOffsetRelayedEvent> args)
  29. {
  30. if (!TryComp(entity.Owner, out WieldableComponent? wieldableComp))
  31. return;
  32. if (!wieldableComp.Wielded)
  33. return;
  34. var offset = _eyeOffset.OffsetAfterMouse(entity.Owner, null);
  35. if (offset == null)
  36. return;
  37. args.Args.Offset += offset.Value;
  38. }
  39. }