From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Fri, 14 Apr 2023 19:45:02 +0000 (+1200) Subject: Use AllEntityQuery<> In power systems (#15336) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=5b09ee3102e9723141c5f90f485fada812e0747d;p=space-station-14.git Use AllEntityQuery<> In power systems (#15336) --- diff --git a/Content.Server/Power/EntitySystems/BatterySystem.cs b/Content.Server/Power/EntitySystems/BatterySystem.cs index b8dc676485..0d2bfb3c25 100644 --- a/Content.Server/Power/EntitySystems/BatterySystem.cs +++ b/Content.Server/Power/EntitySystems/BatterySystem.cs @@ -57,7 +57,9 @@ namespace Content.Server.Power.EntitySystems private void PreSync(NetworkBatteryPreSync ev) { - foreach (var (netBat, bat) in EntityManager.EntityQuery()) + // Ignoring entity pausing. If the entity was paused, neither component's data should have been changed. + var enumerator = AllEntityQuery(); + while (enumerator.MoveNext(out var netBat, out var bat)) { netBat.NetworkBattery.Capacity = bat.MaxCharge; netBat.NetworkBattery.CurrentStorage = bat.CurrentCharge; @@ -66,9 +68,15 @@ namespace Content.Server.Power.EntitySystems private void PostSync(NetworkBatteryPostSync ev) { - foreach (var (netBat, bat) in EntityManager.EntityQuery()) + // Ignoring entity pausing. If the entity was paused, neither component's data should have been changed. + var enumerator = AllEntityQuery(); + 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) { args.Affected = true; - component.UseCharge(args.EnergyConsumption); + component.UseCharge(args.EnergyConsumption); } } } diff --git a/Content.Server/Power/EntitySystems/PowerNetSystem.cs b/Content.Server/Power/EntitySystems/PowerNetSystem.cs index a9898f8cce..6f66e7ba53 100644 --- a/Content.Server/Power/EntitySystems/PowerNetSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerNetSystem.cs @@ -289,36 +289,44 @@ namespace Content.Server.Power.EntitySystems private void UpdateApcPowerReceiver() { var appearanceQuery = GetEntityQuery(); - var enumerator = EntityQueryEnumerator(); - while (enumerator.MoveNext(out var apcReceiver)) + var metaQuery = GetEntityQuery(); + var enumerator = AllEntityQuery(); + while (enumerator.MoveNext(out var uid, out var apcReceiver)) { var powered = apcReceiver.Powered; if (powered == apcReceiver.PoweredLastUpdate) continue; + if (metaQuery.GetComponent(uid).EntityPaused) + continue; + apcReceiver.PoweredLastUpdate = powered; var ev = new PowerChangedEvent(apcReceiver.Powered, apcReceiver.NetworkLoad.ReceivingPower); RaiseLocalEvent(apcReceiver.Owner, ref ev); - if (appearanceQuery.TryGetComponent(apcReceiver.Owner, out var appearance)) - _appearance.SetData(appearance.Owner, PowerDeviceVisuals.Powered, powered, appearance); + if (appearanceQuery.TryGetComponent(uid, out var appearance)) + _appearance.SetData(uid, PowerDeviceVisuals.Powered, powered, appearance); } } private void UpdatePowerConsumer() { - var enumerator = EntityQueryEnumerator(); - while (enumerator.MoveNext(out var consumer)) + var metaQuery = GetEntityQuery(); + var enumerator = AllEntityQuery(); + while (enumerator.MoveNext(out var uid, out var consumer)) { var newRecv = consumer.NetworkLoad.ReceivingPower; ref var lastRecv = ref consumer.LastReceived; if (MathHelper.CloseToPercent(lastRecv, newRecv)) continue; + if (metaQuery.GetComponent(uid).EntityPaused) + continue; + lastRecv = newRecv; var msg = new PowerConsumerReceivedChanged(newRecv, consumer.DrawRate); - RaiseLocalEvent(consumer.Owner, ref msg); + RaiseLocalEvent(uid, ref msg); } } diff --git a/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs b/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs index 54e52ef435..ec003daf95 100644 --- a/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs +++ b/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs @@ -33,7 +33,7 @@ namespace Content.Server.Power.Pow3r foreach (var group in state.GroupedNets) { // 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. // Box: 3308, 20, 1, 5. // @@ -164,7 +164,7 @@ namespace Content.Server.Power.Pow3r battery.AvailableSupply = Math.Min(scaledSpace, supplyAndPassthrough); 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; totalMaxBatterySupply += battery.MaxEffectiveSupply; } @@ -174,7 +174,7 @@ namespace Content.Server.Power.Pow3r network.LastCombinedMaxSupply = totalMaxSupply + totalMaxBatterySupply; var met = Math.Min(demand, network.LastCombinedSupply); - if (met == 0) + if (met == 0) return; var supplyRatio = met / demand; @@ -228,7 +228,7 @@ namespace Content.Server.Power.Pow3r supply.SupplyRampTarget = supply.MaxSupply * targetRelativeSupplyOutput; } } - + if (unmet <= 0 || totalBatterySupply <= 0) return;