diff --git a/Content.Client/Light/Components/EmergencyLightComponent.cs b/Content.Client/Light/Components/EmergencyLightComponent.cs index c2c139e58c..47d28b8cde 100644 --- a/Content.Client/Light/Components/EmergencyLightComponent.cs +++ b/Content.Client/Light/Components/EmergencyLightComponent.cs @@ -2,11 +2,17 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameStates; -namespace Content.Client.Light.Components +namespace Content.Client.Light.Components; + +[RegisterComponent] +[NetworkedComponent] +public sealed class EmergencyLightComponent : SharedEmergencyLightComponent { - [RegisterComponent] - [NetworkedComponent] - public sealed class EmergencyLightComponent : SharedEmergencyLightComponent - { - } +} + +public enum EmergencyLightVisualLayers +{ + Base, + LightOff, + LightOn, } diff --git a/Content.Client/Light/EntitySystems/EmergencyLightSystem.cs b/Content.Client/Light/EntitySystems/EmergencyLightSystem.cs new file mode 100644 index 0000000000..71d6673b0d --- /dev/null +++ b/Content.Client/Light/EntitySystems/EmergencyLightSystem.cs @@ -0,0 +1,26 @@ +using Content.Client.Light.Components; +using Content.Shared.Light.Component; +using Robust.Client.GameObjects; + +namespace Content.Client.Light.EntitySystems; + +public sealed class EmergencyLightSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, EmergencyLightComponent comp, ref AppearanceChangeEvent args) + { + if (args.Sprite == null) + return; + + if (!AppearanceSystem.TryGetData(uid, EmergencyLightVisuals.On, out var on, args.Component)) + on = false; + + args.Sprite.LayerSetVisible(EmergencyLightVisualLayers.LightOff, !on); + args.Sprite.LayerSetVisible(EmergencyLightVisualLayers.LightOn, on); + + if (AppearanceSystem.TryGetData(uid, EmergencyLightVisuals.Color, out var color, args.Component)) + { + args.Sprite.LayerSetColor(EmergencyLightVisualLayers.LightOn, color); + args.Sprite.LayerSetColor(EmergencyLightVisualLayers.LightOff, color); + } + } +} diff --git a/Content.Client/Light/Visualizers/EmergencyLightVisualizer.cs b/Content.Client/Light/Visualizers/EmergencyLightVisualizer.cs deleted file mode 100644 index 03f8a87d87..0000000000 --- a/Content.Client/Light/Visualizers/EmergencyLightVisualizer.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Content.Shared.Light.Component; -using Robust.Client.GameObjects; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Serialization.Manager.Attributes; - -namespace Content.Client.Light.Visualizers -{ - [DataDefinition] - public sealed class EmergencyLightVisualizer : AppearanceVisualizer - { - [Obsolete("Subscribe to AppearanceChangeEvent instead.")] - public override void OnChangeData(AppearanceComponent component) - { - base.OnChangeData(component); - - var entities = IoCManager.Resolve(); - if (!entities.TryGetComponent(component.Owner, out SpriteComponent? sprite)) - return; - - if (!component.TryGetData(EmergencyLightVisuals.On, out bool on)) - on = false; - - sprite.LayerSetState(EmergencyLightVisualLayers.Light, on ? "emergency_light_on" : "emergency_light_off"); - sprite.LayerSetShader(EmergencyLightVisualLayers.Light, on ? "unshaded" : "shaded"); - - if (component.TryGetData(EmergencyLightVisuals.Color, out Color color)) - { - sprite.LayerSetColor(EmergencyLightVisualLayers.Light, color); - } - } - } -} - -public enum EmergencyLightVisualLayers -{ - Base, - Light -} diff --git a/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml b/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml index e58a742c77..baa2d7362a 100644 --- a/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml +++ b/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml @@ -309,13 +309,16 @@ sprite: Structures/Wallmounts/Lighting/emergency_light.rsi layers: - state: base - map: ["enum.EmergencyLightVisualLayers.Base"] + map: [ "enum.EmergencyLightVisualLayers.Base" ] - state: emergency_light_off - map: ["enum.EmergencyLightVisualLayers.Light"] + map: [ "enum.EmergencyLightVisualLayers.LightOff" ] color: "#FF4020" + - state: emergency_light_on + map: [ "enum.EmergencyLightVisualLayers.LightOn" ] + color: "#FF4020" + shader: "unshaded" + visible: false - type: Appearance - visuals: - - type: EmergencyLightVisualizer - type: AmbientSound sound: path: /Audio/Ambience/Objects/alarm.ogg