/// <summary> /// Load terrain, saved changes and resets /// the light for an empty chunk /// </summary> /// <param name="chunk">The chunk to generate and load for</param> protected virtual void GenAndLoadChunk(Chunk chunk) { try { m_TerrainGen.OnGenerateChunkColumn(chunk.Position); chunk.SetFlag(Chunk.Flag.TerrainGenerated, true); } catch (System.Exception ex) { Debug.LogError(ex); throw; } }
void DeleteChunks() { var chunksToDelete = new List <BlockPos>(); foreach (var chunk in World.Chunks) { Vector3 chunkPos = chunk.Key; float distance = Vector3.Distance( new Vector3(chunkPos.x, 0, chunkPos.z), new Vector3(transform.position.x, 0, transform.position.z)); if (distance > HertzVoxConfig.DISTANCE_TO_DELETE_CHUNKS * HertzVoxConfig.BlockSize) { chunksToDelete.Add(chunk.Key); } } foreach (var chunk in chunksToDelete) { Chunk _chunk = World.GetChunk(chunk); _chunk.gameObject.SetActive(false); _chunk.SetFlag(Chunk.Flag.Loaded, false); } }
public void LoadChunkColumn(BlockPos columnPosition) { for (int y = WorldMaxY; y >= WorldMinY; y -= Chunk.CHUNK_SIZE) { BlockPos pos = new BlockPos(columnPosition.x, y, columnPosition.z); Chunk chunk = World.GetChunk(pos); if (chunk != null) { chunk.SetFlag(Chunk.Flag.Loaded, true); chunk.gameObject.SetActive(true); } } // Start the threaded chunk generation if (HertzVoxConfig.UseMultiThreading) { Thread thread = new Thread(() => { LoadChunkColumnInner(columnPosition); }); thread.Start(); } else { LoadChunkColumnInner(columnPosition); } }