void LoadChunkColumnInner(BlockPos columnPosition) { Chunk chunk; if (Config.Toggle.UseMultiThreading) { for (int y = Config.Env.WorldMaxY; y >= Config.Env.WorldMinY; y -= Config.Env.ChunkSize) { for (int x = -Config.Env.ChunkSize; x <= Config.Env.ChunkSize; x += Config.Env.ChunkSize) { for (int z = -Config.Env.ChunkSize; z <= Config.Env.ChunkSize; z += Config.Env.ChunkSize) { chunk = world.GetChunk(columnPosition.Add(x, y, z)); while (!chunk.terrainGenerated) { Thread.Sleep(0); } } } } } //Render chunk for (int y = Config.Env.WorldMaxY; y >= Config.Env.WorldMinY; y -= Config.Env.ChunkSize) { chunk = world.GetChunk(columnPosition.Add(0, y, 0)); if (Config.Toggle.LightSceneOnStart) { BlockLight.FloodLightChunkColumn(world, chunk); } chunk.UpdateChunk(); } }
void LoadChunkColumnInner(BlockPos columnPosition) { Chunk chunk; // Terrain generation can happen in another thread meaning that we will reach this point before the //thread completes, we need to wait for all the chunks we depend on to finish generating before we //can calculate any light spread or render the chunk if (Config.Toggle.UseMultiThreading) { for (int y = Config.Env.WorldMaxY; y >= Config.Env.WorldMinY; y -= Config.Env.ChunkSize) { for (int x = -Config.Env.ChunkSize; x <= Config.Env.ChunkSize; x += Config.Env.ChunkSize) { for (int z = -Config.Env.ChunkSize; z <= Config.Env.ChunkSize; z += Config.Env.ChunkSize) { chunk = world.GetChunk(columnPosition.Add(x, y, z)); while (!chunk.terrainGenerated) { Thread.Sleep(0); } } } } } //Render chunk for (int y = Config.Env.WorldMaxY; y >= Config.Env.WorldMinY; y -= Config.Env.ChunkSize) { chunk = world.GetChunk(columnPosition.Add(0, y, 0)); if (Config.Toggle.LightSceneOnStart) { BlockLight.FloodLightChunkColumn(world, chunk); } chunk.UpdateChunk(); } }