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); } }