public void Recalculate(ChunkColumn chunk) { ChunkQueues.TryRemove(new ChunkCoordinates(chunk.X, chunk.Z), out _); // var lightSources = chunk.GetLightSources().ToArray(); foreach (var section in chunk.Sections) { section?.ResetLight(true, false); section?.RemoveInvalidBlocks(); } var chunkpos = new BlockCoordinates(chunk.X << 4, 0, chunk.Z << 4); foreach (var lightsource in chunk.GetLightSources().OrderByDescending(x => x.Y)) { Enqueue(chunkpos + lightsource); } //chunk.GetLightSources() }
public bool Process(ChunkCoordinates coordinates) { int count = 0; if (ChunkQueues.TryGetValue(coordinates, out var queue)) { while (queue.TryDequeue(out var coords) && !CancellationToken.IsCancellationRequested) { ProcessNode(World, coords, queue); count++; } if (queue.IsEmpty) { ChunkQueues.TryRemove(coordinates, out _); } } return(count > 0); }
public void Remove(ChunkCoordinates coordinates) { ChunkQueues.TryRemove(coordinates, out _); }