Fix APC turning invisible after emagging (#20245)
This commit is contained in:
@@ -97,7 +97,7 @@ public sealed partial class ApcVisualsComponent : Component
|
|||||||
public string EmaggedScreenState = "emag-unlit";
|
public string EmaggedScreenState = "emag-unlit";
|
||||||
|
|
||||||
/// <summary>
|
/// <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>
|
/// </summary>
|
||||||
[DataField("emaggedScreenColor")]
|
[DataField("emaggedScreenColor")]
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ public sealed class ApcVisualizerSystem : VisualizerSystem<ApcVisualsComponent>
|
|||||||
if (args.Sprite == null)
|
if (args.Sprite == null)
|
||||||
return;
|
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:
|
// Handle APC screen overlay:
|
||||||
if(!AppearanceSystem.TryGetData<ApcChargeState>(uid, ApcVisuals.ChargeState, out var chargeState, args.Component))
|
if(!AppearanceSystem.TryGetData<ApcChargeState>(uid, ApcVisuals.ChargeState, out var chargeState, args.Component))
|
||||||
chargeState = ApcChargeState.Lack;
|
chargeState = ApcChargeState.Lack;
|
||||||
@@ -26,7 +30,7 @@ public sealed class ApcVisualizerSystem : VisualizerSystem<ApcVisualsComponent>
|
|||||||
{
|
{
|
||||||
for(var i = 0; i < comp.LockIndicators; ++i)
|
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);
|
sbyte lockState = (sbyte)((lockStates >> (i << (sbyte)ApcLockState.LogWidth)) & (sbyte)ApcLockState.All);
|
||||||
args.Sprite.LayerSetState(layer, $"{comp.LockPrefix}{i}-{comp.LockSuffixes[lockState]}");
|
args.Sprite.LayerSetState(layer, $"{comp.LockPrefix}{i}-{comp.LockSuffixes[lockState]}");
|
||||||
args.Sprite.LayerSetVisible(layer, true);
|
args.Sprite.LayerSetVisible(layer, true);
|
||||||
@@ -38,7 +42,7 @@ public sealed class ApcVisualizerSystem : VisualizerSystem<ApcVisualsComponent>
|
|||||||
{
|
{
|
||||||
for(var i = 0; i < comp.ChannelIndicators; ++i)
|
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);
|
sbyte channelState = (sbyte)((channelStates >> (i << (sbyte)ApcChannelState.LogWidth)) & (sbyte)ApcChannelState.All);
|
||||||
args.Sprite.LayerSetState(layer, $"{comp.ChannelPrefix}{i}-{comp.ChannelSuffixes[channelState]}");
|
args.Sprite.LayerSetState(layer, $"{comp.ChannelPrefix}{i}-{comp.ChannelSuffixes[channelState]}");
|
||||||
args.Sprite.LayerSetVisible(layer, true);
|
args.Sprite.LayerSetVisible(layer, true);
|
||||||
@@ -56,12 +60,12 @@ public sealed class ApcVisualizerSystem : VisualizerSystem<ApcVisualsComponent>
|
|||||||
args.Sprite.LayerSetState(ApcVisualLayers.ChargeState, comp.EmaggedScreenState);
|
args.Sprite.LayerSetState(ApcVisualLayers.ChargeState, comp.EmaggedScreenState);
|
||||||
for(var i = 0; i < comp.LockIndicators; ++i)
|
for(var i = 0; i < comp.LockIndicators; ++i)
|
||||||
{
|
{
|
||||||
var layer = ((byte)ApcVisualLayers.LockIndicatorOverlayStart + i);
|
var layer = ((byte)lockIndicatorOverlayStart + i);
|
||||||
args.Sprite.LayerSetVisible(layer, false);
|
args.Sprite.LayerSetVisible(layer, false);
|
||||||
}
|
}
|
||||||
for(var i = 0; i < comp.ChannelIndicators; ++i)
|
for(var i = 0; i < comp.ChannelIndicators; ++i)
|
||||||
{
|
{
|
||||||
var layer = ((byte)ApcVisualLayers.ChannelIndicatorOverlayStart + i);
|
var layer = ((byte)channelIndicatorOverlayStart + i);
|
||||||
args.Sprite.LayerSetVisible(layer, false);
|
args.Sprite.LayerSetVisible(layer, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,35 +82,27 @@ enum ApcVisualLayers : byte
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The sprite layer used for the interface lock indicator light overlay.
|
/// The sprite layer used for the interface lock indicator light overlay.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
InterfaceLock = 0,
|
InterfaceLock,
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The sprite layer used for the panel lock indicator light overlay.
|
/// The sprite layer used for the panel lock indicator light overlay.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PanelLock = 1,
|
PanelLock,
|
||||||
/// <summary>
|
|
||||||
/// The first of the lock indicator light layers.
|
|
||||||
/// </summary>
|
|
||||||
LockIndicatorOverlayStart = InterfaceLock,
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The sprite layer used for the equipment channel indicator light overlay.
|
/// The sprite layer used for the equipment channel indicator light overlay.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Equipment = 2,
|
Equipment,
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The sprite layer used for the lighting channel indicator light overlay.
|
/// The sprite layer used for the lighting channel indicator light overlay.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Lighting = 3,
|
Lighting,
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The sprite layer used for the environment channel indicator light overlay.
|
/// The sprite layer used for the environment channel indicator light overlay.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Environment = 4,
|
Environment,
|
||||||
/// <summary>
|
|
||||||
/// The first of the channel status indicator light layers.
|
|
||||||
/// </summary>
|
|
||||||
ChannelIndicatorOverlayStart = Equipment,
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The sprite layer used for the APC screen overlay.
|
/// The sprite layer used for the APC screen overlay.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
ChargeState = 5,
|
ChargeState,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user