コード例 #1
0
        private void WorldGenerator()
        {
            //Generating a system stars.
            Texture2D circle = Content.Load<Texture2D>("LittleStars/CurrentPlayerCircle");
            r = new Random();
            r2 = new Random();
            int objectsCount = r.Next(150, 300);
            int holesCount = r.Next(5, 15);
            int holes = 0;
            double pixelsTemp = 4000 / objectsCount;
            //Calculating pixels between two stars.
            int pixels = 0;
            map = new Map();
            Texture2D texture;
            //int temp = 1;
            for (int i = 0; i < objectsCount; i++)
            {
                //BlackHole or Star
                bool isBlackHole = false;
                if (holesCount > holes)
                {
                    isBlackHole = new Random().Next(0, 2) == 1 ? true : false;
                }
                if (isBlackHole)
                {
                    texture = Content.Load<Texture2D>("BlackHoles/OnMap/" +
                        blackHolesOnMapTextures[r2.Next(0, blackHolesOnMapTextures.Length)]);
                }
                else
                {
                    texture = Content.Load<Texture2D>("LittleStars/SystemStars/" +
                        systemStarsTextures[r2.Next(0, systemStarsTextures.Length)]);
                }
               //Checking for range between stars.
               //First version of algorithm, where stars adding only if have place to it.
               bool isNear = true;
               float starX = 0;
               float starY = 0;
               if (map.Objects.Count == 0)
               {
                   starX = r.Next(0, 4000);
                   starY = r.Next(0, 4000);
               }
               else
               {
                   while (isNear)
                   {
                       starX = r.Next(0, 4000);
                       starY = r.Next(0, 4000);
                       isNear = false;
                       foreach (IDraw star in map.Objects)
                       {
                           if (Math.Abs(((IMoveble)star).X - starX) < pixels ||
                               Math.Abs(((IMoveble)star).Y - starY) < pixels)
                           {
                               isNear = true;
                               break;
                           }
                       }
                   }
               }
               //Adding stars
               if (isBlackHole)
               {
                   BlackHoleOnMap tempHole = new BlackHoleOnMap(texture, new Vector2(starX, starY), new Vector2(Scales.FourTenth));
                   GenerateBlackHoleSystem(tempHole);
                   map.Objects.Add(tempHole);
                   if (pixels == 0)
                   {
                       pixels = (int)tempHole.Width / 2;
                   }
                   holes++;
               }
               else
               {
                   StarOnMap tempStar = new StarOnMap(texture, new Vector2(starX, starY), new Vector2(Scales.FourTenth));
                   tempStar.Circle = circle;
                   tempStar.Owner = "Unknown";
                   GenerateSolarSystem(tempStar);
                   map.Objects.Add(tempStar);
                   if (pixels == 0)
                   {
                       pixels = (int)tempStar.Width / 2;
                   }
               }
               ((ProgressBar)screens["Gen"].Objects["ProgressBar"]).PWidth
                   = (int)((float)i / objectsCount * ((ProgressBar)screens["Gen"].Objects["ProgressBar"]).TextureWidth);
               ((GameString)screens["Gen"].Objects["String"]).Str = "Generating stars... " + i.ToString() + "/" + objectsCount;
            }

            GalaxyMap(map);
            currentScreen = "GalaxyMap";
            LoadEvents("GalaxyMap");
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
コード例 #2
0
        /// <summary>
        /// Открытие экрана звездной системы.
        /// </summary>
        /// <param name="star">Звезда, к которой привязана звзедная система.</param>
        private void SolarSystemOpen(StarOnMap star)
        {
            /*
             * Проверки на известность системы, есть ли владелец и все такое.
             * Так же загрузка координат кораблей относительно звезды.
             * может еще чего с планетами сделать подобное.
             * Потому что до первого тика они имеют ебнутые координаты и лишь потом выстраиваются вокруг звезды.
             * Ну и видимо еще точно так же загрузка астероидов из относительных координат.
             * Загрузка ивентов звездной системы.
             */

            //Проверка на известность, владельца.
            SolarSystem(star.SS);
            bool isUnknown = true;
            foreach (IDraw obj in star.SS.Objects)
            {
                if (obj is Planet)
                {
                    if (obj.ToPlanet().Owner != "Unknown")
                    {
                        isUnknown = false;
                        break;
                    }
                }
            }
            if (isUnknown)
            {
                foreach (IDraw obj in star.SS.Objects)
                {
                    if (obj is Planet)
                    {
                        obj.ToPlanet().Owner = "Nobody";
                    }
                }
                star.Owner = "Nobody";
                star.IsVisited = true;
                star.Circle = StarOnMapCircles["Nobody"];
            }

            foreach (IDraw obj in star.SS.Objects)
            {
                //Загрузка относительных координат кораблей.
                if (obj is Ship)
                {
                    if (obj.ToShip().PositionFromCenter != Vector2.Zero)
                    {
                        obj.ToShip().Position = /*HERE*//*Shift(CenterPoint)*/CenterPoint - obj.ToShip().PositionFromCenter;
                        obj.ToShip().NextPosition = CenterPoint - obj.ToShip().NextPosition;
                    }
                }
                //Загрузка относительных координат астероидов.
                else if (obj is Asteroid)
                {
                    if (obj.ToAsteroid().PositionFromCenter != Vector2.Zero)
                    {
                        obj.ToAsteroid().Position = /*HERE*//*Shift(CenterPoint)*/CenterPoint - obj.ToAsteroid().PositionFromCenter;
                    }
                }
                //Загрузка относительных координат планет.
                else if (obj is Planet)
                {
                    if (obj.ToPlanet().PositionFromCenter != Vector2.Zero)
                    {
                        obj.ToPlanet().Position = /*HERE*//*Shift(CenterPoint)*/CenterPoint - obj.ToPlanet().PositionFromCenter;
                    }
                }
                else if (obj is StationBuilder)
                {
                    if (obj.ToStationBuilder().PositionFromCenter != Vector2.Zero)
                    {
                        obj.ToStationBuilder().Position = CenterPoint - obj.ToStationBuilder().PositionFromCenter;
                    }
                }
                else if (obj is StationOnBuilding)
                {
                    if (obj.ToStationOnBuilding().PositionFromCenter != Vector2.Zero)
                    {
                        obj.ToStationOnBuilding().Position = CenterPoint - obj.ToStationOnBuilding().PositionFromCenter;
                        obj.ToStationOnBuilding().Progress.Position = new Vector2(obj.ToStationOnBuilding().Position.X, obj.ToStationOnBuilding().Position.Y - obj.ToStationOnBuilding().Progress.Height - 5);
                    }
                }
                else if (obj is Station)
                {
                    if (obj.ToStation().PositionFromCenter != Vector2.Zero)
                    {
                        obj.ToStation().Position = CenterPoint - obj.ToStation().PositionFromCenter;
                    }
                }
            }

            //Загрузка ивентов и установка текущего экрана.
            LoadEvents("SolarSystem");
            currentScreen = "SolarSystem";
        }
コード例 #3
0
        //--------------------------------------------------------------
        //GENERATE SOLAR SYSTEM
        //--------------------------------------------------------------
        private void GenerateSolarSystem(StarOnMap star)
        {
            //Construct star name
            string tempName = ConstructName();
            star.Name = tempName;
            //End name construction
            //Generating Solar System
            Random starType = new Random();

            string starTextureStr = starsTextures[starType.Next(0, starsTextures.Length)];
            Texture2D starTexture = Content.Load<Texture2D>
                ("Stars/"+starTextureStr);

            //Here take a starcolor'
            string color = GetColor(starTextureStr);

            Star tempStar = new Star(starTexture, CenterPoint, new Vector2(Scales.None), color);
            //Copy star name to solar star name
            tempStar.Name = tempName;
            SolarSystem ss = new SolarSystem(tempStar);
            ss.BackGround = CreateBackground("SystemBacks/"+
                systemBackTextures[new Random().Next(0, systemBackTextures.Length)], Scales.None, 255f);

            //NEW PLANET GENERATING
            GeneratingPlanets(ss);
            //END NEW PLANET GENERATING
            GeneratingAsteroids(ss);
            //End generating solar system
            star.SS = ss;
        }