diff --git a/Content.Client/Doors/DoorSystem.cs b/Content.Client/Doors/DoorSystem.cs index ae9c7eda78..0f6537eead 100644 --- a/Content.Client/Doors/DoorSystem.cs +++ b/Content.Client/Doors/DoorSystem.cs @@ -68,7 +68,7 @@ public sealed class DoorSystem : SharedDoorSystem { new AnimationTrackSpriteFlick { - LayerKey = DoorVisualLayers.BaseUnlit, + LayerKey = DoorVisualLayers.BaseEmagging, KeyFrames = { new AnimationTrackSpriteFlick.KeyFrame(comp.EmaggingSpriteState, 0f), @@ -92,6 +92,10 @@ public sealed class DoorSystem : SharedDoorSystem if (_animationSystem.HasRunningAnimation(entity, DoorComponent.AnimationKey)) _animationSystem.Stop(entity.Owner, DoorComponent.AnimationKey); + // We are checking beforehand since some doors may not have an emagging visual layer, and we don't want LayerSetVisible to throw an error. + if (_sprite.TryGetLayer(entity.Owner, DoorVisualLayers.BaseEmagging, out var _, false)) + _sprite.LayerSetVisible(entity.Owner, DoorVisualLayers.BaseEmagging, state == DoorState.Emagging); + UpdateAppearanceForDoorState(entity, args.Sprite, state); } @@ -134,7 +138,9 @@ public sealed class DoorSystem : SharedDoorSystem return; case DoorState.Emagging: - _animationSystem.Play(entity, (Animation)entity.Comp.EmaggingAnimation, DoorComponent.AnimationKey); + // We are checking beforehand since some doors may not have an emagging visual layer. + if (_sprite.TryGetLayer(entity.Owner, DoorVisualLayers.BaseEmagging, out var _, false)) + _animationSystem.Play(entity, (Animation)entity.Comp.EmaggingAnimation, DoorComponent.AnimationKey); return; } diff --git a/Content.Shared/Doors/Components/DoorComponent.cs b/Content.Shared/Doors/Components/DoorComponent.cs index 020a7a4c9b..e66dff2611 100644 --- a/Content.Shared/Doors/Components/DoorComponent.cs +++ b/Content.Shared/Doors/Components/DoorComponent.cs @@ -325,4 +325,5 @@ public enum DoorVisualLayers : byte BaseUnlit, BaseBolted, BaseEmergencyAccess, + BaseEmagging, } diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index 8b509a17ff..717530bfb7 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -45,6 +45,10 @@ shader: unshaded visible: false map: ["enum.ElectrifiedLayers.Sparks"] + - state: sparks + map: ["enum.DoorVisualLayers.BaseEmagging"] + shader: unshaded + visible: false - type: AnimationPlayer - type: Physics - type: Fixtures diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml index 975328c7c1..98be00450f 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml @@ -42,6 +42,10 @@ shader: unshaded visible: false map: ["enum.ElectrifiedLayers.Sparks"] + - state: sparks + map: ["enum.DoorVisualLayers.BaseEmagging"] + shader: unshaded + visible: false - type: AnimationPlayer - type: Physics - type: Fixtures diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml index c467f5297d..e46d95489c 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml @@ -31,6 +31,33 @@ - type: Sprite sprite: Structures/Doors/Airlocks/Standard/shuttle.rsi snapCardinals: false + layers: + - state: closed + map: ["enum.DoorVisualLayers.Base"] + - state: closed_unlit + shader: unshaded + map: ["enum.DoorVisualLayers.BaseUnlit"] + visible: false + - state: welded + map: ["enum.WeldableLayers.BaseWelded"] + - state: bolted_unlit + shader: unshaded + map: ["enum.DoorVisualLayers.BaseBolted"] + - state: emergency_unlit + map: ["enum.DoorVisualLayers.BaseEmergencyAccess"] + shader: unshaded + - state: panel_open + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - state: electrified_ai + sprite: Interface/Misc/ai_hud.rsi + shader: unshaded + visible: false + map: ["enum.ElectrifiedLayers.HUD"] + - state: electrified + sprite: Effects/electricity.rsi + shader: unshaded + visible: false + map: ["enum.ElectrifiedLayers.Sparks"] - type: Wires layoutId: Docking - type: Door diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml index ce331499ab..307a0724c1 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml @@ -57,6 +57,10 @@ shader: unshaded visible: false map: ["enum.ElectrifiedLayers.Sparks"] + - state: sparks + map: ["enum.DoorVisualLayers.BaseEmagging"] + shader: unshaded + visible: false - type: AnimationPlayer - type: ApcPowerReceiver - type: ExtensionCableReceiver @@ -208,6 +212,10 @@ shader: unshaded visible: false map: [ "enum.ElectrifiedLayers.Sparks" ] + - state: sparks + map: ["enum.DoorVisualLayers.BaseEmagging"] + shader: unshaded + visible: false - type: Damageable damageModifierSet: RGlass - type: Destructible @@ -279,6 +287,10 @@ shader: unshaded visible: false map: [ "enum.ElectrifiedLayers.Sparks" ] + - state: sparks + map: ["enum.DoorVisualLayers.BaseEmagging"] + shader: unshaded + visible: false - type: Destructible thresholds: - trigger: @@ -345,6 +357,10 @@ shader: unshaded visible: false map: [ "enum.ElectrifiedLayers.Sparks" ] + - state: sparks + map: ["enum.DoorVisualLayers.BaseEmagging"] + shader: unshaded + visible: false - type: Destructible thresholds: - trigger: @@ -416,6 +432,10 @@ shader: unshaded visible: false map: [ "enum.ElectrifiedLayers.Sparks" ] + - state: sparks + map: ["enum.DoorVisualLayers.BaseEmagging"] + shader: unshaded + visible: false - type: Destructible thresholds: - trigger: @@ -482,6 +502,10 @@ shader: unshaded visible: false map: [ "enum.ElectrifiedLayers.Sparks" ] + - state: sparks + map: ["enum.DoorVisualLayers.BaseEmagging"] + shader: unshaded + visible: false - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/clockwork.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/clockwork.yml index cc8fd35f32..b36b88d5ac 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/clockwork.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/clockwork.yml @@ -6,6 +6,33 @@ components: - type: Sprite sprite: Structures/Doors/Windoors/clockwork_windoor.rsi + layers: + - state: closed + map: ["enum.DoorVisualLayers.Base"] + - state: closed_unlit + shader: unshaded + map: ["enum.DoorVisualLayers.BaseUnlit"] + visible: false + - state: welded + map: ["enum.WeldableLayers.BaseWelded"] + - state: bolted_unlit + shader: unshaded + map: ["enum.DoorVisualLayers.BaseBolted"] + - state: emergency_unlit + shader: unshaded + map: ["enum.DoorVisualLayers.BaseEmergencyAccess"] + - state: panel_open + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - state: electrified_ai + sprite: Interface/Misc/ai_hud.rsi + shader: unshaded + visible: false + map: ["enum.ElectrifiedLayers.HUD"] + - state: electrified + sprite: Effects/electricity.rsi + shader: unshaded + visible: false + map: ["enum.ElectrifiedLayers.Sparks"] - type: Destructible thresholds: - trigger: