Exemplo n.º 1
0
    void GenerateChunk(IChunk chunk)
    {
        var earth = _terrain.GetMaterialId(BlockMaterial.EARTH);
        var sand  = _terrain.GetMaterialId(BlockMaterial.SAND);

        for (var x = 0; x < chunk.width; x++)
        for (var z = 0; z < chunk.height; z++) {
            var blockPos = chunk.position.ToBlockPos().Relative(x, 0, z);
            var h = Mathf.PerlinNoise(blockPos.x / 40.0F, blockPos.z / 40.0F) * 16 - 8;
            for (var y = 0; y < Mathf.Min(h - blockPos.y, chunk.depth); y++) {
                var material = ((h > -3.5F - (blockPos.y + y)) ? earth : sand);
                var amount = 1 + (int)Mathf.Min(BlockData.MAX_AMOUNT - 1,
                                                (h - (blockPos.y + y)) * BlockData.MAX_AMOUNT);
                chunk[chunk.GetIndex(x, y, z)] = new BlockData(material, amount);
            }
        }
    }