Fix emag sparking animation on doors (#40350)

* Fix

* Update

* Comment
This commit is contained in:
Winkarst-cpu
2025-10-15 02:13:40 +03:00
committed by GitHub
parent 111805c03b
commit 2f09b117ca
7 changed files with 95 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -325,4 +325,5 @@ public enum DoorVisualLayers : byte
BaseUnlit,
BaseBolted,
BaseEmergencyAccess,
BaseEmagging,
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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: