From f5ddbcf1237205516924950d78527bc0a884a531 Mon Sep 17 00:00:00 2001 From: daerSeebaer <61566539+daerSeebaer@users.noreply.github.com> Date: Sat, 23 Sep 2023 21:27:51 +0200 Subject: [PATCH] Fix APC turning invisible after emagging (#20245) --- .../Power/APC/ApcVisualizerComponent.cs | 2 +- .../Power/APC/ApcVisualizerSystem.cs | 32 ++++++++----------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/Content.Client/Power/APC/ApcVisualizerComponent.cs b/Content.Client/Power/APC/ApcVisualizerComponent.cs index 1f66a7791a..87cb70019f 100644 --- a/Content.Client/Power/APC/ApcVisualizerComponent.cs +++ b/Content.Client/Power/APC/ApcVisualizerComponent.cs @@ -97,7 +97,7 @@ public sealed partial class ApcVisualsComponent : Component public string EmaggedScreenState = "emag-unlit"; /// - /// 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. /// [DataField("emaggedScreenColor")] [ViewVariables(VVAccess.ReadWrite)] diff --git a/Content.Client/Power/APC/ApcVisualizerSystem.cs b/Content.Client/Power/APC/ApcVisualizerSystem.cs index 23b9157ea3..67540e7239 100644 --- a/Content.Client/Power/APC/ApcVisualizerSystem.cs +++ b/Content.Client/Power/APC/ApcVisualizerSystem.cs @@ -13,6 +13,10 @@ public sealed class ApcVisualizerSystem : VisualizerSystem 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(uid, ApcVisuals.ChargeState, out var chargeState, args.Component)) chargeState = ApcChargeState.Lack; @@ -26,7 +30,7 @@ public sealed class ApcVisualizerSystem : VisualizerSystem { 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 { 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 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 /// /// The sprite layer used for the interface lock indicator light overlay. /// - InterfaceLock = 0, + InterfaceLock, /// /// The sprite layer used for the panel lock indicator light overlay. /// - PanelLock = 1, - /// - /// The first of the lock indicator light layers. - /// - LockIndicatorOverlayStart = InterfaceLock, + PanelLock, /// /// The sprite layer used for the equipment channel indicator light overlay. /// - Equipment = 2, + Equipment, /// /// The sprite layer used for the lighting channel indicator light overlay. /// - Lighting = 3, + Lighting, /// /// The sprite layer used for the environment channel indicator light overlay. /// - Environment = 4, - /// - /// The first of the channel status indicator light layers. - /// - ChannelIndicatorOverlayStart = Equipment, + Environment, /// /// The sprite layer used for the APC screen overlay. /// - ChargeState = 5, + ChargeState, } -- 2.51.2