コード例 #1
0
ファイル: Chunk.cs プロジェクト: OrangePretzel/VoxicEngine
 private void DoTestyThings()
 {
     for (int i = 0; i < 6; i++)
     {
         for (int k = 0; k < 4; k++)
         {
             var voxW = new ComplexVoxel(VoxelDataManager.RotatoVoxelData, VoxelStyle.Wedge);
             var voxB = new ComplexVoxel(VoxelDataManager.RotatoVoxelData, VoxelStyle.Block);
             voxW.OrientRotateVoxel((OrdinalDirections)i, 90 * k);
             voxB.OrientRotateVoxel((OrdinalDirections)i, 90 * k);
             Voxels[i * 2, 15, k * 2] = voxW;
             Voxels[i * 2, 13, k * 2] = voxB;
         }
     }
 }
コード例 #2
0
ファイル: Chunk.cs プロジェクト: OrangePretzel/VoxicEngine
        private void DoChunkyThings(int chunkSize)
        {
            int[,] hMap = new int[chunkSize, chunkSize];
            int[,] dMap = new int[chunkSize, chunkSize];
            for (int i = 0; i < chunkSize; i++)
            {
                for (int k = 0; k < chunkSize; k++)
                {
                    int h = UnityEngine.Random.Range(chunkSize / 2, chunkSize);
                    int a = Mathf.RoundToInt(Mathf.Sqrt((i - chunkSize / 2f) * (i - chunkSize / 2f)));
                    int b = Mathf.RoundToInt(Mathf.Sqrt((k - chunkSize / 2f) * (k - chunkSize / 2f)));
                    int d = UnityEngine.Random.Range((a + b) / 2 - 1, chunkSize / 2 + 5);
                    hMap[i, k] = h;
                    dMap[i, k] = d;
                }
            }

            for (int passes = 0; passes < 3; passes++)
            {
                int[,] smoothHMap = new int[chunkSize, chunkSize];
                int[,] smoothDMap = new int[chunkSize, chunkSize];
                for (int i = 0; i < chunkSize; i++)
                {
                    for (int k = 0; k < chunkSize; k++)
                    {
                        float smoothH = 0;
                        float smoothD = 0;
                        int   c       = 0;
                        for (int x = -1; x <= 1; x++)
                        {
                            for (int y = -1; y <= 1; y++)
                            {
                                if (IsInChunk(i + x, 0, k + y))
                                {
                                    smoothH += hMap[i + x, k + y];
                                    smoothD += dMap[i + x, k + y];
                                    c++;
                                }
                            }
                        }

                        smoothH         /= c;
                        smoothHMap[i, k] = Mathf.RoundToInt(smoothH);

                        smoothD         /= c;
                        smoothDMap[i, k] = Mathf.RoundToInt(smoothD);
                    }
                }
                hMap = smoothHMap;
                if (passes < 1)
                {
                    dMap = smoothDMap;
                }
            }

            for (int i = 0; i < chunkSize; i++)
            {
                for (int k = 0; k < chunkSize; k++)
                {
                    for (int j = 0; j < chunkSize; j++)
                    {
                        ComplexVoxel vox = null;
                        int          h   = hMap[i, k];
                        int          d   = dMap[i, k];
                        if (j == h && j >= d)
                        {
                            vox = new ComplexVoxel(VoxelDataManager.GrassVoxelData);
                        }
                        else if (j < h && j >= h - 2 && j >= d)
                        {
                            vox = new ComplexVoxel(VoxelDataManager.DirtVoxelData);
                        }
                        else if (j < h - 2 && j >= d)
                        {
                            vox = new ComplexVoxel(VoxelDataManager.StoneVoxelData);
                        }
                        else
                        {
                            vox = new ComplexVoxel(VoxelDataManager.NULL_VOXEL_DATA);
                        }

                        vox.OrientRotateVoxel((OrdinalDirections)(Random.Range(0, 6)), 90 * Random.Range(0, 4));
                        if (Random.Range(0, 3) == 0)
                        {
                            vox.SetStyle(VoxelStyle.Wedge);
                        }
                        Voxels[i, j, k] = vox;
                    }
                }
            }
        }