示例#1
0
 private void SetUpperVoxels(IChunkColumn chunk)
 {
     for (int x = 0; x < 16; x++)
     {
         for (int z = 0; z < 16; z++)
         {
             for (int y = chunk.GetHeighest() + 1; y < 255; y++)
             {
                 chunk.SetSkyLight(x, y, z, 15);
             }
         }
     }
 }
示例#2
0
        /// <summary>
        /// Queues the initial lighting pass for a newly generated chunk.
        /// </summary>
        public void CalculateLighting(IChunkColumn chunk, bool skyLight = true, bool initial = false)
        {
            if (!chunk.SkyLightDirty)
            {
                return;
            }
            // Set voxels above max height to 0xFF
            if (initial)
            {
                SetUpperVoxels(chunk);
            }

            var coords = new ChunkCoordinates(chunk.X * 16, chunk.Z * 16);
            var min    = new Vector3(coords.X, 0, coords.Z);
            var max    = new Vector3(coords.X + 16, chunk.GetHeighest() + 2, coords.Z + 16);

            EnqueueOperation(new ChunkCoordinates(chunk.X, chunk.Z), new BoundingBox(min, max),
                             skyLight, initial);
        }