private BiomeZone AddZone(GameObject parent, Vector3 center) { GameObject point = new GameObject("zone"); point.transform.SetParent(parent.transform); point.transform.position = center; BiomeZone zone = point.AddComponent <BiomeZone>(); return(zone); }
public void GenerateZones() { ClearWorld(); //Generate random numbers with a seed Random.InitState(seed); Voronoi.Generate(map_size, nb_zones); List <Transform> all_points = new List <Transform>(); List <BiomeZone> all_zones = new List <BiomeZone>(); world = new GameObject("World"); points_link.Clear(); foreach (VoronoiCell cell in Voronoi.cells) { if (cell.borderCoordinates.Count >= 3) { BiomeZone zone = AddZone(world, cell.sitePos); zone.data = GetRandomBiome(); zone.name = zone.data.id; zone.iterations = iterations; zone.seed = Random.Range(int.MinValue, int.MaxValue); List <Transform> zone_points = new List <Transform>(); foreach (Vector3 edge in cell.borderCoordinates) { GameObject point = AddEdgePoint(gameObject, edge); zone_points.Add(point.transform); zone.points = zone_points.ToArray(); if (!all_points.Contains(point.transform)) { all_points.Add(point.transform); } } all_zones.Add(zone); } } zones = all_zones.ToArray(); points = all_points.ToArray(); FixStartingZone(); }
private void FixStartingZone() { List <BiomeData> starting_zones = new List <BiomeData>(); foreach (BiomeData bdata in biomes) { if (bdata.starting_zone) { starting_zones.Add(bdata); } } //Random start zone BiomeData start_biome = null; if (starting_zones.Count > 0) { start_biome = starting_zones[Random.Range(0, starting_zones.Count)]; } //Find closest zone PlayerCharacter player = PlayerCharacter.GetFirst(); Vector3 player_pos = player ? player.transform.position : Vector3.zero; float min_dist = 999f; BiomeZone nearest = null; foreach (BiomeZone zone in zones) { float dist = (zone.transform.position - player_pos).magnitude; if (dist < min_dist) { nearest = zone; min_dist = dist; } } if (nearest != null && !nearest.data.starting_zone && start_biome != null) { nearest.data = start_biome; nearest.name = start_biome.id; } }