using Content.Shared.Pinpointer; using Robust.Client.GameObjects; using Robust.Client.Graphics; namespace Content.Client.Pinpointer; public sealed class PinpointerSystem : SharedPinpointerSystem { [Dependency] private readonly IEyeManager _eyeManager = default!; [Dependency] private readonly SpriteSystem _sprite = default!; public override void Update(float frameTime) { base.Update(frameTime); // we want to show pinpointers arrow direction relative // to players eye rotation (like it was in SS13) // because eye can change it rotation anytime // we need to update this arrow in a update loop var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var pinpointer, out var sprite)) { if (!pinpointer.HasTarget) continue; var eye = _eyeManager.CurrentEye; var angle = pinpointer.ArrowAngle + eye.Rotation; switch (pinpointer.DistanceToTarget) { case Distance.Close: case Distance.Medium: case Distance.Far: _sprite.LayerSetRotation((uid, sprite), PinpointerLayers.Screen, angle); break; default: _sprite.LayerSetRotation((uid, sprite), PinpointerLayers.Screen, Angle.Zero); break; } } } }