/*private void Split(int maxDepth) { this.children = new Chunk[Chunk.ChildCount]; int depth = this.depth + 1; float quarter = this.length / this.looseness / 4f; this.children[0] = new Chunk(maxDepth, depth, this.center + new Vector3(-quarter, quarter, -quarter)); this.children[1] = new Chunk(maxDepth, depth, this.center + new Vector3(quarter, quarter, -quarter)); this.children[2] = new Chunk(maxDepth, depth, this.center + new Vector3(-quarter, quarter, quarter)); this.children[3] = new Chunk(maxDepth, depth, this.center + new Vector3(quarter, quarter, quarter)); this.children[4] = new Chunk(maxDepth, depth, this.center + new Vector3(-quarter, -quarter, -quarter)); this.children[5] = new Chunk(maxDepth, depth, this.center + new Vector3(quarter, -quarter, -quarter)); this.children[6] = new Chunk(maxDepth, depth, this.center + new Vector3(-quarter, -quarter, quarter)); this.children[7] = new Chunk(maxDepth, depth, this.center + new Vector3(quarter, -quarter, quarter)); }*/ public Chunk(Chunk chunk) { chunk.Blocks.CopyTo(blocks, 0); index = chunk.Index; //updateMask(); }
public void ThreadRefreshActiveChunks() { while (true) { if (refreshChunks == true) { int x = (int)camera.Position.X / Chunk.SIZE; int z = (int)camera.Position.Z / Chunk.SIZE; activeChunks[GetActiveChunkIndex(0, 0)] = new Chunk(stream, GetChunkIndex(x - 1, z - 1)); activeChunks[GetActiveChunkIndex(1, 0)] = new Chunk(stream, GetChunkIndex(x, z - 1)); activeChunks[GetActiveChunkIndex(2, 0)] = new Chunk(stream, GetChunkIndex(x + 1, z - 1)); activeChunks[GetActiveChunkIndex(0, 1)] = new Chunk(stream, GetChunkIndex(x - 1, z)); activeChunks[GetActiveChunkIndex(1, 1)] = new Chunk(stream, GetChunkIndex(x, z)); activeChunks[GetActiveChunkIndex(2, 1)] = new Chunk(stream, GetChunkIndex(x + 1, z)); activeChunks[GetActiveChunkIndex(0, 2)] = new Chunk(stream, GetChunkIndex(x - 1, z + 1)); activeChunks[GetActiveChunkIndex(1, 2)] = new Chunk(stream, GetChunkIndex(x, z + 1)); activeChunks[GetActiveChunkIndex(2, 2)] = new Chunk(stream, GetChunkIndex(x + 1, z + 1)); refreshChunks = false; } } }
public void GenerateTerrain(String worldName) { String directory = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Worlds", worldName); Console.WriteLine("DIR: " + directory); System.IO.Directory.CreateDirectory(directory); filePath = Path.Combine(directory, "map.chunks"); Console.WriteLine("FP: " + filePath); stream = new FileStream(filePath, FileMode.Create); for (int i = 0; i < TERRAIN_CHUNKS_X * TERRAIN_CHUNKS_Z; i++) { byte[] pos = BitConverter.GetBytes((long) -1); stream.Write(pos, 0, pos.Length); } //stream.Close(); for (int x = 0; x < ACTIVE_CHUNKS_X; x++) { for (int z = 0; z < ACTIVE_CHUNKS_Z; z++) { int chunkIndex = GetChunkIndex(x, z); int activeChunkIndex = GetActiveChunkIndex(x, z); //Chunk chunk = new Chunk(filePath, chunkIndex); Chunk chunk = new Chunk(stream, chunkIndex); activeChunks[activeChunkIndex] = chunk; } } }