public void GenerateSolarSystem() { System.Random rand = new System.Random(); //for generating a new solar system on the fly if (_solarSystem.Planets != null) { foreach (Planet p in _solarSystem.Planets) { Destroy(p.gameObject); } _solarSystem.Planets.Clear(); } if (_solarSystem.Star != null) { Destroy(_solarSystem.Star.gameObject); } GameObject starGameObject = Instantiate(SolarSystemPrefabs.StarPrefab, transform.position, Quaternion.identity, this.transform); Star star = starGameObject.GetComponent <Star>(); star.Name = StarName.Generate(rand); float starSize = Random.Range(Settings.MinStarSize, Settings.MaxStarSize) * Settings.SizeScale; star.Size = new Vector3(starSize, starSize, starSize); _solarSystem.Star = star; int planetAmount = Random.Range(Settings.MinPlanets, Settings.MaxPlanets); float lastPlanetDistance = 0f; for (int i = 0; i < planetAmount; i++) { //Instantiate planets float distance = Random.Range(Settings.MinDistanceBetween, Settings.MaxDistanceBetween) + lastPlanetDistance; lastPlanetDistance = distance; GameObject planetGameObject = Instantiate(SolarSystemPrefabs.PlanetPrefab, star.transform.position + new Vector3(distance * Settings.SizeScale, distance * Settings.SizeScale, 0), Quaternion.identity, this.transform); Planet planet = planetGameObject.GetComponent <Planet>(); //set Planet Name planet.Name = StarName.Generate(rand); //set Planet Size float planetSize = Random.Range(Settings.MinPlanetSize, Settings.MaxPlanetSize) * ((distance / 10000) / Settings.SizeScale); planet.Size = new Vector3(planetSize, planetSize, planetSize); planet.OrbitPeriod = (distance / Settings.SizeScale) * 2; _solarSystem.Planets.Add(planet); //determine if planet has satellites orbiting it and instantiate them bool hasSatellite = Random.Range(Settings.ChanceOfSatellite, 10) <= Settings.ChanceOfSatellite; if (hasSatellite) { int satelliteAmount = Random.Range(Settings.MinSatellites, Settings.MaxPlanets); float lastSatelliteDistance = 0f; //instantiate satellite for (int j = 0; j < satelliteAmount; j++) { float distanceToPlanet = (((distance * Settings.SizeScale) + lastSatelliteDistance) + planetSize) / 20; lastSatelliteDistance = distanceToPlanet; GameObject satelliteGameObject = Instantiate(SolarSystemPrefabs.SattelitePrefab, planetGameObject.transform.position + new Vector3(distanceToPlanet, 0, distanceToPlanet), Quaternion.identity, planet.transform); Satellite satellite = satelliteGameObject.GetComponent <Satellite>(); satellite.OrbitPeriod = distanceToPlanet * planetSize * 100; satellite.Orbiter = planet; //set Satellite name satellite.Name = StarName.Generate(rand); float satelliteSize = Random.Range(Settings.MinPlanetSize, Settings.MaxPlanetSize) * ((distanceToPlanet / 1000) / Settings.SizeScale); satellite.Size = new Vector3(satelliteSize, satelliteSize, satelliteSize); planet.Sattelites.Add(satellite); } } } _solarSystem.AllignPlanets(); }