diff --git a/Content.Client/MobState/MobStateSystem.cs b/Content.Client/MobState/MobStateSystem.cs index c7036a3446..743f31fcaf 100644 --- a/Content.Client/MobState/MobStateSystem.cs +++ b/Content.Client/MobState/MobStateSystem.cs @@ -12,17 +12,16 @@ namespace Content.Client.MobState; public sealed partial class MobStateSystem : SharedMobStateSystem { + [Dependency] private readonly IOverlayManager _overlayManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; private Overlays.DamageOverlay _overlay = default!; - public const short Levels = 7; - public override void Initialize() { base.Initialize(); _overlay = new Overlays.DamageOverlay(); - IoCManager.Resolve().AddOverlay(_overlay); + _overlayManager.AddOverlay(_overlay); SubscribeLocalEvent(OnPlayerAttach); SubscribeLocalEvent(OnPlayerDetach); @@ -32,7 +31,7 @@ public sealed partial class MobStateSystem : SharedMobStateSystem public override void Shutdown() { base.Shutdown(); - IoCManager.Resolve().RemoveOverlay(_overlay); + _overlayManager.RemoveOverlay(_overlay); } private void OnMobHandleState(EntityUid uid, MobStateComponent component, ref ComponentHandleState args) @@ -58,9 +57,18 @@ public sealed partial class MobStateSystem : SharedMobStateSystem { SetLevel(mobState, damageable.TotalDamage); } + else + { + ClearOverlay(); + } } private void OnPlayerDetach(PlayerDetachedEvent ev) + { + ClearOverlay(); + } + + private void ClearOverlay() { _overlay.State = DamageState.Alive; _overlay.BruteLevel = 0f; @@ -80,10 +88,7 @@ public sealed partial class MobStateSystem : SharedMobStateSystem if (_playerManager.LocalPlayer?.ControlledEntity != uid) return; - _overlay.State = DamageState.Alive; - _overlay.BruteLevel = 0f; - _overlay.OxygenLevel = 0f; - _overlay.CritLevel = 0f; + ClearOverlay(); if (!TryComp(uid, out var damageable)) return;