]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Use AllEntityQuery<> In power systems (#15336)
authorLeon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Fri, 14 Apr 2023 19:45:02 +0000 (07:45 +1200)
committerGitHub <noreply@github.com>
Fri, 14 Apr 2023 19:45:02 +0000 (12:45 -0700)
Content.Server/Power/EntitySystems/BatterySystem.cs
Content.Server/Power/EntitySystems/PowerNetSystem.cs
Content.Server/Power/Pow3r/BatteryRampPegSolver.cs

index b8dc6764850ae404744e094c303fe4393329b686..0d2bfb3c25edf6569b11b015052d4d22c1aa7ff9 100644 (file)
@@ -57,7 +57,9 @@ namespace Content.Server.Power.EntitySystems
 
         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.CurrentStorage = bat.CurrentCharge;
@@ -66,9 +68,15 @@ namespace Content.Server.Power.EntitySystems
 
         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)
         {
             args.Affected = true;
-            component.UseCharge(args.EnergyConsumption);   
+            component.UseCharge(args.EnergyConsumption);
         }
     }
 }
index a9898f8cce02eaf16023db0c645c8466535efc91..6f66e7ba5397d55a1770012c2d6f879e9f2ac10e 100644 (file)
@@ -289,36 +289,44 @@ namespace Content.Server.Power.EntitySystems
         private void UpdateApcPowerReceiver()
         {
             var appearanceQuery = GetEntityQuery<AppearanceComponent>();
-            var enumerator = EntityQueryEnumerator<ApcPowerReceiverComponent>();
-            while (enumerator.MoveNext(out var apcReceiver))
+            var metaQuery = GetEntityQuery<MetaDataComponent>();
+            var enumerator = AllEntityQuery<ApcPowerReceiverComponent>();
+            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<PowerConsumerComponent>();
-            while (enumerator.MoveNext(out var consumer))
+            var metaQuery = GetEntityQuery<MetaDataComponent>();
+            var enumerator = AllEntityQuery<PowerConsumerComponent>();
+            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);
             }
         }
 
index 54e52ef43596102f4f978aef6bd52d1cfd732d31..ec003daf954a6d1b173eca65c219fe7279f76001 100644 (file)
@@ -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;