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); 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) foreach (var apcNet in _apcNetReconnectQueue)
{ {
@@ -229,21 +248,11 @@ namespace Content.Server.Power.EntitySystems
_powerNetReconnectQueue.Clear(); _powerNetReconnectQueue.Clear();
} }
// Synchronize batteries private void UpdateApcPowerReceiver()
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.
{ {
var appearanceQuery = GetEntityQuery<AppearanceComponent>(); 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; var powered = apcReceiver.Powered;
if (powered == apcReceiver.PoweredLastUpdate) if (powered == apcReceiver.PoweredLastUpdate)
@@ -257,8 +266,12 @@ namespace Content.Server.Power.EntitySystems
if (appearanceQuery.TryGetComponent(apcReceiver.Owner, out var appearance)) if (appearanceQuery.TryGetComponent(apcReceiver.Owner, out var appearance))
_appearance.SetData(appearance.Owner, PowerDeviceVisuals.Powered, powered, 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; var newRecv = consumer.NetworkLoad.ReceivingPower;
ref var lastRecv = ref consumer.LastReceived; ref var lastRecv = ref consumer.LastReceived;
@@ -269,8 +282,12 @@ namespace Content.Server.Power.EntitySystems
var msg = new PowerConsumerReceivedChanged(newRecv, consumer.DrawRate); var msg = new PowerConsumerReceivedChanged(newRecv, consumer.DrawRate);
RaiseLocalEvent(consumer.Owner, ref msg); 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 lastSupply = powerNetBattery.LastSupply;
var currentSupply = powerNetBattery.CurrentSupply; var currentSupply = powerNetBattery.CurrentSupply;
@@ -289,7 +306,6 @@ namespace Content.Server.Power.EntitySystems
powerNetBattery.LastSupply = currentSupply; powerNetBattery.LastSupply = currentSupply;
} }
} }
}
private void AllocLoad(PowerState.Load load) private void AllocLoad(PowerState.Load load)
{ {