Remove emergencylight hashset (#12386)

* Remove emergencylight hashset

Take 2

* Fix test
This commit is contained in:
metalgearsloth
2022-11-09 07:20:41 +11:00
committed by GitHub
parent e733302c30
commit 8765a7ae61
2 changed files with 22 additions and 18 deletions

View File

@@ -0,0 +1,7 @@
namespace Content.Server.Light.Components;
[RegisterComponent]
public sealed class ActiveEmergencyLightComponent : Component
{
}

View File

@@ -1,4 +1,3 @@
using System.Drawing;
using Content.Server.AlertLevel; using Content.Server.AlertLevel;
using Content.Server.Audio; using Content.Server.Audio;
using Content.Server.Light.Components; using Content.Server.Light.Components;
@@ -21,12 +20,10 @@ namespace Content.Server.Light.EntitySystems
[Dependency] private readonly AmbientSoundSystem _ambient = default!; [Dependency] private readonly AmbientSoundSystem _ambient = default!;
[Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly StationSystem _station = default!;
private readonly HashSet<EmergencyLightComponent> _activeLights = new();
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<EmergencyLightEvent>(HandleEmergencyLightMessage); SubscribeLocalEvent<EmergencyLightComponent, EmergencyLightEvent>(OnEmergencyLightEvent);
SubscribeLocalEvent<AlertLevelChangedEvent>(OnAlertLevelChanged); SubscribeLocalEvent<AlertLevelChangedEvent>(OnAlertLevelChanged);
SubscribeLocalEvent<EmergencyLightComponent, ComponentGetState>(GetCompState); SubscribeLocalEvent<EmergencyLightComponent, ComponentGetState>(GetCompState);
SubscribeLocalEvent<EmergencyLightComponent, PointLightToggleEvent>(HandleLightToggle); SubscribeLocalEvent<EmergencyLightComponent, PointLightToggleEvent>(HandleLightToggle);
@@ -36,6 +33,9 @@ namespace Content.Server.Light.EntitySystems
private void OnEmergencyPower(EntityUid uid, EmergencyLightComponent component, ref PowerChangedEvent args) private void OnEmergencyPower(EntityUid uid, EmergencyLightComponent component, ref PowerChangedEvent args)
{ {
if (MetaData(uid).EntityLifeStage >= EntityLifeStage.Terminating)
return;
UpdateState(component); UpdateState(component);
} }
@@ -67,7 +67,9 @@ namespace Content.Server.Light.EntitySystems
private void HandleLightToggle(EntityUid uid, EmergencyLightComponent component, PointLightToggleEvent args) private void HandleLightToggle(EntityUid uid, EmergencyLightComponent component, PointLightToggleEvent args)
{ {
if (component.Enabled == args.Enabled) return; if (component.Enabled == args.Enabled)
return;
component.Enabled = args.Enabled; component.Enabled = args.Enabled;
Dirty(component); Dirty(component);
} }
@@ -77,17 +79,17 @@ namespace Content.Server.Light.EntitySystems
args.State = new EmergencyLightComponentState(component.Enabled); args.State = new EmergencyLightComponentState(component.Enabled);
} }
private void HandleEmergencyLightMessage(EmergencyLightEvent @event) private void OnEmergencyLightEvent(EntityUid uid, EmergencyLightComponent component, EmergencyLightEvent args)
{ {
switch (@event.State) switch (args.State)
{ {
case EmergencyLightState.On: case EmergencyLightState.On:
case EmergencyLightState.Charging: case EmergencyLightState.Charging:
_activeLights.Add(@event.Component); EnsureComp<ActiveEmergencyLightComponent>(uid);
break; break;
case EmergencyLightState.Full: case EmergencyLightState.Full:
case EmergencyLightState.Empty: case EmergencyLightState.Empty:
_activeLights.Remove(@event.Component); RemComp<ActiveEmergencyLightComponent>(uid);
break; break;
default: default:
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();
@@ -129,24 +131,19 @@ namespace Content.Server.Light.EntitySystems
if (component.State == state) return; if (component.State == state) return;
component.State = state; component.State = state;
RaiseLocalEvent(component.Owner, new EmergencyLightEvent(component, state), true); RaiseLocalEvent(component.Owner, new EmergencyLightEvent(component, state));
} }
public override void Update(float frameTime) public override void Update(float frameTime)
{ {
foreach (var activeLight in _activeLights) foreach (var (_, activeLight, battery) in EntityQuery<ActiveEmergencyLightComponent, EmergencyLightComponent, BatteryComponent>())
{ {
Update(activeLight, frameTime); Update(activeLight, battery, frameTime);
} }
} }
private void Update(EmergencyLightComponent component, float frameTime) private void Update(EmergencyLightComponent component, BatteryComponent battery, float frameTime)
{ {
if (!EntityManager.EntityExists(component.Owner) || !TryComp(component.Owner, out BatteryComponent? battery) || MetaData(component.Owner).EntityPaused)
{
return;
}
if (component.State == EmergencyLightState.On) if (component.State == EmergencyLightState.On)
{ {
if (!battery.TryUseCharge(component.Wattage * frameTime)) if (!battery.TryUseCharge(component.Wattage * frameTime))