Ejemplo n.º 1
0
    private void SpawnObjects(float[,] noiseMap, int treeAmount)
    {
        DestroyAllChildren();
        bool doOnce = true;

        bool[,] occupiedMap = new bool[_chunkSize, _chunkSize];

        for (int i = 0; i < treeAmount; i++)
        {
            int ocX = Random.Range(0, _chunkSize);
            int ocY = Random.Range(0, _chunkSize);

            if (occupiedMap[ocX, ocY])
            {
                i--;
                continue;
            }

            occupiedMap[ocX, ocY] = true;

            int rndX = ocX;
            int rndZ = ocY;


            Vector3 pos    = MeshGenerator.ChunkToWorldPos(rndX, rndZ, _chunkSize, noiseMap, _meshHeightMultiplier, _meshHeightCurve);
            int     rndVeg = Random.Range(0, _vegetaion.Length);

            //Spawn Player
            if (doOnce && pos.y > 6.5f && pos.y < 10)
            {
                Instantiate(_player, Vector3.Scale(pos, transform.lossyScale), Quaternion.Euler(0, Random.Range(0, 360), 0), transform);
                doOnce = false;
            }

            if (pos.y > _vegetaion[rndVeg].MinHeight && pos.y < _vegetaion[rndVeg].MaxHeight)
            {
                Quaternion rndRot = Quaternion.Euler(0, Random.Range(0, 360), 0);

                GameObject obj = Instantiate(_vegetaion[rndVeg].Prefab, Vector3.Scale(pos, transform.lossyScale), rndRot, transform);
                obj.transform.localScale = new Vector3(1 / transform.lossyScale.x * Random.Range(_vegetaion[rndVeg].MinScale, _vegetaion[rndVeg].MaxScale), 1 / transform.lossyScale.y * Random.Range(_vegetaion[rndVeg].MinScale, _vegetaion[rndVeg].MaxScale), 1 / transform.lossyScale.z * Random.Range(_vegetaion[rndVeg].MinScale, _vegetaion[rndVeg].MaxScale));
            }
        }
    }