示例#1
0
    public void ConnectChunksEdges()
    {
        for (int i = 0; i < terrain.ChunksCount; i++)
        {
            for (int j = 0; j < terrain.ChunksCount; j++)
            {
                TerrainChunk this_chunk = terrain.GetChunk(i, j);
                if (this_chunk != null)
                {
                    TerrainChunk chunk_up = terrain.GetChunk(i, j + 1);
                    if (chunk_up != null)
                    {
                        for (int k = 0; k < TerrainChunk.ChunkSize; k++)
                        {
                            this_chunk.SetHeight(k, TerrainChunk.ChunkSize, chunk_up.GetHeight(k, 0));
                        }
                    }

                    TerrainChunk chunk_down = terrain.GetChunk(i, j - 1);
                    if (chunk_down != null)
                    {
                        for (int k = 0; k < TerrainChunk.ChunkSize; k++)
                        {
                            this_chunk.SetHeight(k, 0, chunk_down.GetHeight(k, TerrainChunk.ChunkSize));
                        }
                    }

                    TerrainChunk chunk_left = terrain.GetChunk(i - 1, j);
                    if (chunk_left != null)
                    {
                        for (int k = 0; k < TerrainChunk.ChunkSize; k++)
                        {
                            this_chunk.SetHeight(0, k, chunk_left.GetHeight(TerrainChunk.ChunkSize, k));
                        }
                    }

                    TerrainChunk chunk_right = terrain.GetChunk(i + 1, j);
                    if (chunk_right != null)
                    {
                        for (int k = 0; k < TerrainChunk.ChunkSize; k++)
                        {
                            this_chunk.SetHeight(TerrainChunk.ChunkSize, k, chunk_right.GetHeight(0, k));
                        }
                    }
                }

                this_chunk.GenerateAndUpdateMesh();
            }
        }
    }