using Content.Shared._DV.Waypointer;
using Content.Shared._DV.Waypointer.Components;
using Content.Shared._DV.Waypointer.Events;
using Content.Shared.Actions.Components;
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Client.Timing;
using Robust.Shared.Player;
namespace Content.Client._DV.Waypointer;
///
/// The client-side system handles initializing the overlay, as well as removing and adding it depending on game actions.
///
public sealed class WaypointerSystem : SharedWaypointerSystem
{
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly IOverlayManager _overlay = default!;
[Dependency] private readonly IClientGameTiming _timing = default!;
private WaypointerOverlay _waypointerOverlay = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnAddition);
SubscribeLocalEvent(OnRemoval);
SubscribeLocalEvent(OnPlayerAttached);
SubscribeLocalEvent(OnPlayerDetached);
_waypointerOverlay = new WaypointerOverlay();
}
private void OnAddition(Entity player, ref ComponentInit args)
{
if (_player.LocalEntity == null || player.Owner != _player.LocalEntity.Value
|| _timing.ApplyingState)
return;
_overlay.AddOverlay(_waypointerOverlay);
}
private void OnRemoval(Entity player, ref ComponentRemove args)
{
if (_player.LocalEntity == null || player.Owner != _player.LocalEntity.Value
|| _timing.ApplyingState)
return;
_overlay.RemoveOverlay(_waypointerOverlay);
}
protected override void OnWaypointersToggled(Entity action, ref WaypointersToggledMessage args)
{
base.OnWaypointersToggled(action, ref args);
if (args.IsActive)
_overlay.AddOverlay(_waypointerOverlay);
else
_overlay.RemoveOverlay(_waypointerOverlay);
}
private void OnPlayerAttached(Entity player, ref LocalPlayerAttachedEvent args)
{
if (args.Entity != _player.LocalEntity)
return;
_overlay.AddOverlay(_waypointerOverlay);
}
private void OnPlayerDetached(Entity player, ref LocalPlayerDetachedEvent args)
{
if (args.Entity != _player.LocalEntity)
return;
_overlay.RemoveOverlay(_waypointerOverlay);
}
}