示例#1
0
文件: Chunk.cs 项目: jmaley/colonies
        /*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();
        }
示例#2
0
        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;
                }
            }
        }
示例#3
0
        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;
                }
            }
        }