Example #1
0
    private static int GetUpperGroundHeight(MCD_WorldData aWorldData, int blockWorldX, int blockWorldZ,
                                            float lowerGroundHeight)
    {
        float octave1   = Mathf.PerlinNoise(blockWorldX * 0.001f, blockWorldZ * 0.001f) * 0.5f;
        float octave2   = Mathf.PerlinNoise((blockWorldX + 100) * 0.002f, blockWorldZ * 0.002f) * 0.25f;
        float octave3   = Mathf.PerlinNoise((blockWorldX + 100) * 0.01f, blockWorldZ * 0.01f) * 0.25f;
        float octaveSum = octave1 + octave2 + octave3;

        return((int)(octaveSum * 4 + (int)(lowerGroundHeight)));
    }
    void Start()
    {
        Vector3Int terrainSize = new Vector3Int(myTerrainWidth, myTerrainHeight + myTerrainDepth, myTerrainLength);

        myWorldData          = new MCD_WorldData(terrainSize, myChunkSize, myVoxelSize);
        myWorld              = new MCS_World(myWorldData);
        terrainGeneration    = new MCG_TerrainGeneration();
        decorationGeneration = new MCG_DecorationGeneration(myWorldData);

        myWorld.InitChunkGrid();
        myWorldData.GenerateUVCoordinatesForAllBlocks();
        CreateChunksObject();
        GenerateChunkMesh();
    }
Example #3
0
    public void GenerateChunk(MCD_WorldData aWorldData, MCS_Chunk chunk)
    {
        for (int x = 0; x < aWorldData.MyChunkSizeX; x++)
        {
            int blocX = chunk.WorldPos.x + x;

            for (int z = 0; z < aWorldData.MyChunkSizeZ; z++)
            {
                int   blocZ             = chunk.WorldPos.z + z;
                float lowerGroundHeight = GetLowerGroundHeight(chunk, blocX, blocZ, x, z, aWorldData.MyTerrainDepth);
                int   upperGround       = GetUpperGroundHeight(aWorldData, blocX, blocZ, lowerGroundHeight);

                bool sunlit = true;
                for (int y = aWorldData.MyChunkSizeY - 1; y >= 0; y--)
                {
                    BlockType blockType;
                    if (y > upperGround)
                    {
                        blockType = BlockType.Air;
                    }
                    else if (y >= lowerGroundHeight)
                    {
                        if (sunlit)
                        {
                            blockType = BlockType.TopSoil;
                            // Remember, this adds the block global coordinates
                            chunk.TopSoilBlocks.Add(new Vector3Int(blocX, y, blocZ));
                            sunlit = false;
                        }
                        else
                        {
                            blockType = BlockType.Dirt;
                        }
                    }
                    else
                    {
                        blockType = BlockType.Stone;
                    }

                    Vector3Int pos = new Vector3Int(x, y, z);
                    aWorldData.GetBlock(pos + chunk.WorldPos).SetType(blockType);
                }
            }
        }
    }
Example #4
0
 public MCS_Chunk(MCD_WorldData aWorldData, Vector3Int aChunkPos)
 {
     myChunkPos  = aChunkPos;
     myWorldData = aWorldData;
     myWorldPos  = new Vector3Int(myChunkPos.x * myWorldData.MyChunkSizeX, myChunkPos.y * myWorldData.MyChunkSizeY, myChunkPos.z * myWorldData.MyChunkSizeZ);
 }
 public MCS_ChunkMesh(MCD_WorldData aWorldData)
 {
     myWorldData = aWorldData;
 }
 public MCG_DecorationGeneration(MCD_WorldData aWorldData)
 {
     myWorldData = aWorldData;
 }
Example #7
0
 public MCS_World(MCD_WorldData aWorldData)
 {
     myWorldData = aWorldData;
 }