using Content.Shared.Drunk; using Content.Shared.StatusEffectNew; using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Player; namespace Content.Client.Drunk; public sealed class DrunkSystem : SharedDrunkSystem { [Dependency] private readonly IPlayerManager _player = default!; [Dependency] private readonly IOverlayManager _overlayMan = default!; private DrunkOverlay _overlay = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnStatusApplied); SubscribeLocalEvent(OnStatusRemoved); SubscribeLocalEvent>(OnPlayerAttached); SubscribeLocalEvent>(OnPlayerDetached); _overlay = new(); } private void OnStatusApplied(Entity entity, ref StatusEffectAppliedEvent args) { if (!_overlayMan.HasOverlay()) _overlayMan.AddOverlay(_overlay); } private void OnStatusRemoved(Entity entity, ref StatusEffectRemovedEvent args) { if (Status.HasEffectComp(args.Target)) return; if (_player.LocalEntity != args.Target) return; _overlay.CurrentBoozePower = 0; _overlayMan.RemoveOverlay(_overlay); } private void OnPlayerAttached(Entity entity, ref StatusEffectRelayedEvent args) { _overlayMan.AddOverlay(_overlay); } private void OnPlayerDetached(Entity entity, ref StatusEffectRelayedEvent args) { _overlay.CurrentBoozePower = 0; _overlayMan.RemoveOverlay(_overlay); } }