Пример #1
0
        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()
        }
Пример #2
0
        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);
        }
Пример #3
0
 public void Remove(ChunkCoordinates coordinates)
 {
     ChunkQueues.TryRemove(coordinates, out _);
 }