コード例 #1
0
ファイル: UniverseViewer.cs プロジェクト: Cyral/Zarknorth
        public void Generate()
        {
            Debug.Assert(Systems.Count <= 0, "Universe already created");

            //Create a galaxy
            Galaxy g = new Galaxy()
            {
                Position = Vector2.Zero
            };

            //Add solar systems
            for (int i = 0; i < total * total; i++)
            {
                int posX = ((i % total) * apart) + Game.random.Next(-deviation, deviation);
                int posY = ((i / total) * apart) + Game.random.Next(-deviation, deviation);
                //Add system
                if (i == 0)
                {
                    g.Children.Add(new SolarSystem()
                    {
                        Name     = PlanetNamer.NamePlanet(),
                        Position = Vector2.Zero,
                    });
                }
                else
                {
                    Vector2 Position = new Vector2(posX, posY);
                    g.Children.Add(new SolarSystem()
                    {
                        Name     = PlanetNamer.NamePlanet(),
                        Position = Position,
                    });
                }


                //Planets per system
                int totalPlanets = Game.random.Deviation(3, 11, 7);
                //Loop through planets to be made
                for (int planet = 0; planet < totalPlanets; planet++)
                {
                    //First object is always a sun
                    if (planet == 0)
                    {
                        //Choose a type of sun
                        PlanetarySubType SubType = SunType.GetRandom();

                        //Add and set it up
                        g.Children[i].Children.Add(new PlanetaryObject(g.Children[i].Name, planet, g.Children[i], PlanetaryType.Sun, SubType)
                        {
                            Diameter    = Game.random.Deviation((SubType as SunType).MinDiameter, (SubType as SunType).MaxDiameter, (SubType as SunType).AvgDiameter),
                            Color       = ((SunType)SubType).Colors[Game.random.Next(0, ((SunType)SubType).Colors.Length)],
                            OuterRadius = 0,
                            Position    = g.Children[i].Position,
                            Angle       = 0,
                        });
                    }
                    //Others are planets
                    else
                    {
                        //Choose type of planet
                        PlanetarySubType SubType = PlanetType.GetRandom((float)planet / (float)totalPlanets);

                        //Choose diameter
                        int Diameter = (int)MathHelper.Clamp(((float)(planet - 1) / (float)totalPlanets <= .5f ? (int)(((float)(planet - 1) / (float)totalPlanets) * (100f * 2)) + 156 : (int)((1f - ((float)(planet) / ((float)totalPlanets - 1))) * (100f * 2)) + 156) + Game.random.Next(-30, 30), 156, 256);

                        //Choose 'outer radius', the ring
                        float OuterRadius = 0;
                        if (planet == 1)     //First planet in system
                        {
                            OuterRadius = (g.Children[i].Children[0].Diameter) + Diameter + Game.random.Next(120, 220);
                        }
                        else
                        {
                            OuterRadius = g.Children[i].Children[planet - 1].OuterRadius + (g.Children[i].Children[planet - 1].Diameter) + Game.random.Next(0, 65);
                        }

                        //Add and set it up
                        g.Children[i].Children.Add(new PlanetaryObject(g.Children[i].Name, planet, g.Children[i], PlanetaryType.Planet, SubType)
                        {
                            Diameter = Diameter,
                            Color    = Color.Lerp(((PlanetType)SubType).Colors[Game.random.Next(0, ((PlanetType)SubType).Colors.Length)],
                                                  ((PlanetType)SubType).Colors[Game.random.Next(0, ((PlanetType)SubType).Colors.Length)], (float)Game.random.NextDouble()),
                            OuterRadius = OuterRadius,
                            Angle       = Game.random.Next(0, 360),
                        });

                        g.Children[i].Radius = OuterRadius;
                    }
                }
            }
            Systems.Add(g);
            HomePlanet = g.Children[(g.Children.Count / 2) + (total / 2)].Children[1];
            TotalSize  = total;
        }
コード例 #2
0
 static SunType()
 {
     SunTypes      = new List <SunType>();
     OMainSequence = new SunType("Main Sequence Star (O)")
     {
         Abundance   = .02f,
         Colors      = new Color[] { new Color(0, 220, 255) },
         MinDiameter = 590,
         MaxDiameter = 730,
         AvgDiameter = 660,
     };
     BMainSequence = new SunType("Main Sequence Star (B)")
     {
         Abundance   = .05f,
         Colors      = new Color[] { new Color(45, 180, 255) },
         MinDiameter = 550,
         MaxDiameter = 680,
         AvgDiameter = 630,
     };
     AMainSequence = new SunType("Main Sequence Star (A)")
     {
         Abundance   = .05f,
         Colors      = new Color[] { new Color(140, 200, 255) },
         MinDiameter = 530,
         MaxDiameter = 660,
         AvgDiameter = 590,
     };
     FMainSequence = new SunType("Main Sequence Star (F)")
     {
         Abundance   = .06f,
         Colors      = new Color[] { new Color(255, 235, 165) },
         MinDiameter = 500,
         MaxDiameter = 650,
         AvgDiameter = 570,
     };
     GMainSequence = new SunType("Main Sequence Star (G)")
     {
         Abundance   = .08f,
         Colors      = new Color[] { new Color(255, 255, 135), new Color(255, 230, 135) },
         MinDiameter = 490,
         MaxDiameter = 640,
         AvgDiameter = 580,
     };
     KMainSequence = new SunType("Main Sequence Star (K)")
     {
         Abundance   = .14f,
         Colors      = new Color[] { new Color(255, 182, 63), new Color(255, 192, 68) },
         MinDiameter = 470,
         MaxDiameter = 630,
         AvgDiameter = 550,
     };
     MMainSequence = new SunType("Main Sequence Star (M)")
     {
         Abundance   = .42f,
         Colors      = new Color[] { new Color(255, 145, 0), new Color(255, 120, 5), new Color(255, 165, 0), new Color(255, 155, 20), },
         MinDiameter = 460,
         MaxDiameter = 610,
         AvgDiameter = 520,
     };
     RedGiant = new SunType("Red Giant")
     {
         Abundance   = .12f,
         Colors      = new Color[] { new Color(255, 52, 0), new Color(255, 100, 20) },
         MinDiameter = 630,
         MaxDiameter = 760,
         AvgDiameter = 710,
     };
     SuperGiant = new SunType("Super Giant")
     {
         Abundance   = .07f,
         Colors      = new Color[] { new Color(255, 70, 30), new Color(255, 150, 60) },
         MinDiameter = 680,
         MaxDiameter = 768,
         AvgDiameter = 750,
     };
     WhiteDwarf = new SunType("White Dwarf")
     {
         Abundance   = .06f,
         Colors      = new Color[] { new Color(250, 255, 255), new Color(245, 253, 255) },
         MinDiameter = 90,
         MaxDiameter = 200,
         AvgDiameter = 140
     };
     SunTypes = SunTypes.OrderBy(x => x.Abundance).ToList();
     Chances  = new List <SunType>();
     foreach (SunType st in SunTypes)
     {
         for (int i = 0; i < st.Abundance * 100; i++)
         {
             Chances.Add(st);
         }
     }
 }