]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix mailing units turning into disposal units while recharging. (#26383)
authornikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com>
Mon, 25 Mar 2024 13:20:39 +0000 (15:20 +0200)
committerGitHub <noreply@github.com>
Mon, 25 Mar 2024 13:20:39 +0000 (14:20 +0100)
* Fix mailing units turning into disposal units while recharging.

The states were hardcoded.

* Fix error handling

* Make default states constants

Content.Client/Disposal/Systems/DisposalUnitSystem.cs
Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml

index 344bd2ec979ab525c4f82c1e9b35d993478356c4..8c40c78421991320696cd77b4c41750045757b39 100644 (file)
@@ -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 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem
         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 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem
                                 // 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 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem
         }
         else if (state == VisualState.Charging)
         {
-            sprite.LayerSetState(DisposalUnitVisualLayers.BaseFlush, new RSI.StateId("disposal-charging"));
+            sprite.LayerSetState(DisposalUnitVisualLayers.BaseFlush, chargingState);
         }
         else
         {
index c5f04d80a14fd0ad6c756c70e893977891962db9..1193182d09f93daa441e22fd98bddbd1d3b08133 100644 (file)
@@ -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