Пример #1
0
    void AddVoxel(Vector3Int gridPosition, float density)
    {
        Vector3Int chunkPosition = GridtoChunk(gridPosition);

        TerrainChunk terrainChunk = GetChunk(chunkPosition);

        if (terrainChunk == null)
        {
            GenerateChunk(chunkPosition);
            return;
        }

        terrainChunk.AddVoxel(gridPosition, density);

        TerrainChunk neighborChunk;

        if (Mod(gridPosition.x, cellSize.x) == 0)
        {
            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x - 1, chunkPosition.y, chunkPosition.z));
            neighborChunk.AddVoxel(gridPosition, density);

            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x + 1, chunkPosition.y, chunkPosition.z));
            neighborChunk.AddVoxel(gridPosition, density);
        }

        if (Mod(gridPosition.y, cellSize.y) == 0)
        {
            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y - 1, chunkPosition.z));
            neighborChunk.AddVoxel(gridPosition, density);

            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y + 1, chunkPosition.z));
            neighborChunk.AddVoxel(gridPosition, density);
        }

        if (Mod(gridPosition.z, cellSize.z) == 0)
        {
            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y, chunkPosition.z + 1));
            neighborChunk.AddVoxel(gridPosition, density);

            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y, chunkPosition.z - 1));
            neighborChunk.AddVoxel(gridPosition, density);
        }

        if (Mod(gridPosition.x, cellSize.x) == 0 && Mod(gridPosition.y, cellSize.y) == 0)
        {
            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x + 1, chunkPosition.y + 1, chunkPosition.z));
            neighborChunk.AddVoxel(gridPosition, density);

            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x - 1, chunkPosition.y - 1, chunkPosition.z));
            neighborChunk.AddVoxel(gridPosition, density);
        }

        if (Mod(gridPosition.x, cellSize.x) == 0 && Mod(gridPosition.z, cellSize.z) == 0)
        {
            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x + 1, chunkPosition.y, chunkPosition.z + 1));
            neighborChunk.AddVoxel(gridPosition, density);

            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x - 1, chunkPosition.y, chunkPosition.z - 1));
            neighborChunk.AddVoxel(gridPosition, density);
        }

        if (Mod(gridPosition.y, cellSize.y) == 0 && Mod(gridPosition.z, cellSize.z) == 0)
        {
            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y + 1, chunkPosition.z + 1));
            neighborChunk.AddVoxel(gridPosition, density);

            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x, chunkPosition.y - 1, chunkPosition.z - 1));
            neighborChunk.AddVoxel(gridPosition, density);
        }

        if (Mod(gridPosition.x, cellSize.x) == 0 && Mod(gridPosition.y, cellSize.y) == 0 && Mod(gridPosition.z, cellSize.z) == 0)
        {
            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x + 1, chunkPosition.y + 1, chunkPosition.z + 1));
            neighborChunk.AddVoxel(gridPosition, density);

            neighborChunk = GetChunk(new Vector3Int(chunkPosition.x - 1, chunkPosition.y - 1, chunkPosition.z - 1));
            neighborChunk.AddVoxel(gridPosition, density);
        }
    }