private void CheckPopupVisibility(Planet planet)
 {
     if (Screens["SolarSystem"].Objects["MoreInfoPopup"].ToPopup().IsVisible)
     {
         RefreshPopup(Screens["SolarSystem"].Objects["MoreInfoPopup"].ToPopup(), planet);
     }
 }
        public StationBuilder GetStationBuilder(Planet planet)
        {
            List<Weapon> weapons = new List<Weapon>();

            StationBuilder temp = new StationBuilder(Content.Load<Texture2D>("Stations/StationBuilder"),
                            new Vector2(planet.X + planet.Width + 30, planet.Y + planet.Height + 30),
                            new Vector2(Scales.EightTenth), 0.1f, Player.Race.Speed, Player.Race.Defence, 1f, 1000, 2000, "Station Builder", Player.Name,
                            Circle, weapons);
            temp.PositionFromCenter = planet.PositionFromCenter;
            return temp;
        }
        public Ship GetWorkerShip(Planet planet)
        {
            List<Weapon> weapons = new List<Weapon>();
            weapons.Add(new Weapon(Content.Load<Texture2D>("Weapons/RedLaser"), 90f, 100f, 10, Vector2.Zero, 1000f));

            Ship temp = new Ship(Content.Load<Texture2D>("Ships/SpaceShipExperimentVersion"),
                            new Vector2(planet.X + planet.Width + 30, planet.Y + planet.Height + 30),
                            new Vector2(Scales.ThreeTenth), 3f, Player.Race.Speed, Player.Race.Defence, 1f, 100, 200, "Worker Ship", Player.Name,
                            Circle, weapons);
            temp.PositionFromCenter = planet.PositionFromCenter;
            return temp;
        }
 /// <summary>
 /// Рефрешит ебаный попап с планетой, чтобы применить пиздатые изменения.
 /// </summary>
 /// <param name="popup">Попапчик сам.</param>
 /// <param name="sender">Планета.</param>
 private void RefreshPlanetInfoPopup(Planet sender)
 {
     HidePlanetInfoPopup();
     ShowPlanetInfoPopup(sender);
 }
        /// <summary>
        /// Метод для заполнения попапа состояния планеты.
        /// </summary>
        /// <param name="planet">Планета, на основе инфы которой и будет рисовать ебучее няшное состояние.</param>
        private void FillPlanetState(Planet planet)
        {
            string color = planet.CenterStar.StarColor;

            //Для удобства небольшого.
            float fertility = planet.Fertility;//Пригодится для определения всяких полей, это немного так то.
            float gravity = planet.Gravity;//не нужно
            float mass = planet.Mass;//не нужно
            //Ну с температурами все предельно ясно, по сути только ради этой хуйни все и затевается.
            int maxTemp = planet.MaxTemperature;
            int minTemp = planet.MinTemperature;
            float radioactivity = planet.Radioactivity;//хз пригодится ли
            float stability = planet.Stability;//Вулканы всякие, молние и тд
            int terraform = planet.Terraform;//Нужно ли отрисовывать всякие постройки цивилизации.
            string path = "PlanetState/"+color+"/"+color;

            //Тоже для удобства
            /*BackGround frame = ((BackGround)((Popup)screens["SolarSystem"].Objects["MoreInfoPopup"]).Objects["PlanetStateFrame"]);
            float x = frame.X;
            float y = frame.Y;
            Vector2 position = frame.Position;*/

            Vector2 position = new Vector2(104, 84);
            Popup planetInfo = ((Popup)screens["SolarSystem"].Objects["MoreInfoPopup"]);

            try
            {
                planetInfo.Objects.Remove("PlanetStateLand");
                planetInfo.Objects.Remove("PlanetStateMountain");
                planetInfo.Objects.Remove("PlanetStateClouds");
                planetInfo.Objects.Remove("PlanetStateSky");
            }
            catch
            {
                Debug.Assert(false, "Something wrong with remove");
            }

            /*
             * ПОРЯДОК:
             * Небо
             * Облака
             * Горы и тд
             * Основная область
             */

            planetInfo.Objects.Add("PlanetStateSky", CreateIcon(path + "Sky", /*HERE*/0.7f, 255f, position));
            planetInfo.Objects.Add("PlanetStateClouds", CreateIcon(path + "Clouds", /*HERE*/0.7f, 255f, position));

            //Пока только по максимальной температуре работать.
            /*
             * Для себя:
             * -20 и ниже - лед.
             * меньше 0 - снег.
             * 0-25 поля
             * 25-35 - каменная пустыня
             * 35 - 70 - пустыня
             * 70 - 150 - лава
             * 150+ - огонь
             */
            string TempType = "";

            if (maxTemp <= 0)
            {
                TempType = "Snow";
            }
            else if (maxTemp > 0 && maxTemp <= 25)
            {
                TempType = "Field";
            }
            else if (maxTemp > 25 && maxTemp <= 35)
            {
                TempType = "RockyDesert";
            }
            else if (maxTemp > 35 && maxTemp <= 70)
            {
                TempType = "Sands";
            }
            else if (maxTemp > 70 && maxTemp <= 150)
            {
                TempType = "Sands";
            }
            else
            {
                TempType = "Sands";
            }

            /*
             * Стабильность:
             * Вызывает горы.
             * Если стабильность выше выше 30%, то делаем горы
             * Если выше 60%, то вулканы
             * Если выше даже 80% то к этому доблавляем молнии.
             * По хорошему еще бы придумать, что запиливать, когда стабильность ниже 30%
             * Алсо, стоит самому себе напомнить, что чем выше показатель стабильности, тем нестабильнее
             * И вообще эт у хуйню надо по-другому назвать.
             */

            string mountainsType = "";
            switch (TempType)
            {
                case "RockyDesert" : case "Sands":
                    mountainsType = "DesertMountain";
                    break;
                case "Snow":
                    mountainsType = "SnowMountains";
                    break;
                default:
                    mountainsType = "StoneMountains";
                    break;
            }

            if (stability > 0.3f && stability <= 0.6f)
            {
                planetInfo.Objects.Add("PlanetStateMountain", CreateIcon(path + mountainsType, 0.7f, 255f, position));
            }
            else if (stability > 0.6f && stability <= 0.8f)
            {
                planetInfo.Objects.Add("PlanetStateMountain", CreateIcon(path + mountainsType, 0.7f, 255f, position));
            }
            else if (stability > 0.8f)
            {
                planetInfo.Objects.Add("PlanetStateMountain", CreateIcon(path + mountainsType, 0.7f, 255f, position));
            }

            planetInfo.Objects.Add("PlanetStateLand", CreateIcon(path + TempType, 0.7f, 255f, position));
        }
 private void RefreshPopup(Popup popup, Planet planet)
 {
 }
        private void ShowPlanetInfoPopup(Planet planet)
        {
            InfoPopupSettings settings = new InfoPopupSettings(true, true);
            FillPlanetState(planet);

            tempPlanetName = planet.Name;

            //Buttons
            if (planet.Owner != currentPlayer && planet.Query.Buttons.Count == 0 &&
                ((!players[currentPlayer].HasHome && planet.Terraform == 4) ||
                (players[currentPlayer].HasHome && planet.ShipsOnOrbit.Count > 0 && planet.Terraform != 0)))
            {
                settings.IsColonize = true;
            }

            if (planet.Owner == currentPlayer)
            {
                settings.IsWorkerShipCreate = true;
            }

            if (players[currentPlayer].HasHome && planet.Terraform != 4
                && planet.Terraform < planet.MaxTerraform && !planet.IsTerraforming &&
                planet.Owner == currentPlayer)
            {
                settings.IsTerraform = true;
            }

            if (planet.Terraform == 4 && planet.Owner == currentPlayer)
            {
                settings.IsStationBuilder = true;
            }
            //End buttons

            AcceptPopupSettings(settings);
        }
        //---------------------------------------------------------------
        //PLANET CLICK
        //---------------------------------------------------------------
        private void PlanetClick(Planet sender, MouseState ms)
        {
            #region Опять какие-то ебучие рассуждения
            /*
             * Колонизировать не первую планету можно только в том случае, если рядом с ней находится корабль.
             * А именно корабль находится на орбите (уже научил, хоть и криво).
             * Корабль в процессе колонизации исчезает.
             * Кстати сам прцоесс колонизации длится определенное время, пока там колонисты освоятся.
             * Не просто же так они вывалили свои жёёёппы и начали ябаться.
             * После колонизации становится доступен тераформ, но лишь настолько, насколько позволяет планета.
             * Строительство рабочих кораблей и прототипов станций становится доступно сразу после колонизации.
             * Однако время для строительства всего этого напрямую зависит от стадии тераформа (насколько тяжелые условия).
             * Так же от стадии тераформа зависят приносимые планетой ресурсы (это тоже надо отображать).
             * Приносимые планетой ресурсы так же зависят от того, производится ли на ней в данный момент что-либо.
             * Если производится, то приносимых ресурсов немного меньше.
             * Грубо говоря это связано с тем, что те же люди, которые приносят ресурсы вдруг становятся заняты на производстве.
             * Однако их число не велико.
             * Тоже самое касается и строительства зданий - часть людей уходит строить.
             * Вообще это касается любого производства на планете.
             * ОБЯЗАТЕЛЬНО ЗАМУТИТЬ КЛАСС НАСТРОЕК, КОТОРЫЙ БУДЕТ СОБИРАТЬСЯ СНАЧАЛА И ЛИШЬ ПОТОМ ОТДАВАТЬСЯ НА ОТРИСОВКУ.
             * А ТО ГОВНОКОДА БУДЕТ СТОЛЬКО, ЧТО ПОТЕРЯТЬСЯ БУДЕТ МОЖНО. ЧАСТЬ ЕГО НУЖНО ОТДЕЛИТЬ.
             * Еще надо сделат ьмелкую панельку управления кораблем (имя, хп, щит ,команды всякие, как во всех ртс), а то на ожну правую кнопку многому не научишь.
             */
            #endregion
            if (!IsHigher(sender.ToIDraw(), ms))
            {
                return;
            }

            ShowPlanetInfoPopup(sender);
        }
        private TemperatureBounds GetNewTemperatureBounds(Planet planet)
        {
            Random r = new Random();
            int min, max;
            if (planet.Terraform == 1)
            {
                if (planet.MaxTemperature < 0)
                {
                    min = r.Next(-120, -100);
                    max = r.Next(min, min + 50);
                }
                else
                {
                    min = r.Next(90, 110);
                    max = r.Next(min, min + 50);
                }
            }
            else if (planet.Terraform == 2)
            {
                if (planet.MaxTemperature < 0)
                {
                    min = r.Next(-70, -60);
                    max = r.Next(min, min + 50);
                }
                else
                {
                    min = r.Next(60, 70);
                    max = r.Next(min, min + 50);
                }
            }
            else
            {
                min = r.Next(-40, -10);
                max = r.Next(min, min + 50);
            }

            return new TemperatureBounds(min, max);
        }
        private void GeneratingPlanets(SolarSystem system)
        {
            #region LocalVariables
            Star star = system.Objects[0].ToStar();
            int width = (int)star.Width / 2;
            Random count = new Random();
            Random temperature = new Random();
            Random textureRnd = new Random();
            Random radiusRnd = new Random();
            Random planetInterval = new Random();
            Random planetDegrees = new Random();
            int planetCount = count.Next(1, 11);
            #endregion

            for (int i = 0; i < planetCount; i++)
            {
                int degrees = planetDegrees.Next(0, 360);
                int interval = planetInterval.Next(50, 120);
                int planetSize = new Random().Next(2000, 5000);
                float planetScale = (float)(5000 - planetSize) / 3000f;
                planetScale = 0.05f * planetScale;
                planetScale = 0.1f - planetScale;
                int radius = radiusRnd.Next(WGInfoHelper[i].MinRadius + width, WGInfoHelper[i].MaxRadius + width);

                Planet tempPlanet = new Planet(
                    Content.Load<Texture2D>(WGInfoHelper[i].Textures[textureRnd.Next(0, WGInfoHelper[i].Textures.Length)]),
                    new Vector2(planetScale), radius, interval, degrees, star, WGInfoHelper[i].GenTerraform,
                    Content.Load<Texture2D>("Textures/AlphaPlanet"));

                //tempPlanet.Circle = CreateCircle(radius);

                tempPlanet.Name = ConstructName();

                //Planet Properties
                tempPlanet.PlanetSize = planetSize;
                tempPlanet.MaxTemperature = temperature.Next(WGInfoHelper[i].MinTemperature, WGInfoHelper[i].MaxTemperature);
                tempPlanet.MinTemperature = temperature.Next(WGInfoHelper[i].MinTemperature, tempPlanet.MaxTemperature);
                tempPlanet.MaxTerraform = WGInfoHelper[i].MaxTerraform(WGInfoHelper[i], tempPlanet.MaxTemperature);

                tempPlanet.IsAborigens = new Random().Next(0, 4) == 1 ? true : false;
                tempPlanet.Mass = (tempPlanet.PlanetSize * tempPlanet.PlanetSize) / 10;
                tempPlanet.Gravity = tempPlanet.Mass / 1000000;
                tempPlanet.Climat = "Unknown";

                #region Shit Properties
                int temp = new Random().Next(1, 100);
                int temp2;
                tempPlanet.Stability = (float)temp;
                bool isEqual;
                do
                {
                    temp2 = new Random().Next(1, 100);
                    if (temp == temp2)
                    {
                        isEqual = true;
                    }
                    else
                    {
                        isEqual = false;
                    }
                } while (isEqual);
                tempPlanet.Fertility = (float)temp2;
                do
                {
                    temp = new Random().Next(1, 100);
                    if (temp == temp2)
                    {
                        isEqual = true;
                    }
                    else
                    {
                        isEqual = false;
                    }
                } while (isEqual);
                tempPlanet.Radioactivity = (float)temp;
                #endregion
                //End Planet Properties

                system.Objects.Add(tempPlanet);
            }
        }