Ejemplo n.º 1
0
    /// <summary>
    /// 根据生物生态 创造方块
    /// </summary>
    /// <param name="listBiome"></param>
    /// <param name="wPos"></param>
    /// <param name="width"></param>
    /// <param name="height"></param>
    /// <returns></returns>
    public BlockTypeEnum CreateBiomeBlockType(Chunk chunk, BiomeMapData biomeMapData, Vector3Int blockLocalPosition)
    {
        //当前方块位置高于随机生成的高度值时,当前方块类型为空
        if (blockLocalPosition.y > biomeMapData.maxHeight)
        {
            if (blockLocalPosition.y <= biomeMapData.biome.biomeInfo.GetWaterPlaneHeight())
            {
                return(BlockTypeEnum.Water);
            }
            else
            {
                return(BlockTypeEnum.None);
            }
        }

        int   maxHeight = biomeMapData.maxHeight;
        Biome biome     = biomeMapData.biome;

        //边缘处理 逐渐减缓到最低高度
        if (blockLocalPosition.y > maxHeight &&// 在基础高度-4以上
            biomeMapData.offsetDis <= 20)    //在20范围以内
        {
            maxHeight = Mathf.CeilToInt((biomeMapData.maxHeight - biome.biomeInfo.min_height) / 20f) * Mathf.CeilToInt(biomeMapData.offsetDis) + maxHeight;

            //当前方块位置高于随机生成的高度值时,当前方块类型为空
            if (blockLocalPosition.y > maxHeight)
            {
                return(BlockTypeEnum.None);
            }
        }
        Vector3Int    wPos      = blockLocalPosition + chunk.chunkData.positionForWorld;
        BlockTypeEnum blockType = biome.GetBlockType(chunk, biome.biomeInfo, maxHeight, blockLocalPosition, wPos);

        //获取方块
        return(blockType);
    }