Exemple #1
0
 private void GenerateForest(float forestFreq, float forestThr, float offsetX, float offsetZ, List <Townv2> towns)
 {
     for (int i = 0; i < generator.treesPerChunk; i++)
     {
         Vector3 treePos = new Vector3(Random.Range(0, size.x), 0f, Random.Range(0, size.y));
         bool    forest  = (Mathf.PerlinNoise((cachedPos.x + treePos.x) * generator.forestsFrequency + generator.offsetX, (cachedPos.z + treePos.z) * generator.forestsFrequency + generator.offsetZ) > generator.forestsThreashold);
         if (forest)
         {
             foreach (Townv2 town in towns)
             {
                 if (Vector3.Distance(treePos, town.transform.position - cachedPos) < town.radius + generator.townGen.treesDistance)
                 {
                     forest = false;
                     break;
                 }
             }
         }
         if (forest)
         {
             treePos.y = generator.GetHeightAt(cachedPos + treePos);
             if (treePos.y > generator.waterLevel + generator.shoreHeight && treePos.y < generator.forestsMaxAltitude)
             {
                 treePositions.Add(treePos);
             }
         }
     }
     treePositionsGenerated = true;
 }
Exemple #2
0
 private void FollowGround(TerrainGen terrain)
 {
     transform.position = new Vector3(transform.position.x, 0f, transform.position.z);
     Vector3[] verts = mesh.vertices;
     for (int i = 0; i < verts.Length; i++)
     {
         verts[i].y = terrain.GetHeightAt(transform.localToWorldMatrix.MultiplyPoint(verts[i])) + .2f;
     }
     mesh.vertices = verts;
     mesh.RecalculateNormals();
     mesh.RecalculateBounds();
 }