Files
tbd-station-14/Content.Client/Pinpointer/PinpointerSystem.cs
2023-05-07 18:20:43 +10:00

42 lines
1.3 KiB
C#

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;
}
}
}
}