public void GenerateBuildings(BasicTerrainGen gen, GameObject buildingPrefab) { Ray ray = new Ray(Vector3.zero, Vector3.down); RaycastHit hit; int maxBuildings = (int)(radius * density); for (int y = 0; y <= maxBuildings; y++) { for (int x = 0; x <= maxBuildings; x++) { ray.origin = transform.position + new Vector3((x / (float)maxBuildings) * (radius * 2) - radius, 100f, (y / (float)maxBuildings) * (radius * 2) - radius); if (gen.meshCol.Raycast(ray, out hit, 1000f) && hit.point.y > gen.waterLevel + gen.shore && Vector3.Dot(hit.normal, Vector3.up) > .9f) { float distance = Vector3.Distance(hit.point, transform.position); if (distance > radius) { continue; } GameObject go = Instantiate(buildingPrefab, hit.point, Quaternion.identity, transform); Vector3 scale = go.transform.localScale; scale.y *= heightCurve.Evaluate(distance / radius) * radius; scale.y += Random.Range(0f, 1f); go.transform.localScale = scale; go.transform.position += Vector3.up * (scale.y / 2); buildings.Add(go); } } } }
public void GenerateRoads(BasicTerrainGen gen) { centralJunction = Junction.CreateNew(transform); centralJunction.GenerateRoads(this, gen.centerRoadsCount, gen.minRoadsLength, gen.maxRoadsLength, gen.centerRoadsWidth); }