Power struct enumerators (#12396)

This commit is contained in:
Leon Friedrich
2022-11-07 05:33:56 +13:00
committed by GitHub
parent bae7b8d0d8
commit e29dc8c785

View File

@@ -206,7 +206,26 @@ namespace Content.Server.Power.EntitySystems
{
base.Update(frameTime);
// Reconnect networks.
ReconnectNetworks();
// Synchronize batteries
RaiseLocalEvent(new NetworkBatteryPreSync());
// Run power solver.
_solver.Tick(frameTime, _powerState);
// Synchronize batteries, the other way around.
RaiseLocalEvent(new NetworkBatteryPostSync());
// Send events where necessary.
// TODO: Instead of querying ALL power components every tick, and then checking if an event needs to be
// raised, should probably assemble a list of entity Uids during the actual solver steps.
UpdateApcPowerReceiver();
UpdatePowerConsumer();
UpdateNetworkBattery();
}
private void ReconnectNetworks()
{
foreach (var apcNet in _apcNetReconnectQueue)
{
@@ -229,21 +248,11 @@ namespace Content.Server.Power.EntitySystems
_powerNetReconnectQueue.Clear();
}
// Synchronize batteries
RaiseLocalEvent(new NetworkBatteryPreSync());
// Run power solver.
_solver.Tick(frameTime, _powerState);
// Synchronize batteries, the other way around.
RaiseLocalEvent(new NetworkBatteryPostSync());
// Send events where necessary.
// TODO: Instead of querying ALL power components every tick, and then checking if an event needs to be
// raised, should probably assemble a list of entity Uids during the actual solver steps.
private void UpdateApcPowerReceiver()
{
var appearanceQuery = GetEntityQuery<AppearanceComponent>();
foreach (var apcReceiver in EntityManager.EntityQuery<ApcPowerReceiverComponent>())
var enumerator = EntityQueryEnumerator<ApcPowerReceiverComponent>();
while (enumerator.MoveNext(out var apcReceiver))
{
var powered = apcReceiver.Powered;
if (powered == apcReceiver.PoweredLastUpdate)
@@ -257,8 +266,12 @@ namespace Content.Server.Power.EntitySystems
if (appearanceQuery.TryGetComponent(apcReceiver.Owner, out var appearance))
_appearance.SetData(appearance.Owner, PowerDeviceVisuals.Powered, powered, appearance);
}
}
foreach (var consumer in EntityManager.EntityQuery<PowerConsumerComponent>())
private void UpdatePowerConsumer()
{
var enumerator = EntityQueryEnumerator<PowerConsumerComponent>();
while (enumerator.MoveNext(out var consumer))
{
var newRecv = consumer.NetworkLoad.ReceivingPower;
ref var lastRecv = ref consumer.LastReceived;
@@ -269,8 +282,12 @@ namespace Content.Server.Power.EntitySystems
var msg = new PowerConsumerReceivedChanged(newRecv, consumer.DrawRate);
RaiseLocalEvent(consumer.Owner, ref msg);
}
}
foreach (var powerNetBattery in EntityManager.EntityQuery<PowerNetworkBatteryComponent>())
private void UpdateNetworkBattery()
{
var enumerator = EntityQueryEnumerator<PowerNetworkBatteryComponent>();
while (enumerator.MoveNext(out var powerNetBattery))
{
var lastSupply = powerNetBattery.LastSupply;
var currentSupply = powerNetBattery.CurrentSupply;
@@ -289,7 +306,6 @@ namespace Content.Server.Power.EntitySystems
powerNetBattery.LastSupply = currentSupply;
}
}
}
private void AllocLoad(PowerState.Load load)
{