Pow3r goes brrr with generational IDs.

This commit is contained in:
Pieter-Jan Briers
2021-07-31 02:50:11 +02:00
parent b92a2ba115
commit 73e4946e27
5 changed files with 310 additions and 78 deletions

View File

@@ -20,15 +20,14 @@ namespace Pow3r
return;
_paused = dat.Paused;
_nextId = dat.NextId;
_currentSolver = dat.Solver;
_state = new PowerState
{
Networks = dat.Networks.ToDictionary(n => n.Id, n => n),
Supplies = dat.Supplies.ToDictionary(s => s.Id, s => s),
Loads = dat.Loads.ToDictionary(l => l.Id, l => l),
Batteries = dat.Batteries.ToDictionary(b => b.Id, b => b)
Networks = GenIdStorage.FromEnumerable(dat.Networks.Select(n => (n.Id, n))),
Supplies = GenIdStorage.FromEnumerable(dat.Supplies.Select(s => (s.Id, s))),
Loads = GenIdStorage.FromEnumerable(dat.Loads.Select(l => (l.Id, l))),
Batteries = GenIdStorage.FromEnumerable(dat.Batteries.Select(b => (b.Id, b)))
};
_displayLoads = dat.Loads.ToDictionary(n => n.Id, _ => new DisplayLoad());
@@ -44,7 +43,6 @@ namespace Pow3r
var data = new DiskDat
{
Paused = _paused,
NextId = _nextId,
Solver = _currentSolver,
Loads = _state.Loads.Values.ToList(),
@@ -59,7 +57,6 @@ namespace Pow3r
private sealed class DiskDat
{
public bool Paused;
public int NextId;
public int Solver;
public List<Load> Loads;

View File

@@ -10,7 +10,6 @@ namespace Pow3r
{
private const int MaxTickData = 180;
private int _nextId = 1;
private PowerState _state = new();
private Network _linking;
private int _tickDataIdx;
@@ -33,11 +32,6 @@ namespace Pow3r
private readonly Queue<object> _remQueue = new();
private readonly Stopwatch _simStopwatch = new Stopwatch();
private NodeId AllocId()
{
return new(_nextId++);
}
private void Tick(float frameTime)
{
if (_paused)

View File

@@ -36,30 +36,30 @@ namespace Pow3r
if (Button("Generator"))
{
var id = AllocId();
_state.Supplies.Add(id, new Supply { Id = id });
_displaySupplies.Add(id, new DisplaySupply());
var supply = new Supply();
_state.Supplies.Allocate(out supply.Id) = supply;
_displaySupplies.Add(supply.Id, new DisplaySupply());
}
if (Button("Load"))
{
var id = AllocId();
_state.Loads.Add(id, new Load { Id = id });
_displayLoads.Add(id, new DisplayLoad());
var load = new Load();
_state.Loads.Allocate(out load.Id) = load;
_displayLoads.Add(load.Id, new DisplayLoad());
}
if (Button("Network"))
{
var id = AllocId();
_state.Networks.Add(id, new Network { Id = id });
_displayNetworks.Add(id, new DisplayNetwork());
var network = new Network();
_state.Networks.Allocate(out network.Id) = network;
_displayNetworks.Add(network.Id, new DisplayNetwork());
}
if (Button("Battery"))
{
var id = AllocId();
_state.Batteries.Add(id, new Battery { Id = id });
_displayBatteries.Add(id, new DisplayBattery());
var battery = new Battery();
_state.Batteries.Allocate(out battery.Id) = battery;
_displayBatteries.Add(battery.Id, new DisplayBattery());
}
Checkbox("Paused", ref _paused);
@@ -355,25 +355,25 @@ namespace Pow3r
switch (item)
{
case Network n:
_state.Networks.Remove(n.Id);
_state.Networks.Free(n.Id);
_displayNetworks.Remove(n.Id);
reLink = true;
break;
case Supply s:
_state.Supplies.Remove(s.Id);
_state.Supplies.Free(s.Id);
_state.Networks.Values.ForEach(n => n.Supplies.Remove(s.Id));
_displaySupplies.Remove(s.Id);
break;
case Load l:
_state.Loads.Remove(l.Id);
_state.Loads.Free(l.Id);
_state.Networks.Values.ForEach(n => n.Loads.Remove(l.Id));
_displayLoads.Remove(l.Id);
break;
case Battery b:
_state.Batteries.Remove(b.Id);
_state.Batteries.Free(b.Id);
_state.Networks.Values.ForEach(n => n.BatteriesCharging.Remove(b.Id));
_state.Networks.Values.ForEach(n => n.BatteriesDischarging.Remove(b.Id));
_displayBatteries.Remove(b.Id);