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;
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;
}
}
private void OnEmpPulse(EntityUid uid, BatteryComponent component, ref EmpPulseEvent args)
{
args.Affected = true;
- component.UseCharge(args.EnergyConsumption);
+ component.UseCharge(args.EnergyConsumption);
}
}
}
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);
}
}
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.
//
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;
}
network.LastCombinedMaxSupply = totalMaxSupply + totalMaxBatterySupply;
var met = Math.Min(demand, network.LastCombinedSupply);
- if (met == 0)
+ if (met == 0)
return;
var supplyRatio = met / demand;
supply.SupplyRampTarget = supply.MaxSupply * targetRelativeSupplyOutput;
}
}
-
+
if (unmet <= 0 || totalBatterySupply <= 0)
return;