Exemple #1
0
        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);
        }
Exemple #2
0
        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();
        }
Exemple #3
0
        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;
            }
        }