using Content.Shared.Examine;
using Robust.Client.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Spawners;
namespace Content.Client.DirectionalArrowIndicator;
///
/// System responsible for handling s,
/// spawning directional arrow indicators clientside when an entity is examined.
///
public sealed partial class DirectionalArrowIndicatorSystem : EntitySystem
{
[Dependency] private TransformSystem _transform = default!;
private const float EdgeOffset = 0.78125f; // Used for moving arrow to the edge of the tile by default.
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnExamined);
}
private void OnExamined(Entity ent, ref ExaminedEvent args)
{
var arrows = ent.Comp.Arrows;
var lifetime = ent.Comp.Lifetime;
if (arrows.Count == 0)
arrows.Add(new ArrowSpawnData());
foreach (var arrowData in ent.Comp.Arrows)
{
var spawnedEnt = Spawn(arrowData.ArrowType, new EntityCoordinates(ent, arrowData.Offset.X, arrowData.Offset.Y + EdgeOffset));
_transform.SetLocalRotation(spawnedEnt, arrowData.Rotation);
EnsureComp(spawnedEnt, out var timedDespawn);
timedDespawn.Lifetime = lifetime;
}
}
}