Use non-directed event for powernet battery sync.

Most of the CPU time in the power system was sending these events.
This commit is contained in:
Pieter-Jan Briers
2021-07-29 16:55:09 +02:00
parent 9b42c1f69b
commit 8c362fcd9b
2 changed files with 17 additions and 21 deletions

View File

@@ -11,23 +11,25 @@ namespace Content.Server.Power.EntitySystems
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<BatteryComponent, NetworkBatteryPreSync>(PreSync); SubscribeLocalEvent<NetworkBatteryPreSync>(PreSync);
SubscribeLocalEvent<BatteryComponent, NetworkBatteryPostSync>(PostSync); SubscribeLocalEvent<NetworkBatteryPostSync>(PostSync);
} }
private void PreSync(EntityUid uid, BatteryComponent component, NetworkBatteryPreSync args) private void PreSync(NetworkBatteryPreSync ev)
{ {
var networkBattery = ComponentManager.GetComponent<PowerNetworkBatteryComponent>(uid); foreach (var (bat, netBat) in ComponentManager.EntityQuery<BatteryComponent, PowerNetworkBatteryComponent>())
{
networkBattery.NetworkBattery.Capacity = component.MaxCharge; netBat.NetworkBattery.Capacity = bat.MaxCharge;
networkBattery.NetworkBattery.CurrentStorage = component.CurrentCharge; netBat.NetworkBattery.CurrentStorage = bat.CurrentCharge;
}
} }
private void PostSync(EntityUid uid, BatteryComponent component, NetworkBatteryPostSync args) private void PostSync(NetworkBatteryPostSync ev)
{ {
var networkBattery = ComponentManager.GetComponent<PowerNetworkBatteryComponent>(uid); foreach (var (bat, netBat) in ComponentManager.EntityQuery<BatteryComponent, PowerNetworkBatteryComponent>())
{
component.CurrentCharge = networkBattery.NetworkBattery.CurrentStorage; bat.CurrentCharge = netBat.NetworkBattery.CurrentStorage;
}
} }
public override void Update(float frameTime) public override void Update(float frameTime)

View File

@@ -175,19 +175,13 @@ namespace Content.Server.Power.EntitySystems
} }
// Synchronize batteries // Synchronize batteries
foreach (var battery in ComponentManager.EntityQuery<PowerNetworkBatteryComponent>()) RaiseLocalEvent(new NetworkBatteryPreSync());
{
RaiseLocalEvent(battery.Owner.Uid, new NetworkBatteryPreSync());
}
// Run power solver. // Run power solver.
_solver.Tick(frameTime, _powerState); _solver.Tick(frameTime, _powerState);
// Synchronize batteries, the other way around. // Synchronize batteries, the other way around.
foreach (var battery in ComponentManager.EntityQuery<PowerNetworkBatteryComponent>()) RaiseLocalEvent(new NetworkBatteryPostSync());
{
RaiseLocalEvent(battery.Owner.Uid, new NetworkBatteryPostSync());
}
// Send events where necessary. // Send events where necessary.
{ {
@@ -313,7 +307,7 @@ namespace Content.Server.Power.EntitySystems
/// Raised before power network simulation happens, to synchronize battery state from /// Raised before power network simulation happens, to synchronize battery state from
/// components like <see cref="BatteryComponent"/> into <see cref="PowerNetworkBatteryComponent"/>. /// components like <see cref="BatteryComponent"/> into <see cref="PowerNetworkBatteryComponent"/>.
/// </summary> /// </summary>
public sealed class NetworkBatteryPreSync : EntityEventArgs public struct NetworkBatteryPreSync
{ {
} }
@@ -321,7 +315,7 @@ namespace Content.Server.Power.EntitySystems
/// Raised after power network simulation happens, to synchronize battery charge changes from /// Raised after power network simulation happens, to synchronize battery charge changes from
/// <see cref="PowerNetworkBatteryComponent"/> to components like <see cref="BatteryComponent"/>. /// <see cref="PowerNetworkBatteryComponent"/> to components like <see cref="BatteryComponent"/>.
/// </summary> /// </summary>
public sealed class NetworkBatteryPostSync : EntityEventArgs public struct NetworkBatteryPostSync
{ {
} }