Esempio n. 1
0
    public override Block BuildBlock(Vector3Int pos)
    {
        Block newBlock = null;

        if (blockType == FillArea.BlockType.BLOCK)
        {
            newBlock = new Block();
        }
        else if (blockType == FillArea.BlockType.GRASS)
        {
            newBlock = new BlockGrass();
        }
        else if (blockType == FillArea.BlockType.DESERT)
        {
            newBlock = new BlockDesert();
        }
        else if (blockType == FillArea.BlockType.CLOUD)
        {
            newBlock = new BlockCloud();
        }
        else if (blockType == FillArea.BlockType.WATER)
        {
            newBlock = new BlockWater();
        }
        else
        {
            newBlock = new BlockAir();
        }

        return(newBlock);
    }
Esempio n. 2
0
    public override Block BuildBlock(Vector3Int pos)
    {
        Block newBlock = null;


        float noise = (MyUtil.Get3DNoise(pos.x, pos.y, pos.z, frequency,
                                         octave, persistence) + 1.0f) * 0.5f;

        noise = Mathf.Clamp01(noise);

        if (noise <= blockRate)
        {
            newBlock = new Block();
        }
        else if (noise <= desertRate)
        {
            newBlock = new BlockDesert();
        }
        else if (noise <= grassRate)
        {
            newBlock = new BlockGrass();
        }
        else if (noise <= cloudRate)
        {
            newBlock = new BlockCloud();
        }
        else
        {
            newBlock = new BlockAir();
        }

        return(newBlock);
    }
Esempio n. 3
0
    /**
     *  @brief  지형 블럭을 생성한다.
     *  @return 만들어진 지형을 반환한다.
     */
    private Block CreateBlock(Vector3Int worldPos)
    {
        Block newBlock = null;
        var   info     = planetInfo.terrainInfo;

        float coreRange = info.radius * info.coreRate;

        //코어의 표면은 블럭으로 생성
        int isInVertCnt = MyUtil.IsCubeInRange(worldPos, 1, coreRange);

        if (isInVertCnt > 0 && isInVertCnt < 8)
        {
            newBlock        = new Block();
            newBlock.isLock = true;
        }
        //코어 외부는 Mode에 따라 함수를 통해 생성
        else if (isInVertCnt == 0)
        {
            if (MyUtil.GetSNoise(worldPos.x, worldPos.y, worldPos.z, 0.05f, 50) > 20)
            {
                float noise = (MyUtil.Get3DNoise(worldPos.x, worldPos.y, worldPos.z, info.frequency,
                                                 info.octave, info.persistence) + 1.0f) * 0.5f;
                //int holeChance = MyUtil.GetSNoise(worldPos.x, worldPos.y, worldPos.z, 0.05f, 50);

                noise = Mathf.Clamp01(noise);

                if (noise <= info.blockRate)
                {
                    newBlock = new Block();
                }
                else if (noise <= info.desertRate)
                {
                    newBlock = new BlockDesert();
                }
                else if (noise <= info.grassRate)
                {
                    newBlock = new BlockGrass();
                }
            }
        }

        //Ocean BLock
        if (newBlock == null)
        {
            float height = Mathf.Max(Mathf.Abs(worldPos.x + 0.5f), Mathf.Abs(worldPos.y + 0.5f), Mathf.Abs(worldPos.z + 0.5f));

            if (height <= info.oceanHeight && height > info.oceanHeight - info.oceanDepth)
            {
                newBlock        = new BlockWater();
                newBlock.isLock = true;
            }
        }

        if (newBlock == null)
        {
            newBlock = new BlockAir();
        }

        return(newBlock);
    }