Use priority queue for power networks (#12134)

This commit is contained in:
metalgearsloth
2022-10-23 08:51:02 +11:00
committed by GitHub
parent 15029b8410
commit ff2fbda804

View File

@@ -17,7 +17,7 @@ namespace Content.Server.Power.Pow3r
} }
} }
private Network[] _sortBuffer = Array.Empty<Network>(); private readonly PriorityQueue<int, Network> _sortBuffer = new(new HeightComparer());
public void Tick(float frameTime, PowerState state) public void Tick(float frameTime, PowerState state)
{ {
@@ -57,19 +57,13 @@ namespace Content.Server.Power.Pow3r
EstimateNetworkDepth(state, network); EstimateNetworkDepth(state, network);
} }
if (_sortBuffer.Length != state.Networks.Count)
_sortBuffer = new Network[state.Networks.Count];
var i = 0;
foreach (var network in state.Networks.Values) foreach (var network in state.Networks.Values)
{ {
_sortBuffer[i++] = network; _sortBuffer.Enqueue(network.Height, network);
} }
Array.Sort(_sortBuffer, HeightComparer.Instance);
// Go over every network. // Go over every network.
foreach (var network in _sortBuffer) while (_sortBuffer.TryDequeue(out _, out var network))
{ {
// Add up demand in network. // Add up demand in network.
var demand = 0f; var demand = 0f;