示例#1
0
    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);
    }
示例#2
0
    // 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;
    }