Power struct enumerators (#12396)
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user