]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix APC turning invisible after emagging (#20245)
authordaerSeebaer <61566539+daerSeebaer@users.noreply.github.com>
Sat, 23 Sep 2023 19:27:51 +0000 (21:27 +0200)
committerGitHub <noreply@github.com>
Sat, 23 Sep 2023 19:27:51 +0000 (11:27 -0800)
Content.Client/Power/APC/ApcVisualizerComponent.cs
Content.Client/Power/APC/ApcVisualizerSystem.cs

index 1f66a7791a818d55bb0642e92d0f885a9d30cd55..87cb70019f50819c54bd51db148ddc1339955577 100644 (file)
@@ -97,7 +97,7 @@ public sealed partial class ApcVisualsComponent : Component
     public string EmaggedScreenState = "emag-unlit";
 
     /// <summary>
-    /// The sprite state of the unlit overlay used for the APC screen when the APC has been emagged.
+    /// The color of the light emitted when the APC has been emagged.
     /// </summary>
     [DataField("emaggedScreenColor")]
     [ViewVariables(VVAccess.ReadWrite)]
index 23b9157ea37308f824b6ba356ee577430db4fff9..67540e7239c63a39af2c59bcf71628e77e431c77 100644 (file)
@@ -13,6 +13,10 @@ public sealed class ApcVisualizerSystem : VisualizerSystem<ApcVisualsComponent>
         if (args.Sprite == null)
             return;
 
+        // get the mapped layer index of the first lock layer and the first channel layer
+        var lockIndicatorOverlayStart = args.Sprite.LayerMapGet(ApcVisualLayers.InterfaceLock);
+        var channelIndicatorOverlayStart = args.Sprite.LayerMapGet(ApcVisualLayers.Equipment);
+
         // Handle APC screen overlay:
         if(!AppearanceSystem.TryGetData<ApcChargeState>(uid, ApcVisuals.ChargeState, out var chargeState, args.Component))
             chargeState = ApcChargeState.Lack;
@@ -26,7 +30,7 @@ public sealed class ApcVisualizerSystem : VisualizerSystem<ApcVisualsComponent>
             {
                 for(var i = 0; i < comp.LockIndicators; ++i)
                 {
-                    var layer = ((byte)ApcVisualLayers.LockIndicatorOverlayStart + i);
+                    var layer = ((byte)lockIndicatorOverlayStart + i);
                     sbyte lockState = (sbyte)((lockStates >> (i << (sbyte)ApcLockState.LogWidth)) & (sbyte)ApcLockState.All);
                     args.Sprite.LayerSetState(layer, $"{comp.LockPrefix}{i}-{comp.LockSuffixes[lockState]}");
                     args.Sprite.LayerSetVisible(layer, true);
@@ -38,7 +42,7 @@ public sealed class ApcVisualizerSystem : VisualizerSystem<ApcVisualsComponent>
             {
                 for(var i = 0; i < comp.ChannelIndicators; ++i)
                 {
-                    var layer = ((byte)ApcVisualLayers.ChannelIndicatorOverlayStart + i);
+                    var layer = ((byte)channelIndicatorOverlayStart + i);
                     sbyte channelState = (sbyte)((channelStates >> (i << (sbyte)ApcChannelState.LogWidth)) & (sbyte)ApcChannelState.All);
                     args.Sprite.LayerSetState(layer, $"{comp.ChannelPrefix}{i}-{comp.ChannelSuffixes[channelState]}");
                     args.Sprite.LayerSetVisible(layer, true);
@@ -56,12 +60,12 @@ public sealed class ApcVisualizerSystem : VisualizerSystem<ApcVisualsComponent>
             args.Sprite.LayerSetState(ApcVisualLayers.ChargeState, comp.EmaggedScreenState);
             for(var i = 0; i < comp.LockIndicators; ++i)
             {
-                var layer = ((byte)ApcVisualLayers.LockIndicatorOverlayStart + i);
+                var layer = ((byte)lockIndicatorOverlayStart + i);
                 args.Sprite.LayerSetVisible(layer, false);
             }
             for(var i = 0; i < comp.ChannelIndicators; ++i)
             {
-                var layer = ((byte)ApcVisualLayers.ChannelIndicatorOverlayStart + i);
+                var layer = ((byte)channelIndicatorOverlayStart + i);
                 args.Sprite.LayerSetVisible(layer, false);
             }
 
@@ -78,35 +82,27 @@ enum ApcVisualLayers : byte
     /// <summary>
     /// The sprite layer used for the interface lock indicator light overlay.
     /// </summary>
-    InterfaceLock = 0,
+    InterfaceLock,
     /// <summary>
     /// The sprite layer used for the panel lock indicator light overlay.
     /// </summary>
-    PanelLock = 1,
-    /// <summary>
-    /// The first of the lock indicator light layers.
-    /// </summary>
-    LockIndicatorOverlayStart = InterfaceLock,
+    PanelLock,
 
     /// <summary>
     /// The sprite layer used for the equipment channel indicator light overlay.
     /// </summary>
-    Equipment = 2,
+    Equipment,
     /// <summary>
     /// The sprite layer used for the lighting channel indicator light overlay.
     /// </summary>
-    Lighting = 3,
+    Lighting,
     /// <summary>
     /// The sprite layer used for the environment channel indicator light overlay.
     /// </summary>
-    Environment = 4,
-    /// <summary>
-    /// The first of the channel status indicator light layers.
-    /// </summary>
-    ChannelIndicatorOverlayStart = Equipment,
+    Environment,
 
     /// <summary>
     /// The sprite layer used for the APC screen overlay.
     /// </summary>
-    ChargeState = 5,
+    ChargeState,
 }