public void Tick(int budget) { while (budget > 0 && _energy > 0) { Core core = _grid.ListOfEntries.Select(e => e.Core).OrderByDescending(c => c.Energy).First(); if (core.Energy == 0) { core = _grid.Entries[_nextEnergyReceiver++].Core; budget--; _energy--; core.Energy++; } Core target = _grid.GetTargetOf(core); _exec.ConsumeEnergyUntilExecute(core, target); _changeTracker.Add(core); _changeTracker.Add(target); } NotifyChanges(); }