//Adds terrain obstacles within triangle based on biome void AddTerrainObstacles(TileData.Triangle triangle, Vector3[] points, GameObject parent) { float density = GetObstacleDensity(triangle); PoissonDiscSampler poisson = new PoissonDiscSampler(TileSize, TileSize, density); foreach (var sample in poisson.Samples()) { if (PointInTriangle(new Vector3(sample.x, 0, sample.y), points[0], points[1], points[2])) { var objectGameObject = Instantiate(GetTerrainObstacles(triangle.biome), parent.transform); objectGameObject.transform.Rotate(new Vector3(0, UnityEngine.Random.Range(0, 360), 0)); objectGameObject.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f); objectGameObject.transform.position = new Vector3(sample.x - .5f, 0, sample.y - .5f); } } }
//Gets the obstacle density based on the biome, higher number means lower density private float GetObstacleDensity(TileData.Triangle triangle) { if (triangle.biome == TileData.Triangle.Biome.Desert) { return(0.15f); } else if (triangle.biome == TileData.Triangle.Biome.Forest) { return(0.125f); } else if (triangle.biome == TileData.Triangle.Biome.Plains) { return(0.15f); } else { return(0.25f); } }