PinpointerSystem.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Content.Shared.Pinpointer;
  2. using Robust.Client.GameObjects;
  3. using Robust.Client.Graphics;
  4. namespace Content.Client.Pinpointer;
  5. public sealed class PinpointerSystem : SharedPinpointerSystem
  6. {
  7. [Dependency] private readonly IEyeManager _eyeManager = default!;
  8. public override void Update(float frameTime)
  9. {
  10. base.Update(frameTime);
  11. // we want to show pinpointers arrow direction relative
  12. // to players eye rotation (like it was in SS13)
  13. // because eye can change it rotation anytime
  14. // we need to update this arrow in a update loop
  15. var query = EntityQueryEnumerator<PinpointerComponent, SpriteComponent>();
  16. while (query.MoveNext(out var _, out var pinpointer, out var sprite))
  17. {
  18. if (!pinpointer.HasTarget)
  19. continue;
  20. var eye = _eyeManager.CurrentEye;
  21. var angle = pinpointer.ArrowAngle + eye.Rotation;
  22. switch (pinpointer.DistanceToTarget)
  23. {
  24. case Distance.Close:
  25. case Distance.Medium:
  26. case Distance.Far:
  27. sprite.LayerSetRotation(PinpointerLayers.Screen, angle);
  28. break;
  29. default:
  30. sprite.LayerSetRotation(PinpointerLayers.Screen, Angle.Zero);
  31. break;
  32. }
  33. }
  34. }
  35. }