namespace Sand.ChunkPrototype; internal sealed class ChunkActivityTracker { private readonly List _activeChunks = new(); private readonly List _sleepingChunks = new(); public (IReadOnlyList ActiveChunks, int SleepingChunks) Build(IReadOnlyDictionary pages) { _activeChunks.Clear(); _sleepingChunks.Clear(); foreach (var (coord, page) in pages) { if (page.IsActive || page.HasFieldActivity || page.PendingActiveSteps > 0) { _activeChunks.Add(coord); } else { _sleepingChunks.Add(coord); } } _activeChunks.Sort(static (left, right) => { var yCompare = right.Y.CompareTo(left.Y); return yCompare != 0 ? yCompare : left.X.CompareTo(right.X); }); return (_activeChunks, _sleepingChunks.Count); } }