public void addRockPlanet() { numberOfHomePlanets++; int numberOfHomeRings = (int)Math.Floor((float)(PG.homeOffset - sunOffset) / planetRingSeperation); int planetNumber = homePlanets.Count; Vector2 pos; float variance = 1f; do { pos = (((float)planetNumber % numberOfHomeRings) * planetRingSeperation * variance + sunOffset) * PG.PositionGenerator(planetNumber); Collider2D[] collidersHit = Physics2D.OverlapCircleAll(pos, 5 * rockPlanet.transform.localScale.x); if (collidersHit.Length > 1) { foreach (Collider2D collider in collidersHit) { if (collider != null) { if (collider.gameObject.tag == "Planet" || collider.gameObject.tag == "Player") { Debug.Log("Overlap Detected for planet: PLANET" + planetNumber); pos = Vector2.zero; } } } } variance += 0.001f; } while (pos == Vector2.zero && variance < 1.1f); if (variance >= 1.1f) { Debug.LogWarning("OverflowWarning! Planet creation overlapped due to maximum retry threshold."); pos = (((float)planetNumber % numberOfHomeRings) * planetRingSeperation + sunOffset) * PG.PositionGenerator(planetNumber); } PlanetInfo info = new PlanetInfo(pos.x, pos.y, planetNumber, rockPlanet.maxHealth, 0, true); planetInfo.Add(info); HomePlanetInfo hpi = (new HomePlanetInfo("PLANET" + planetNumber)); homePlanetInfo.Add(hpi); Planet planet = Instantiate(rockPlanet); planet.inHomeSystem = true; planet.Initialize(info); planet.gameObject.SetActive(false); planet.gameObject.AddComponent <HomePlanet>(); planet.gameObject.GetComponent <HomePlanet>().homePlanetInfo = hpi; planet.gameObject.GetComponent <HomePlanet>().name = "PLANET" + planetNumber; planet.gameObject.GetComponent <HomePlanet>().shield = planetShield; planet.gameObject.SetActive(true); //planet.gameObject.name = "PLANET" + planetNumber; planet.transform.parent = gameObject.transform; homePlanets.Add(planet); map.addPlanetToMap(planet, true); }
// Start is called before the first frame update void Awake() { if (GameManager.loadingFromSave) { Load(); return; } // Randomly generate home planets for (int i = 0; i < numberOfHomePlanets; i++) { int numberOfHomeRings = (int)Math.Floor((float)(PG.homeOffset - sunOffset) / planetRingSeperation); Vector2 pos; float variance = 1f; do { pos = (((float)i % numberOfHomeRings) * planetRingSeperation * variance + sunOffset) * PG.PositionGenerator(i); Collider2D[] collidersHit = Physics2D.OverlapCircleAll(pos, 5 * rockPlanet.transform.localScale.x); if (collidersHit.Length > 1) { foreach (Collider2D collider in collidersHit) { if (collider != null) { if (collider.gameObject.tag == "Planet" || collider.gameObject.tag == "Player") { pos = Vector2.zero; } } } } variance += 0.001f; } while (pos == Vector2.zero && variance < 1.1); if (variance > 20) { pos = (((float)i % numberOfHomeRings) * planetRingSeperation + sunOffset) * PG.PositionGenerator(i); } // Vector2 gridPosition = PG.GetGridPosition(pos); // calculate the grid position that this planet falls in PlanetInfo info = new PlanetInfo(pos.x, pos.y, i, rockPlanet.maxHealth, 0, true); planetInfo.Add(info); HomePlanetInfo hpi = (new HomePlanetInfo("PLANET" + i)); homePlanetInfo.Add(hpi); Planet planet = Instantiate(rockPlanet); planet.inHomeSystem = true; planet.Initialize(info); if (planet != null) { planet.gameObject.SetActive(false); planet.gameObject.AddComponent <HomePlanet>(); planet.gameObject.GetComponent <HomePlanet>().homePlanetInfo = hpi; planet.gameObject.GetComponent <HomePlanet>().name = "PLANET" + i; planet.gameObject.GetComponent <HomePlanet>().shield = planetShield; planet.gameObject.GetComponent <HomePlanet>().items = new List <PlanetResource>(); for (int item = 0; item < 3; item++) { planet.gameObject.GetComponent <HomePlanet>().items.Add(new PlanetResource()); } planet.gameObject.SetActive(true); //planet.gameObject.name = "PLANET" + i; planet.transform.parent = gameObject.transform; homePlanets.Add(planet); map.addPlanetToMap(planet, true); } } GameManager.loadingFromSave = false; }