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
+{
+}
+
+public enum EmergencyLightVisualLayers
{
- [RegisterComponent]
- [NetworkedComponent]
- public sealed class EmergencyLightComponent : SharedEmergencyLightComponent
- {
- }
+ Base,
+ LightOff,
+ LightOn,
}
--- /dev/null
+using Content.Client.Light.Components;
+using Content.Shared.Light.Component;
+using Robust.Client.GameObjects;
+
+namespace Content.Client.Light.EntitySystems;
+
+public sealed class EmergencyLightSystem : VisualizerSystem<EmergencyLightComponent>
+{
+ protected override void OnAppearanceChange(EntityUid uid, EmergencyLightComponent comp, ref AppearanceChangeEvent args)
+ {
+ if (args.Sprite == null)
+ return;
+
+ if (!AppearanceSystem.TryGetData<bool>(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<Color>(uid, EmergencyLightVisuals.Color, out var color, args.Component))
+ {
+ args.Sprite.LayerSetColor(EmergencyLightVisualLayers.LightOn, color);
+ args.Sprite.LayerSetColor(EmergencyLightVisualLayers.LightOff, color);
+ }
+ }
+}
+++ /dev/null
-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<IEntityManager>();
- 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
-}
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