Use AllEntityQuery<> In power systems (#15336)

This commit is contained in:
Leon Friedrich
2023-04-15 07:45:02 +12:00
committed by GitHub
parent 9b8b844386
commit 5b09ee3102
3 changed files with 31 additions and 15 deletions

View File

@@ -57,7 +57,9 @@ namespace Content.Server.Power.EntitySystems
private void PreSync(NetworkBatteryPreSync ev) private void PreSync(NetworkBatteryPreSync ev)
{ {
foreach (var (netBat, bat) in EntityManager.EntityQuery<PowerNetworkBatteryComponent, BatteryComponent>()) // Ignoring entity pausing. If the entity was paused, neither component's data should have been changed.
var enumerator = AllEntityQuery<PowerNetworkBatteryComponent, BatteryComponent>();
while (enumerator.MoveNext(out var netBat, out var bat))
{ {
netBat.NetworkBattery.Capacity = bat.MaxCharge; netBat.NetworkBattery.Capacity = bat.MaxCharge;
netBat.NetworkBattery.CurrentStorage = bat.CurrentCharge; netBat.NetworkBattery.CurrentStorage = bat.CurrentCharge;
@@ -66,9 +68,15 @@ namespace Content.Server.Power.EntitySystems
private void PostSync(NetworkBatteryPostSync ev) private void PostSync(NetworkBatteryPostSync ev)
{ {
foreach (var (netBat, bat) in EntityManager.EntityQuery<PowerNetworkBatteryComponent, BatteryComponent>()) // Ignoring entity pausing. If the entity was paused, neither component's data should have been changed.
var enumerator = AllEntityQuery<PowerNetworkBatteryComponent, BatteryComponent>();
while (enumerator.MoveNext(out var uid, out var netBat, out var bat))
{ {
bat.CurrentCharge = netBat.NetworkBattery.CurrentStorage; var netCharge = netBat.NetworkBattery.CurrentStorage;
if (MathHelper.CloseTo(bat.CurrentCharge, netCharge))
continue;
bat.CurrentCharge = netCharge;
} }
} }
@@ -93,7 +101,7 @@ namespace Content.Server.Power.EntitySystems
private void OnEmpPulse(EntityUid uid, BatteryComponent component, ref EmpPulseEvent args) private void OnEmpPulse(EntityUid uid, BatteryComponent component, ref EmpPulseEvent args)
{ {
args.Affected = true; args.Affected = true;
component.UseCharge(args.EnergyConsumption); component.UseCharge(args.EnergyConsumption);
} }
} }
} }

View File

@@ -289,36 +289,44 @@ namespace Content.Server.Power.EntitySystems
private void UpdateApcPowerReceiver() private void UpdateApcPowerReceiver()
{ {
var appearanceQuery = GetEntityQuery<AppearanceComponent>(); var appearanceQuery = GetEntityQuery<AppearanceComponent>();
var enumerator = EntityQueryEnumerator<ApcPowerReceiverComponent>(); var metaQuery = GetEntityQuery<MetaDataComponent>();
while (enumerator.MoveNext(out var apcReceiver)) var enumerator = AllEntityQuery<ApcPowerReceiverComponent>();
while (enumerator.MoveNext(out var uid, out var apcReceiver))
{ {
var powered = apcReceiver.Powered; var powered = apcReceiver.Powered;
if (powered == apcReceiver.PoweredLastUpdate) if (powered == apcReceiver.PoweredLastUpdate)
continue; continue;
if (metaQuery.GetComponent(uid).EntityPaused)
continue;
apcReceiver.PoweredLastUpdate = powered; apcReceiver.PoweredLastUpdate = powered;
var ev = new PowerChangedEvent(apcReceiver.Powered, apcReceiver.NetworkLoad.ReceivingPower); var ev = new PowerChangedEvent(apcReceiver.Powered, apcReceiver.NetworkLoad.ReceivingPower);
RaiseLocalEvent(apcReceiver.Owner, ref ev); RaiseLocalEvent(apcReceiver.Owner, ref ev);
if (appearanceQuery.TryGetComponent(apcReceiver.Owner, out var appearance)) if (appearanceQuery.TryGetComponent(uid, out var appearance))
_appearance.SetData(appearance.Owner, PowerDeviceVisuals.Powered, powered, appearance); _appearance.SetData(uid, PowerDeviceVisuals.Powered, powered, appearance);
} }
} }
private void UpdatePowerConsumer() private void UpdatePowerConsumer()
{ {
var enumerator = EntityQueryEnumerator<PowerConsumerComponent>(); var metaQuery = GetEntityQuery<MetaDataComponent>();
while (enumerator.MoveNext(out var consumer)) var enumerator = AllEntityQuery<PowerConsumerComponent>();
while (enumerator.MoveNext(out var uid, 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;
if (MathHelper.CloseToPercent(lastRecv, newRecv)) if (MathHelper.CloseToPercent(lastRecv, newRecv))
continue; continue;
if (metaQuery.GetComponent(uid).EntityPaused)
continue;
lastRecv = newRecv; lastRecv = newRecv;
var msg = new PowerConsumerReceivedChanged(newRecv, consumer.DrawRate); var msg = new PowerConsumerReceivedChanged(newRecv, consumer.DrawRate);
RaiseLocalEvent(consumer.Owner, ref msg); RaiseLocalEvent(uid, ref msg);
} }
} }

View File

@@ -33,7 +33,7 @@ namespace Content.Server.Power.Pow3r
foreach (var group in state.GroupedNets) foreach (var group in state.GroupedNets)
{ {
// Note that many net-layers only have a handful of networks. // Note that many net-layers only have a handful of networks.
// E.g., the number of nets from lowest to heights for box and saltern are: // E.g., the number of nets from lowest to highest for box and saltern are:
// Saltern: 1477, 11, 2, 2, 3. // Saltern: 1477, 11, 2, 2, 3.
// Box: 3308, 20, 1, 5. // Box: 3308, 20, 1, 5.
// //
@@ -164,7 +164,7 @@ namespace Content.Server.Power.Pow3r
battery.AvailableSupply = Math.Min(scaledSpace, supplyAndPassthrough); battery.AvailableSupply = Math.Min(scaledSpace, supplyAndPassthrough);
battery.LoadingNetworkDemand = unmet; battery.LoadingNetworkDemand = unmet;
battery.MaxEffectiveSupply = Math.Min(battery.CurrentStorage / frameTime, battery.MaxSupply + battery.CurrentReceiving * battery.Efficiency); battery.MaxEffectiveSupply = Math.Min(battery.CurrentStorage / frameTime, battery.MaxSupply + battery.CurrentReceiving * battery.Efficiency);
totalBatterySupply += battery.AvailableSupply; totalBatterySupply += battery.AvailableSupply;
totalMaxBatterySupply += battery.MaxEffectiveSupply; totalMaxBatterySupply += battery.MaxEffectiveSupply;
} }
@@ -174,7 +174,7 @@ namespace Content.Server.Power.Pow3r
network.LastCombinedMaxSupply = totalMaxSupply + totalMaxBatterySupply; network.LastCombinedMaxSupply = totalMaxSupply + totalMaxBatterySupply;
var met = Math.Min(demand, network.LastCombinedSupply); var met = Math.Min(demand, network.LastCombinedSupply);
if (met == 0) if (met == 0)
return; return;
var supplyRatio = met / demand; var supplyRatio = met / demand;
@@ -228,7 +228,7 @@ namespace Content.Server.Power.Pow3r
supply.SupplyRampTarget = supply.MaxSupply * targetRelativeSupplyOutput; supply.SupplyRampTarget = supply.MaxSupply * targetRelativeSupplyOutput;
} }
} }
if (unmet <= 0 || totalBatterySupply <= 0) if (unmet <= 0 || totalBatterySupply <= 0)
return; return;