diff --git a/Content.Client/Disposal/Systems/DisposalUnitSystem.cs b/Content.Client/Disposal/Systems/DisposalUnitSystem.cs index 344bd2ec979ab5..8c40c784219913 100644 --- a/Content.Client/Disposal/Systems/DisposalUnitSystem.cs +++ b/Content.Client/Disposal/Systems/DisposalUnitSystem.cs @@ -22,6 +22,9 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem private const string AnimationKey = "disposal_unit_animation"; + private const string DefaultFlushState = "disposal-flush"; + private const string DefaultChargeState = "disposal-charging"; + public override void Initialize() { base.Initialize(); @@ -101,12 +104,18 @@ private void UpdateState(EntityUid uid, SharedDisposalUnitComponent unit, Sprite sprite.LayerSetVisible(DisposalUnitVisualLayers.Base, state == VisualState.Anchored); sprite.LayerSetVisible(DisposalUnitVisualLayers.BaseFlush, state is VisualState.Flushing or VisualState.Charging); + var chargingState = sprite.LayerMapTryGet(DisposalUnitVisualLayers.BaseCharging, out var chargingLayer) + ? sprite.LayerGetState(chargingLayer) + : new RSI.StateId(DefaultChargeState); + // This is a transient state so not too worried about replaying in range. if (state == VisualState.Flushing) { if (!_animationSystem.HasRunningAnimation(uid, AnimationKey)) { - var flushState = new RSI.StateId("disposal-flush"); + var flushState = sprite.LayerMapTryGet(DisposalUnitVisualLayers.BaseFlush, out var flushLayer) + ? sprite.LayerGetState(flushLayer) + : new RSI.StateId(DefaultFlushState); // Setup the flush animation to play var anim = new Animation @@ -124,7 +133,7 @@ private void UpdateState(EntityUid uid, SharedDisposalUnitComponent unit, Sprite // Return to base state (though, depending on how the unit is // configured we might get an appearance change event telling // us to go to charging state) - new AnimationTrackSpriteFlick.KeyFrame("disposal-charging", (float) unit.FlushDelay.TotalSeconds) + new AnimationTrackSpriteFlick.KeyFrame(chargingState, (float) unit.FlushDelay.TotalSeconds) } }, } @@ -147,7 +156,7 @@ private void UpdateState(EntityUid uid, SharedDisposalUnitComponent unit, Sprite } else if (state == VisualState.Charging) { - sprite.LayerSetState(DisposalUnitVisualLayers.BaseFlush, new RSI.StateId("disposal-charging")); + sprite.LayerSetState(DisposalUnitVisualLayers.BaseFlush, chargingState); } else { diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml index c5f04d80a14fd0..1193182d09f93d 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml @@ -16,6 +16,8 @@ map: [ "enum.DisposalUnitVisualLayers.Unanchored" ] - state: disposal map: [ "enum.DisposalUnitVisualLayers.Base" ] + - state: disposal-charging + map: [ "enum.DisposalUnitVisualLayers.BaseCharging" ] - state: disposal-flush map: [ "enum.DisposalUnitVisualLayers.BaseFlush" ] - state: dispover-charge