Beispiel #1
0
        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);
        }