public static StarSystem GenerateSystem(int width, int height)
        {
            //Get type of star
            int maxNum      = Enum.GetNames(typeof(Types.StarType)).Length;
            int starTypeNum = Randomizer.GetRandomNumber(0, maxNum - 1);

            Types.StarType starType = (Types.StarType)starTypeNum;

            string starColor  = "yellow";
            float  solarMass  = 1.0F;
            float  solarSize  = 1.0F;
            float  solarLum   = 1.0F;
            int    numPlanets = 0;
            string starName   = "G";

            //Create randomized characteristics based on star type
            switch (starType)
            {
            case Types.StarType.ClassO:
                starName  = "O";
                starColor = "blue";
                solarMass = (float)Randomizer.GetRandomNumber(16, 50);
                solarSize = ((float)Randomizer.GetRandomNumber(66, 100)) / 10;
                solarLum  = (float)Randomizer.GetRandomNumber(30000, 50000);
                break;

            case Types.StarType.ClassB:
                starName  = "B";
                starColor = "blue-white";
                solarMass = ((float)Randomizer.GetRandomNumber(21, 160)) / 10;
                solarSize = ((float)Randomizer.GetRandomNumber(18, 66)) / 10;
                solarLum  = (float)Randomizer.GetRandomNumber(25, 30000);
                break;

            case Types.StarType.ClassA:
                starName  = "A";
                starColor = "white";
                solarMass = ((float)Randomizer.GetRandomNumber(140, 210)) / 100;
                solarSize = ((float)Randomizer.GetRandomNumber(140, 180)) / 100;
                solarLum  = ((float)Randomizer.GetRandomNumber(50, 250)) / 10;
                break;

            case Types.StarType.ClassF:
                starName  = "F";
                starColor = "yellow-white";
                solarMass = ((float)Randomizer.GetRandomNumber(104, 140)) / 100;
                solarSize = ((float)Randomizer.GetRandomNumber(115, 140)) / 100;
                solarLum  = ((float)Randomizer.GetRandomNumber(150, 500)) / 100;
                break;

            case Types.StarType.ClassG:
                starName  = "G";
                starColor = "yellow";
                solarMass = ((float)Randomizer.GetRandomNumber(80, 104)) / 100;
                solarSize = ((float)Randomizer.GetRandomNumber(96, 115)) / 100;
                solarLum  = ((float)Randomizer.GetRandomNumber(60, 150)) / 100;
                break;

            case Types.StarType.ClassK:
                starName  = "K";
                starColor = "orange";
                solarMass = ((float)Randomizer.GetRandomNumber(45, 80)) / 100;
                solarSize = ((float)Randomizer.GetRandomNumber(70, 96)) / 100;
                solarLum  = ((float)Randomizer.GetRandomNumber(8, 60)) / 100;
                break;

            case Types.StarType.ClassM:
                starName  = "M";
                starColor = "red";
                solarMass = ((float)Randomizer.GetRandomNumber(8, 45)) / 100;
                solarSize = ((float)Randomizer.GetRandomNumber(1, 70)) / 100;
                solarLum  = ((float)Randomizer.GetRandomNumber(1, 8)) / 100;
                break;
            }

            //Create randomized name
            int classNumber  = Randomizer.GetRandomNumber(0, 9);
            int randomNumber = Randomizer.GetRandomNumber(1, 99);
            int greekLetter  = Randomizer.GetRandomNumber(0, Types.GreekLetters.Length);

            starName = Types.GreekLetters[greekLetter] + " " + randomNumber.ToString() +
                       "-" + starName + classNumber.ToString();


            //Create planets
            numPlanets = Randomizer.GetRandomNumber(0, 7);

            //Set coordinates
            int x = Randomizer.GetRandomNumber(0, width);
            int y = Randomizer.GetRandomNumber(0, height);

            StarSystem newSystem = new StarSystem(starColor, solarMass, solarSize, solarLum, numPlanets, starName, starType, x, y);

            List <Planet> listOfPlanets = GeneratePlanets(newSystem, numPlanets);

            newSystem.PopulatePlanets(listOfPlanets);
            newSystem.PrimaryRingPlanet = ChoosePrimaryRingPlanet(listOfPlanets);

            newSystem.Searched = false;

            int discovered = Randomizer.GetRandomNumber(0, 2);

            if (discovered == 0)
            {
                newSystem.Discovered = false;
            }
            else
            {
                newSystem.Discovered = true;
            }

            return(newSystem);
        }
        public static StarSystem CreateSol(int galWidth, int galHeight)
        {
            StarSystem sol = new StarSystem("yellow", 1.0f, 1.0f, 1.0f, 9, "Sol", Types.StarType.ClassG, galWidth / 2, galHeight / 2);

            sol.Discovered = true;
            sol.Searched   = true;

            sol.planets = new List <Planet>(9);
            Planet newP;

            //Mercury
            newP       = new Planet(Types.PlanetSize.SEClass, Types.PlanetComp.Solid, Types.Atmosphere.None, Types.Climate.Arid, Types.EmLevel.High, 60, 1, 0, "Mercury", sol, Color.Red);
            newP.zones = new List <PlanetZone>();
            newP.zones.Add(new PlanetZone(Types.Biome.Desert, new List <Resource>(), newP));
            newP.Searched = true;
            sol.planets.Add(newP);
            //Venus
            newP       = new Planet(Types.PlanetSize.EClass, Types.PlanetComp.MoltenCore, Types.Atmosphere.CarbonDioxide, Types.Climate.Humid, Types.EmLevel.Medium, 105, 2, 0, "Venus", sol, Color.Yellow);
            newP.zones = new List <PlanetZone>();
            newP.zones.Add(new PlanetZone(Types.Biome.Desert, new List <Resource>(), newP));
            newP.Searched = true;
            sol.planets.Add(newP);
            //Earth
            newP       = new Planet(Types.PlanetSize.EClass, Types.PlanetComp.MoltenCore, Types.Atmosphere.OxygenNitrogen, Types.Climate.Temperate, Types.EmLevel.Low, 150, 3, 1, "Earth", sol, Color.Blue);
            newP.zones = new List <PlanetZone>();
            newP.zones.Add(new PlanetZone(Types.Biome.Grassland, new List <Resource>(), newP));
            newP.zones.Add(new PlanetZone(Types.Biome.Desert, new List <Resource>(), newP));
            newP.zones.Add(new PlanetZone(Types.Biome.Tundra, new List <Resource>(), newP));
            newP.Searched = true;
            sol.planets.Add(newP);
            //Mars
            newP       = new Planet(Types.PlanetSize.SEClass, Types.PlanetComp.Solid, Types.Atmosphere.Minor, Types.Climate.Arid, Types.EmLevel.High, 228, 4, 2, "Mars", sol, Color.Red);
            newP.zones = new List <PlanetZone>();
            newP.zones.Add(new PlanetZone(Types.Biome.Desert, new List <Resource>(), newP));
            newP.Searched         = true;
            newP.HasMainRing      = true;
            newP.ringZone         = newP.zones[0];
            sol.PrimaryRingPlanet = newP;
            sol.planets.Add(newP);
            //Jupiter
            newP       = new Planet(Types.PlanetSize.JClass, Types.PlanetComp.Gas, Types.Atmosphere.HydrogenHelium, Types.Climate.Storm, Types.EmLevel.High, 779, 5, 67, "Jupiter", sol, Color.Purple);
            newP.zones = new List <PlanetZone>();
            newP.zones.Add(new PlanetZone(Types.Biome.Desert, new List <Resource>(), newP));
            newP.Searched = true;
            sol.planets.Add(newP);
            //Saturn
            newP       = new Planet(Types.PlanetSize.JClass, Types.PlanetComp.Gas, Types.Atmosphere.HydrogenHelium, Types.Climate.Storm, Types.EmLevel.High, 1434, 6, 62, "Saturn", sol, Color.Orange);
            newP.zones = new List <PlanetZone>();
            newP.zones.Add(new PlanetZone(Types.Biome.Desert, new List <Resource>(), newP));
            newP.Searched = true;
            sol.planets.Add(newP);
            //Uranus
            newP       = new Planet(Types.PlanetSize.NClass, Types.PlanetComp.Gas, Types.Atmosphere.HydrogenHelium, Types.Climate.Storm, Types.EmLevel.Medium, 2873, 7, 27, "Uranus", sol, Color.MediumBlue);
            newP.zones = new List <PlanetZone>();
            newP.zones.Add(new PlanetZone(Types.Biome.Desert, new List <Resource>(), newP));
            newP.Searched = true;
            sol.planets.Add(newP);
            //Neptune
            newP       = new Planet(Types.PlanetSize.NClass, Types.PlanetComp.Gas, Types.Atmosphere.HydrogenHelium, Types.Climate.Storm, Types.EmLevel.Medium, 4495, 8, 14, "Neptune", sol, Color.Turquoise);
            newP.zones = new List <PlanetZone>();
            newP.zones.Add(new PlanetZone(Types.Biome.Desert, new List <Resource>(), newP));
            newP.Searched = true;
            sol.planets.Add(newP);
            //Pluto
            newP       = new Planet(Types.PlanetSize.DwarfPlanet, Types.PlanetComp.RockIce, Types.Atmosphere.None, Types.Climate.Arid, Types.EmLevel.Low, 5906, 9, 5, "Pluto", sol, Color.Gray);
            newP.zones = new List <PlanetZone>();
            newP.zones.Add(new PlanetZone(Types.Biome.Desert, new List <Resource>(), newP));
            newP.Searched = true;
            sol.planets.Add(newP);

            return(sol);
        }
        public Planet(Types.PlanetSize planetSize, Types.PlanetComp planetComp, Types.Atmosphere planetAtmos, Types.Climate planetClim, Types.EmLevel planetEM,
                      int orbitSize, int orbitNum, int numberOfMoons, string planetName, StarSystem currentSystem, Color planetColor)
        {
            size       = planetSize;
            atmosphere = planetAtmos;
            comp       = planetComp;
            climate    = planetClim;
            emLevel    = planetEM;

            orbitalRadius = orbitSize;
            orbitalNum    = orbitNum;
            numMoons      = numberOfMoons;
            name          = planetName;
            system        = currentSystem;

            color           = planetColor;
            searched        = false;
            hasGalacticRing = false;

            //Zones need to be added later
        }