From 633ae5bc90bf4bc160d5b057573341c879a567ee Mon Sep 17 00:00:00 2001 From: Daniel Castro Razo Date: Fri, 1 Jan 2021 07:26:42 -0600 Subject: [PATCH] Fixes Emergency Lights not charging (#2873) * Fixes Emergency Lights not charging * Removed extra imports --- .../EmergencyLightComponent.cs | 16 ++++++++++------ .../EntitySystems/EmergencyLightSystem.cs | 19 ++++++------------- .../Constructible/Walls/emergency_light.yml | 2 +- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/EmergencyLightComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/EmergencyLightComponent.cs index d52173e7d2..eadd1d1bb2 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/EmergencyLightComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/EmergencyLightComponent.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects; @@ -32,7 +32,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece } } - private EmergencyLightState _state = EmergencyLightState.Charging; + private EmergencyLightState _state = EmergencyLightState.Empty; [ViewVariables(VVAccess.ReadWrite)] private float _wattage; @@ -139,11 +139,15 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece public override void Initialize() { base.Initialize(); + } - Owner.EnsureComponentWarn(out PowerReceiverComponent receiver); - - receiver.OnPowerStateChanged += UpdateState; - State = EmergencyLightState.Charging; + public override void OnAdd() + { + base.OnAdd(); + if (Owner.TryGetComponent(out PowerReceiverComponent receiver)) + { + receiver.OnPowerStateChanged += UpdateState; + } } public override void OnRemove() diff --git a/Content.Server/GameObjects/EntitySystems/EmergencyLightSystem.cs b/Content.Server/GameObjects/EntitySystems/EmergencyLightSystem.cs index df30d568ed..0b9c65c9f0 100644 --- a/Content.Server/GameObjects/EntitySystems/EmergencyLightSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/EmergencyLightSystem.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers; using JetBrains.Annotations; @@ -9,7 +9,7 @@ namespace Content.Server.GameObjects.EntitySystems [UsedImplicitly] internal sealed class EmergencyLightSystem : EntitySystem { - private readonly List _activeLights = new(); + private readonly HashSet _activeLights = new(); public override void Initialize() { @@ -21,19 +21,13 @@ namespace Content.Server.GameObjects.EntitySystems { switch (message.State) { + case EmergencyLightComponent.EmergencyLightState.On: case EmergencyLightComponent.EmergencyLightState.Charging: - if (_activeLights.Contains(message.Component)) - _activeLights.Add(message.Component); - + _activeLights.Add(message.Component); break; case EmergencyLightComponent.EmergencyLightState.Full: case EmergencyLightComponent.EmergencyLightState.Empty: _activeLights.Remove(message.Component); - break; - case EmergencyLightComponent.EmergencyLightState.On: - if (!_activeLights.Contains(message.Component)) - _activeLights.Add(message.Component); - break; default: throw new ArgumentOutOfRangeException(); @@ -42,10 +36,9 @@ namespace Content.Server.GameObjects.EntitySystems public override void Update(float frameTime) { - for (var i = _activeLights.Count - 1; i >= 0; i--) + foreach (var activeLight in _activeLights) { - var comp = _activeLights[i]; - comp.OnUpdate(frameTime); + activeLight.OnUpdate(frameTime); } } } diff --git a/Resources/Prototypes/Entities/Constructible/Walls/emergency_light.yml b/Resources/Prototypes/Entities/Constructible/Walls/emergency_light.yml index 843c3db87d..a97c19eea8 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/emergency_light.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/emergency_light.yml @@ -11,11 +11,11 @@ offset: "0.5, 0" color: "#FF4020" mask: /Textures/Effects/LightMasks/emergency_mask.png - - type: EmergencyLight - type: PowerReceiver - type: Battery maxCharge: 30000 startingCharge: 0 + - type: EmergencyLight - type: Sprite sprite: Constructible/Lighting/emergency_light.rsi state: emergency_light_off