using Content.Shared.Silicons.StationAi; using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Player; namespace Content.Client.Silicons.StationAi; public sealed partial class StationAiSystem : SharedStationAiSystem { [Dependency] private readonly IOverlayManager _overlayMgr = default!; [Dependency] private readonly IPlayerManager _player = default!; private StationAiOverlay? _overlay; public override void Initialize() { base.Initialize(); InitializeAirlock(); InitializePowerToggle(); SubscribeLocalEvent(OnAiAttached); SubscribeLocalEvent(OnAiDetached); SubscribeLocalEvent(OnAiOverlayInit); SubscribeLocalEvent(OnAiOverlayRemove); } private void OnAiOverlayInit(Entity ent, ref ComponentInit args) { var attachedEnt = _player.LocalEntity; if (attachedEnt != ent.Owner) return; AddOverlay(); } private void OnAiOverlayRemove(Entity ent, ref ComponentRemove args) { var attachedEnt = _player.LocalEntity; if (attachedEnt != ent.Owner) return; RemoveOverlay(); } private void AddOverlay() { if (_overlay != null) return; _overlay = new StationAiOverlay(); _overlayMgr.AddOverlay(_overlay); } private void RemoveOverlay() { if (_overlay == null) return; _overlayMgr.RemoveOverlay(_overlay); _overlay = null; } private void OnAiAttached(Entity ent, ref LocalPlayerAttachedEvent args) { AddOverlay(); } private void OnAiDetached(Entity ent, ref LocalPlayerDetachedEvent args) { RemoveOverlay(); } public override void Shutdown() { base.Shutdown(); _overlayMgr.RemoveOverlay(); } }