public byte[] GetChunk(int x, int y, int z) { x = x / chunksize; y = y / chunksize; z = z / chunksize; Chunk chunk = chunks[x, y, z]; if (chunk == null) { byte[] serializedChunk = ChunkDb.GetChunk(d_ChunkDb, x, y, z); if (serializedChunk != null) { chunks[x, y, z] = DeserializeChunk(serializedChunk); //todo get heightmap from disk UpdateChunkHeight(x, y, z); return(chunks[x, y, z].data); } // update chunk size and get chunk d_Generator.ChunkSize = chunksize; byte[, ,] newchunk = d_Generator.GetChunk(x, y, z); if (newchunk != null) { chunks[x, y, z] = new Chunk() { data = MapUtil.ToFlatMap(newchunk) }; } else { chunks[x, y, z] = new Chunk() { data = new byte[chunksize * chunksize * chunksize] }; } chunks[x, y, z].DirtyForSaving = true; UpdateChunkHeight(x, y, z); return(chunks[x, y, z].data); } return(chunk.data); }