| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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!;
- 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<PinpointerComponent, SpriteComponent>();
- while (query.MoveNext(out var _, 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(PinpointerLayers.Screen, angle);
- break;
- default:
- sprite.LayerSetRotation(PinpointerLayers.Screen, Angle.Zero);
- break;
- }
- }
- }
- }
|