void GenerateStars()
        {
            GenerateHumanHomeStar(); // generate the human home system

            int starCount = gameDataRef.TotalSystems;
            for (int i = 0; i < starCount; i++)
            {
                Vector3 starLoc = DetermineStarLocation();

                StarData newStar = new StarData();

                newStar = GenerateGameObject.CreateNewStar(); // this creates the star and adds the data/accessor components
                // if the star type is 'no star', break this loop, and if it is too high (no specials or wolf rayet yet) no star either (yet)
                if ((int)newStar.SpectralClass >= 12)
                    newStar.SpectralClass = StarData.eSpectralClass.NoStar;

                if (newStar.SpectralClass == 0)
                {
                    continue;
                }
                newStar.SetWorldLocation(starLoc);
                gData.AddStarDataToList(newStar);
            }

            gData.galaxyIsGenerated = true; // add more checks here
        }
        void DrawPlanets(StarData sData)
        {
            GameObject selectedStar = GetSelectedStar();
            Vector3 starPosition = GetSelectedStar().GetComponent<Star>().transform.position;

            for (int x = 0; x < 6; x++)
            {
                if (sData.PlanetSpots[x] != null)
                {
                    // add planet to draw, if a sprite exists
                    if (sData.PlanetSpots[x].PlanetSpriteNumber != -1)
                        switch (sData.PlanetSpots[x].Type)
                        {
                            case PlanetData.ePlanetType.AsteroidBelt:
                                {
                                    planetsToDraw[x] = asteroidBelts[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.Barren:
                                {
                                    planetsToDraw[x] = barrenPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.Greenhouse:
                                {
                                    planetsToDraw[x] = greenhousePlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.Desert:
                                {
                                    planetsToDraw[x] = desertPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.Terran:
                                {
                                    planetsToDraw[x] = terranPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.Ice:
                                {
                                    planetsToDraw[x] = icePlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.IceGiant:
                                {
                                    planetsToDraw[x] = dwarfJovianPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.GasGiant:
                                {
                                    planetsToDraw[x] = jovianPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.Lava:
                                {
                                    planetsToDraw[x] = lavaPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.Irradiated:
                                {
                                    planetsToDraw[x] = irradiatedPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.SuperEarth:
                                {
                                    planetsToDraw[x] = superEarthPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.Ocean:
                                {
                                    planetsToDraw[x] = waterPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.BrownDwarf:
                                {
                                    planetsToDraw[x] = brownDwarfPlanets[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.IceBelt:
                                {
                                    planetsToDraw[x] = iceBelts[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            case PlanetData.ePlanetType.DustRing:
                                {
                                    planetsToDraw[x] = dustRings[sData.PlanetSpots[x].PlanetSpriteNumber];
                                    break;
                                }
                            default:
                                {
                                    break;
                                }
                        }
                }
            }

            for (int x = 0; x < 6; x++)
            {
                if (planetsToDraw[x] != null)
                {
                    // planet draw routine
                    PlanetData pData = new PlanetData();
                    float startingPlanetMargin = 110;
                    float screenScaleFactor = (float)Screen.width / 1920f;
                    float screenWidthFactor = 0f;

                    if (Screen.width >= 1600)
                    {
                        screenWidthFactor = 15f;
                    }
                    else if (Screen.width >= 1400)
                    {
                        screenWidthFactor = 14f;
                    }
                    else if (Screen.width >= 1280)
                        screenWidthFactor = 14f;

                    else
                        screenWidthFactor = 12.3f;

                    pData = sData.PlanetSpots[x];

                    Vector3 position = new Vector3(starPosition.x + ((selectedStar.transform.localScale.x / 2) + (startingPlanetMargin * screenScaleFactor)) + ((x + 1) * ((float)Screen.width / screenWidthFactor)), starPosition.y, 10); // derive the planet position from the star
                    GameObject planet = Instantiate(planetsToDraw[x], position, Quaternion.Euler(0, 180, 0)) as GameObject; // draw the planet
                    planet.AddComponent<Planet>(); // add the planet container
                    planet.GetComponent<Planet>().planetData = pData; // and attach the data
                    planet.name = pData.Name;
                    planet.GetComponent<CircleCollider2D>().radius = 2.0f;
                    int size = 0;

                    // normalize the size of the object
                    if (pData.Type == PlanetData.ePlanetType.IceBelt || pData.Type == PlanetData.ePlanetType.AsteroidBelt || pData.Type == PlanetData.ePlanetType.IceBelt)
                        size = 50;
                    else
                        size = pData.Size;

                    // size of the planet (need to increase)
                    pData.PlanetSystemScaleSize = size *.25f; // set the planet's size as it should be in the system view (will probably set with the gameobject)

                    planet.transform.localScale = new Vector2(pData.PlanetSystemScaleSize, pData.PlanetSystemScaleSize); // scale the sprite depending on size
                    planet.transform.Rotate(180, 180, 0);
                    listSystemPlanetsCreated.Add(planet); // add the planet to the drawn list (for destruction later as a group)

                    //draw rings if they exist
                    if (pData.Rings)
                    {
                        GameObject ring = Instantiate(rings[pData.PlanetRingSpriteNumber], position, Quaternion.Euler(0, 0, 0)) as GameObject; // create the ring if it exists
                        ring.transform.SetParent(planet.transform, false); // set as child of planet
                        ring.transform.Rotate(new Vector3(0, 0, 0 + pData.PlanetRingTilt));
                        ring.transform.localScale = new Vector3(1, 1, 1);
                        ring.transform.localPosition = new Vector3(0, 0, 0);
                        ring.GetComponent<SpriteRenderer>().sortingOrder = 1;
                    }
                }
            }
            planetsDrawn = true; // set flag
        }
        void GenerateHumanHomeStar()
        {
            // create New Terra
            Vector3 starLoc = new Vector3(0, 0, 0);
            StarData newStar = new StarData();

            newStar.SpectralClass = StarData.eSpectralClass.G;
            newStar.Age = 7;
            newStar.starMultipleType = StarData.eStarMultiple.Single;
            newStar.Size = 8;
            newStar.Metallicity = 8.0;
            newStar.Name = "Neo-Sirius";
            newStar.ID = "STANEOS001";

            newStar.SetWorldLocation(starLoc);
            gData.AddStarDataToList(newStar);
        }
        private Color CheckBioStatus(StarData starData)
        {
            bool hasGoodPlanets = false;
            bool hasOKPlanets = false;
            bool hasPoorPlanets = false;
            Color textColor = new Color();

            foreach (PlanetData planet in starData.PlanetList)  // test to check for changing label colors dynamically
            {
                if (starData.PlanetList.Count > 0)
                {
                    if (planet.Bio > 70)
                        hasGoodPlanets = true;
                    else if (planet.Bio > 40)
                        hasOKPlanets = true;
                    else
                        hasPoorPlanets = true;
                }
                else
                {
                    textColor = Color.grey;
                    return textColor;
                }
            }

            // set the color depending on planet bio
            if (hasGoodPlanets)
                textColor = Color.green;
            else if (hasOKPlanets)
                textColor = Color.yellow;
            else if (hasPoorPlanets)
                textColor = Color.red;

            return textColor;
        }
        public static StarData GetCivHomeSystem(Civilization civ)
        {
            GlobalGameData gameDataRef = GameObject.Find("GameManager").GetComponent<GlobalGameData>();
            GalaxyData galaxyDataRef = GameObject.Find("GameManager").GetComponent<GalaxyData>();
            PlanetData pData = new PlanetData();
            StarData sData = new StarData();

            pData = galaxyDataRef.GalaxyPlanetDataList.Find(p => p.ID == civ.CapitalPlanetID);
            sData = galaxyDataRef.GalaxyStarDataList.Find(p => p.ID == pData.SystemID);

            return sData;
        }
        public static float MeasureDistanceBetweenSystems(StarData star1, StarData star2)
        {
            float distance = 0f;
            float a = 0f;
            float b = 0f;
            float h = 0f;

            a = Mathf.Abs(star1.WorldLocation.x - star2.WorldLocation.x); // x distance
            b = Mathf.Abs(star1.WorldLocation.y - star2.WorldLocation.y); // y distance
            h = Mathf.Pow(a, 2f) + Mathf.Pow(b, 2f);
            distance = Mathf.Sqrt(h);

            return distance;
        }
        public static StarData GetSystem(string ID)
        {
            GalaxyData galaxyDataRef = GameObject.Find("GameManager").GetComponent<GalaxyData>();
            StarData sData = new StarData();

            sData = galaxyDataRef.GalaxyStarDataList.Find(p => p.ID == ID);
            return sData;
        }
        public static List<StarData> GetProvinceSystems(string ID)
        {
            GalaxyData galaxyDataRef = GameObject.Find("GameManager").GetComponent<GalaxyData>();
            StarData sData = new StarData();
            List<StarData> sDataList = new List<StarData>();

            sDataList = galaxyDataRef.GalaxyStarDataList.FindAll(p => p.AssignedProvinceID == ID);
            return sDataList;
        }