Esempio n. 1
0
    private IEnumerator SpawnStruct(TerrainElements.TerrainElement terrainElement, int amount, bool lastRound)
    {
        GameObject prefab     = terrainElement.prefab;
        int        width      = terrainElement.width;
        int        height     = terrainElement.height;
        int        fromCenter = Mathf.RoundToInt(Chunk.fromCenter);
        Vector3    spot;
        int        x = Random.Range(-fromCenter, fromCenter - width + 1);  //makes sure that whole terrain element gets spawned inside of the chunk
        int        y = Random.Range(-fromCenter + height, fromCenter + 1); //because x and y represent top left 1x1 part of the element

        for (int i = 0; i < amount; i++)
        {
            while (!DoesFit(x, y, width, height)) //checks if terrain element can fit if it's top right corner is at x y
            {
                x = Random.Range(-fromCenter, fromCenter - width + 1);
                y = Random.Range(-fromCenter + height, fromCenter + 1);
            }

            spot = new Vector3(x + width / 2f, y - height / 2f, 0); //we align the sprite with the grid
            GameObject temp;
            temp = Instantiate(prefab, transform.position + spot, Quaternion.identity);
            temp.transform.parent    = gameObject.transform;
            temp.transform.position += new Vector3(0, 0, terrainElement.layer);
            busyArea += width * height;
            yield return(new WaitForSeconds(0.005f));
        }
        if (lastRound)
        {
            isSpawning = false;
        }
    }
Esempio n. 2
0
 public IEnumerator GenerateTerrain(int[] seed)
 {
     if (IsSeedProper(seed))
     {
         int freeArea = Chunk.ChunkSize * Chunk.ChunkSize * seed[0] / 100;
         int amount;
         for (int x = 1; x < elementNames.Count; x++)
         {
             isSpawning = true;
             TerrainElements.TerrainElement toLoad = terrainElements[elementNames[x]];
             amount = freeArea * seed[x] / 100 / toLoad.area;
             if (x == 1)
             {
                 trees = amount;
             }
             if (x == 2)
             {
                 bushes = amount;
             }
             if (x == 3)
             {
                 grass = amount;
             }
             bool lastRound = x == elementNames.Count - 1;
             StartCoroutine(SpawnStruct(toLoad, amount, lastRound));
             yield return(new WaitForSeconds(0.1f));
         }
     }
 }