Event-based emergency lights (#2217)

Co-authored-by: Metal Gear Sloth <metalgearsloth@gmail.com>
This commit is contained in:
metalgearsloth
2020-10-11 22:11:18 +11:00
committed by GitHub
parent 30956a0fc8
commit 40504c2555
2 changed files with 71 additions and 12 deletions

View File

@@ -1,4 +1,6 @@
using Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers;
using System;
using System.Collections.Generic;
using Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers;
using JetBrains.Annotations;
using Robust.Shared.GameObjects.Systems;
@@ -7,10 +9,42 @@ namespace Content.Server.GameObjects.EntitySystems
[UsedImplicitly]
internal sealed class EmergencyLightSystem : EntitySystem
{
private List<EmergencyLightComponent> _activeLights = new List<EmergencyLightComponent>();
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<EmergencyLightMessage>(HandleEmergencyLightMessage);
}
private void HandleEmergencyLightMessage(EmergencyLightMessage message)
{
switch (message.State)
{
case EmergencyLightComponent.EmergencyLightState.Charging:
if (_activeLights.Contains(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();
}
}
public override void Update(float frameTime)
{
foreach (var comp in ComponentManager.EntityQuery<EmergencyLightComponent>())
for (var i = _activeLights.Count - 1; i >= 0; i--)
{
var comp = _activeLights[i];
comp.OnUpdate(frameTime);
}
}