private void DrawHillinessTypeSelection() { DrawEntryHeader("Terrain Types", backgroundColor: ColorLibrary.RoyalPurple); if (ListingStandard.ButtonText("Select Terrain")) { var floatMenuOptions = new List <FloatMenuOption>(); foreach (var hillinessValue in _gameData.DefData.HillinessCollection) { var label = "Any"; if (hillinessValue != Hilliness.Undefined) { label = hillinessValue.GetLabelCap(); } var menuOption = new FloatMenuOption(label, delegate { _gameData.GodModeData.Hilliness = hillinessValue; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, "Select terrain"); Find.WindowStack.Add(floatMenu); } // note: RimWorld logs an error when .GetLabelCap() is used on Hilliness.Undefined var rightLabel = _gameData.GodModeData.Hilliness != Hilliness.Undefined ? _gameData.GodModeData.Hilliness.GetLabelCap() : "Any"; ListingStandard.LabelDouble($"{"Terrain".Translate()}:", rightLabel); }
protected virtual void DrawHillinessTypeSelection() { DrawEntryHeader($"{"Terrain".Translate()} Types", backgroundColor: ColorFromFilterSubjectThingDef("Terrains")); if (ListingStandard.ButtonText("Select Terrain")) { var floatMenuOptions = new List <FloatMenuOption>(); foreach (var hillinessValue in _userData.HillinessCollection) { var label = "Any"; if (hillinessValue != Hilliness.Undefined) { label = hillinessValue.GetLabelCap(); } var menuOption = new FloatMenuOption(label, delegate { _userData.ChosenHilliness = hillinessValue; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, "Select terrain"); Find.WindowStack.Add(floatMenu); } // note: RimWorld logs an error when .GetLabelCap() is used on Hilliness.Undefined var rightLabel = _userData.ChosenHilliness != Hilliness.Undefined ? _userData.ChosenHilliness.GetLabelCap() : "Any"; ListingStandard.LabelDouble($"{"Terrain".Translate()}:", rightLabel); }
private void DrawHillinessTypeSelection() { DrawEntryHeader("PLMWTT_TerrainTypes".Translate(), backgroundColor: ColorFromFilterType(typeof(TileFilterHilliness))); if (ListingStandard.ButtonText("PLMWTT_SelectTerrain".Translate())) { var floatMenuOptions = new List <FloatMenuOption>(); foreach (var hillinessValue in _gameData.DefData.HillinessCollection) { var label = "PLMW_SelectAny".Translate(); if (hillinessValue != Hilliness.Undefined) { label = hillinessValue.GetLabelCap(); } var menuOption = new FloatMenuOption(label, delegate { _gameData.UserData.ChosenHilliness = hillinessValue; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, "PLMWTT_SelectTerrain".Translate()); Find.WindowStack.Add(floatMenu); } // note: RimWorld logs an error when .GetLabelCap() is used on Hilliness.Undefined var rightLabel = _gameData.UserData.ChosenHilliness != Hilliness.Undefined ? _gameData.UserData.ChosenHilliness.GetLabelCap() : "PLMW_SelectAny".Translate(); ListingStandard.LabelDouble($"{"Terrain".Translate()}:", rightLabel); }
private void DrawTileSelection() { DrawEntryHeader("Tile Setup", backgroundColor: ColorLibrary.RoyalPurple); var tileId = Find.WorldSelector.selectedTile; if (!Find.WorldSelector.AnyObjectOrTileSelected || tileId < 0) { var labelRect = ListingStandard.GetRect(DefaultElementHeight); Widgets.Label(labelRect, "Pick a tile on world map!"); _gameData.GodModeData.SelectedTileId = -1; return; } ListingStandard.LabelDouble("Selected Tile: ", tileId.ToString()); if (_gameData.GodModeData.SelectedTileId != tileId) { _gameData.GodModeData.InitFromTileId(tileId); } if (ListingStandard.ButtonText("Set Tile")) { if (Find.WorldObjects.AnySettlementBaseAtOrAdjacent(tileId)) { Messages.Message("You're not allowed to settle on or near another settlement tile.", MessageTypeDefOf.RejectInput); _gameData.GodModeData.SelectedTileId = -1; return; } PrepareLanding.Instance.TileFilter.ClearMatchingTiles(); //TODO: you need to clear the temperature cache for the tile, otherwise it's wrong after being changed... // see RimWorld.Planet.TileTemperaturesComp.RetrieveCachedData for the cache itself. It's private... // but could be cleaned with RimWorld.Planet.TileTemperaturesComp.ClearCaches() but that would invalidate *all* caches... _redrawMapEnabled = _gameData.GodModeData.SetupTile(); } var heightBefore = ListingStandard.StartCaptureHeight(); if (ListingStandard.ButtonText("Redraw Map")) { if (_redrawMapEnabled) { LongEventHandler.QueueLongEvent(delegate { Find.World.renderer.SetAllLayersDirty(); }, "GeneratingWorld", true, null); } else { Messages.Message("You need to change a tile first to be able to redraw the map.", MessageTypeDefOf.RejectInput); } } var tooltipRect = ListingStandard.EndCaptureHeight(heightBefore); TooltipHandler.TipRegion(tooltipRect, "[Warning: this redraws the map entirely; use it only when you have finished *all* your modifications.]"); }
protected void DrawGrowingPeriodSelection() { const string label = "Growing Period"; DrawEntryHeader($"{label} (days)", backgroundColor: ColorFromFilterSubjectThingDef("Growing Periods")); var boundField = _userData.GrowingPeriod; var tmpCheckedOn = boundField.Use; ListingStandard.Gap(); ListingStandard.CheckboxLabeled(label, ref tmpCheckedOn, $"Use Min/Max {label}"); boundField.Use = tmpCheckedOn; // MIN if (ListingStandard.ButtonText($"Min {label}")) { var floatMenuOptions = new List <FloatMenuOption>(); foreach (var growingTwelfth in boundField.Options) { var menuOption = new FloatMenuOption(growingTwelfth.GrowingDaysString(), delegate { boundField.Min = growingTwelfth; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, $"Select {label}"); Find.WindowStack.Add(floatMenu); } ListingStandard.LabelDouble($"Min. {label}:", boundField.Min.GrowingDaysString()); // MAX if (ListingStandard.ButtonText($"Max {label}")) { var floatMenuOptions = new List <FloatMenuOption>(); foreach (var growingTwelfth in boundField.Options) { var menuOption = new FloatMenuOption(growingTwelfth.GrowingDaysString(), delegate { boundField.Max = growingTwelfth; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, $"Select {label}"); Find.WindowStack.Add(floatMenu); } ListingStandard.LabelDouble($"Max. {label}:", boundField.Max.GrowingDaysString()); }
private void DrawBiomeTypesSelection() // TODO : factorize this function with the one from TabTerrain { DrawEntryHeader("Biome Types", backgroundColor: ColorLibrary.RoyalPurple); var biomeDefs = _gameData.DefData.BiomeDefs; // "Select" button if (ListingStandard.ButtonText("Select Biome")) { var floatMenuOptions = new List <FloatMenuOption>(); // add a dummy 'Any' fake biome type. This sets the chosen biome to null. Action actionClick = delegate { _gameData.GodModeData.Biome = null; }; // tool-tip when hovering above the 'Any' biome name on the floating menu Action mouseOverAction = delegate { var mousePos = Event.current.mousePosition; var rect = new Rect(mousePos.x, mousePos.y, DefaultElementHeight, DefaultElementHeight); TooltipHandler.TipRegion(rect, "Any Biome"); }; var menuOption = new FloatMenuOption("Any", actionClick, MenuOptionPriority.Default, mouseOverAction); floatMenuOptions.Add(menuOption); // loop through all known biomes foreach (var currentBiomeDef in biomeDefs) { // clicking on the floating menu saves the selected biome actionClick = delegate { _gameData.GodModeData.Biome = currentBiomeDef; }; // tool-tip when hovering above the biome name on the floating menu mouseOverAction = delegate { var mousePos = Event.current.mousePosition; var rect = new Rect(mousePos.x, mousePos.y, DefaultElementHeight, DefaultElementHeight); TooltipHandler.TipRegion(rect, currentBiomeDef.description); }; //create the floating menu menuOption = new FloatMenuOption(currentBiomeDef.LabelCap, actionClick, MenuOptionPriority.Default, mouseOverAction); // add it to the list of floating menu options floatMenuOptions.Add(menuOption); } // create the floating menu var floatMenu = new FloatMenu(floatMenuOptions, "Select Biome Type"); // add it to the window stack to display it Find.WindowStack.Add(floatMenu); } var currHeightBefore = ListingStandard.CurHeight; var rightLabel = _gameData.GodModeData.Biome != null ? _gameData.GodModeData.Biome.LabelCap : "Any"; ListingStandard.LabelDouble("Biome:", rightLabel); var currHeightAfter = ListingStandard.CurHeight; // display tool-tip over label if (_gameData.GodModeData.Biome != null) { var currentRect = ListingStandard.GetRect(0f); currentRect.height = currHeightAfter - currHeightBefore; if (!string.IsNullOrEmpty(_gameData.GodModeData.Biome.description)) { TooltipHandler.TipRegion(currentRect, _gameData.GodModeData.Biome.description); } } }
private void DrawFeatureSelection() { DrawEntryHeader("PLMWT2T_WorldFeatureSelection".Translate(), backgroundColor: ColorFromFilterType(typeof(TileFilterWorldFeature))); var features = _gameData.WorldData.WorldFeatures; // "Select" button if (ListingStandard.ButtonText("PLMWT2T_SelectWorldFeature".Translate())) { var floatMenuOptions = new List <FloatMenuOption>(); // add a dummy 'Any' fake feature type. This sets the chosen feature to null. Action actionClick = delegate { _gameData.UserData.WorldFeature = null; }; // tool-tip when hovering above the 'Any' feature name on the floating menu void MouseOverAction() { var mousePos = Event.current.mousePosition; var rect = new Rect(mousePos.x, mousePos.y, DefaultElementHeight, DefaultElementHeight); TooltipHandler.TipRegion(rect, "PLMWT2T_AnyWorldFeature".Translate()); } var menuOption = new FloatMenuOption("PLMW_SelectAny".Translate(), actionClick, MenuOptionPriority.Default, MouseOverAction); floatMenuOptions.Add(menuOption); // loop through all known feature foreach (var currentFeature in features) { // do not allow ocean and lakes if (currentFeature.def.rootBiomes.Count != 0) { if (currentFeature.def.rootBiomes.Contains(BiomeDefOf.Ocean) || currentFeature.def.rootBiomes.Contains(BiomeDefOf.Lake)) { continue; } } // TODO: handle other water bodies, you'll need to parse the def name as there are no other ways // see \Mods\Core\Defs\Misc\FeatureDefs\Features.xml // or another solution would be to patch the definition (e.g. OuterOcean) to have a root biome as "Ocean" (or lake or whatever water body). //if(currentFeature.def.defName contains "Ocean") // clicking on the floating menu saves the selected feature actionClick = delegate { _gameData.UserData.WorldFeature = currentFeature; }; //create the floating menu menuOption = new FloatMenuOption(currentFeature.name, actionClick); // add it to the list of floating menu options floatMenuOptions.Add(menuOption); } // create the floating menu var floatMenu = new FloatMenu(floatMenuOptions, "PLMWT2T_SelectWorldFeature".Translate()); // add it to the window stack to display it Find.WindowStack.Add(floatMenu); } var currHeightBefore = ListingStandard.CurHeight; var rightLabel = _gameData.UserData.WorldFeature != null ? _gameData.UserData.WorldFeature.name : (string)"PLMW_SelectAny".Translate(); ListingStandard.LabelDouble($"{"PLMWT2T_WorldFeature".Translate()}:", rightLabel); var currHeightAfter = ListingStandard.CurHeight; // display tool-tip over label if (_gameData.UserData.WorldFeature != null) { var currentRect = ListingStandard.GetRect(0f); currentRect.height = currHeightAfter - currHeightBefore; if (!string.IsNullOrEmpty(_gameData.UserData.WorldFeature.name)) { TooltipHandler.TipRegion(currentRect, _gameData.UserData.WorldFeature.name); } } }
private void DrawTemperatureForecast() { DrawEntryHeader("PLMWT2T_TemperatureForecast".Translate(), backgroundColor: Color.magenta); var tileId = Find.WorldSelector.selectedTile; if (!Find.WorldSelector.AnyObjectOrTileSelected || tileId < 0) { var labelRect = ListingStandard.GetRect(DefaultElementHeight); Widgets.Label(labelRect, "PLMWT2T_TempPickTileOnWorldMap".Translate()); _selectedTileIdForTemperatureForecast = -1; return; } ListingStandard.LabelDouble($"{"PLMWT2T_TempSelectedTile".Translate()}: ", tileId.ToString()); _selectedTileIdForTemperatureForecast = tileId; ListingStandard.GapLine(DefaultGapLineHeight); /* * Day / Quadrum / Year selector */ var backupAnchor = Text.Anchor; Text.Anchor = TextAnchor.MiddleLeft; // day var daySelector = ListingStandard.GetRect(30f); var dayLabelRect = daySelector.LeftPart(0.70f); var dayFieldRect = daySelector.RightPart(0.30f); Widgets.Label(dayLabelRect, $"{"PLMWT2T_QuadrumDay".Translate()} [1, 15]: "); Widgets.TextFieldNumeric(dayFieldRect, ref _dayOfQuadrum, ref _dayOfQuadrumString, 1, GenDate.DaysPerQuadrum); ListingStandard.Gap(6f); // quadrum var quadrumRect = ListingStandard.GetRect(30f); var quadrumButtonRect = quadrumRect.LeftHalf(); if (Widgets.ButtonText(quadrumButtonRect, "PLMWT2T_SelectQuadrum".Translate())) { // get all possible enumeration values for hilliness var quadrumList = Enum.GetValues(typeof(Quadrum)).Cast <Quadrum>().ToList(); var floatMenuOptions = new List <FloatMenuOption>(); foreach (var quadrum in quadrumList) { if (quadrum == Quadrum.Undefined) { continue; } var label = quadrum.Label(); var menuOption = new FloatMenuOption(label, delegate { _quadrum = quadrum; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, "PLMWT2T_SelectQuadrum".Translate()); Find.WindowStack.Add(floatMenu); } var quadrumLabelRect = quadrumRect.RightHalf(); Widgets.Label(quadrumLabelRect, _quadrum.ToString()); ListingStandard.Gap(6f); // year var yearSelector = ListingStandard.GetRect(30f); var yearLabelRect = yearSelector.LeftPart(0.7f); var yearFieldRect = yearSelector.RightPart(0.3f); Widgets.Label(yearLabelRect, $"{"ClockYear".Translate()} [{GenDate.DefaultStartingYear}, {GenDate.DefaultStartingYear + 50}]: "); Widgets.TextFieldNumeric(yearFieldRect, ref _year, ref _yearString, GenDate.DefaultStartingYear, GenDate.DefaultStartingYear + 50); // translate day, quadrum and year to ticks _dateTicks = WorldData.DateToTicks(_dayOfQuadrum - 1, _quadrum, _year); // date display var dateNowRect = ListingStandard.GetRect(30f); var labelDateLeftRect = dateNowRect.LeftPart(0.20f); Widgets.Label(labelDateLeftRect, $"{"ClockDate".Translate()}: "); var labelDateRightRect = dateNowRect.RightPart(0.60f); var dateString = GenDate.DateReadoutStringAt(_dateTicks, Find.WorldGrid.LongLatOf(_selectedTileIdForTemperatureForecast)); Widgets.Label(labelDateRightRect, dateString); Text.Anchor = backupAnchor; ListingStandard.GapLine(DefaultGapLineHeight); /* * Forecast */ if (ListingStandard.ButtonText("PLMWT2T_ViewTemperatureForecast".Translate())) { ViewTemperatureForecast(_selectedTileIdForTemperatureForecast, _dateTicks); } }
private void DrawBiomeTypesSelection() { DrawEntryHeader("PLMWTT_BiomeTypes".Translate(), false, backgroundColor: ColorFromFilterType(typeof(TileFilterBiomes))); var biomeDefs = _gameData.DefData.BiomeDefs; // "Select" button if (ListingStandard.ButtonText("PLMWTT_SelectBiome".Translate())) { var floatMenuOptions = new List <FloatMenuOption>(); // add a dummy 'Any' fake biome type. This sets the chosen biome to null. Action actionClick = delegate { _gameData.UserData.ChosenBiome = null; }; // tool-tip when hovering above the 'Any' biome name on the floating menu Action mouseOverAction = delegate { var mousePos = Event.current.mousePosition; var rect = new Rect(mousePos.x, mousePos.y, DefaultElementHeight, DefaultElementHeight); TooltipHandler.TipRegion(rect, "PLMWTT_AnyBiome".Translate()); }; var menuOption = new FloatMenuOption("PLMW_SelectAny".Translate(), actionClick, MenuOptionPriority.Default, mouseOverAction); floatMenuOptions.Add(menuOption); // loop through all known biomes foreach (var currentBiomeDef in biomeDefs) { // clicking on the floating menu saves the selected biome actionClick = delegate { _gameData.UserData.ChosenBiome = currentBiomeDef; }; // tool-tip when hovering above the biome name on the floating menu mouseOverAction = delegate { var mousePos = Event.current.mousePosition; var rect = new Rect(mousePos.x, mousePos.y, DefaultElementHeight, DefaultElementHeight); TooltipHandler.TipRegion(rect, currentBiomeDef.description); }; //create the floating menu menuOption = new FloatMenuOption(currentBiomeDef.LabelCap, actionClick, MenuOptionPriority.Default, mouseOverAction); // add it to the list of floating menu options floatMenuOptions.Add(menuOption); } // create the floating menu var floatMenu = new FloatMenu(floatMenuOptions, "PLMWTT_SelectBiomeType".Translate()); // add it to the window stack to display it Find.WindowStack.Add(floatMenu); } var currHeightBefore = ListingStandard.CurHeight; var rightLabel = _gameData.UserData.ChosenBiome != null ? _gameData.UserData.ChosenBiome.LabelCap : "PLMW_SelectAny".Translate(); ListingStandard.LabelDouble($"{"Biome".Translate()}:", rightLabel); var currHeightAfter = ListingStandard.CurHeight; // display tool-tip over label if (_gameData.UserData.ChosenBiome != null) { var currentRect = ListingStandard.GetRect(0f); currentRect.height = currHeightAfter - currHeightBefore; if (!string.IsNullOrEmpty(_gameData.UserData.ChosenBiome.description)) { TooltipHandler.TipRegion(currentRect, _gameData.UserData.ChosenBiome.description); } } }
private void DrawCoastalSelection() { DrawEntryHeader("PLMWTT_CoastalTiles".Translate(), false, backgroundColor: ColorFromFilterType(typeof(TileFilterCoastalTiles))); // coastal tiles (sea) var rect = ListingStandard.GetRect(DefaultElementHeight); var tmpCheckState = _gameData.UserData.ChosenCoastalTileState; Widgets.CheckBoxLabeledMulti(rect, $"{"PLMWTT_IsCoastalTileOcean".Translate()}:", ref tmpCheckState); _gameData.UserData.ChosenCoastalTileState = tmpCheckState; ListingStandard.Gap(6f); /* * Coastal rotation */ var filterCoastalRotation = _gameData.UserData.CoastalRotation.Use; ListingStandard.CheckboxLabeled("PLMWTT_UseCoastalRoation".Translate(), ref filterCoastalRotation, "PLMWTT_UseCoastalRoationTooltip".Translate()); _gameData.UserData.CoastalRotation.Use = filterCoastalRotation; // "Select" button if (ListingStandard.ButtonText("PLMWTT_SelectCoastRotation".Translate())) { var floatMenuOptions = new List <FloatMenuOption>(); // loop through all meaningful rotations foreach (var currentRotation in TileFilterCoastRotation.PossibleRotations) { // clicking on the floating menu saves the selected rotation void ActionClick() { _gameData.UserData.CoastalRotation.Selected = currentRotation.AsInt; } // tool-tip when hovering above the rotation name on the floating menu void MouseOverAction() { var mousePos = Event.current.mousePosition; rect = new Rect(mousePos.x, mousePos.y, DefaultElementHeight, DefaultElementHeight); TooltipHandler.TipRegion(rect, ("HasCoast" + currentRotation).Translate()); } //create the floating menu var menuOption = new FloatMenuOption(currentRotation.ToStringHuman(), ActionClick, MenuOptionPriority.Default, MouseOverAction); // add it to the list of floating menu options floatMenuOptions.Add(menuOption); } // create the floating menu var floatMenu = new FloatMenu(floatMenuOptions, "PLMWTT_SelectCoastRotation".Translate()); // add it to the window stack to display it Find.WindowStack.Add(floatMenu); } var rightLabel = _gameData.UserData.CoastalRotation.Use /*&& _gameData.UserData.CoastalRotation.Selected != Rot4.Invalid*/ ? ("HasCoast" + _gameData.UserData.CoastalRotation.Selected).Translate().CapitalizeFirst() : "PLMW_None".Translate(); ListingStandard.LabelDouble($"{"PLMWTT_SelectedCoastRotation".Translate()}:", rightLabel); /* * coastal tiles (lake) */ ListingStandard.Gap(6f); rect = ListingStandard.GetRect(DefaultElementHeight); TooltipHandler.TipRegion(rect, "PLMWTT_IsCoastalTileLakeTooltip".Translate()); tmpCheckState = _gameData.UserData.ChosenCoastalLakeTileState; Widgets.CheckBoxLabeledMulti(rect, $"{"PLMWTT_IsCoastalTileLake".Translate()}:", ref tmpCheckState); _gameData.UserData.ChosenCoastalLakeTileState = tmpCheckState; }
private void DrawSelectedTileInfo() { DrawEntryHeader("PLMWFTIL_SelectedTileInfo".Translate(), backgroundColor: Color.yellow); var matchingTiles = PrepareLanding.Instance.TileFilter.AllMatchingTiles; if (_selectedTileIndex < 0 || _selectedTileIndex >= matchingTiles.Count) { return; } ListingStandard.verticalSpacing = 0f; var selTileId = matchingTiles[_selectedTileIndex]; var selTile = Find.World.grid[selTileId]; ListingStandard.Label(selTile.biome.description); ListingStandard.Gap(8f); ListingStandard.GapLine(); if (!selTile.biome.implemented) { ListingStandard.Label(selTile.biome.LabelCap + " " + "BiomeNotImplemented".Translate()); } ListingStandard.LabelDouble("Terrain".Translate(), selTile.hilliness.GetLabelCap()); if (selTile.Roads != null) { ListingStandard.LabelDouble("Road".Translate(), (from roadlink in selTile.Roads select roadlink.road.label).Distinct().ToCommaList(true).CapitalizeFirst()); } if (selTile.Rivers != null) { ListingStandard.LabelDouble("River".Translate(), selTile.Rivers.MaxBy(riverlink => riverlink.river.degradeThreshold).river.LabelCap); } if (!Find.World.Impassable(selTileId)) { var stringBuilder = new StringBuilder(); var tile = selTileId; const bool perceivedStatic = false; var explanation = stringBuilder; var rightLabel = (WorldPathGrid.CalculatedMovementDifficultyAt(tile, perceivedStatic, null, explanation) * Find.WorldGrid.GetRoadMovementDifficultyMultiplier(selTileId, -1, stringBuilder)).ToString("0.#"); if (WorldPathGrid.WillWinterEverAffectMovementDifficulty(selTileId) && WorldPathGrid.GetCurrentWinterMovementDifficultyOffset(selTileId, null) < 2f) { stringBuilder.AppendLine(); stringBuilder.AppendLine(); stringBuilder.Append(" ("); stringBuilder.Append("MovementDifficultyOffsetInWinter".Translate("+" + 2f.ToString("0.#"))); stringBuilder.Append(")"); } ListingStandard.LabelDouble("MovementDifficulty".Translate(), rightLabel, stringBuilder.ToString()); } if (selTile.biome.canBuildBase) { ListingStandard.LabelDouble("StoneTypesHere".Translate(), (from rt in Find.World.NaturalRockTypesIn(selTileId) select rt.label).ToCommaList(true).CapitalizeFirst()); } ListingStandard.LabelDouble("Elevation".Translate(), selTile.elevation.ToString("F0") + "m"); ListingStandard.GapLine(); ListingStandard.LabelDouble("AvgTemp".Translate(), GenTemperature.GetAverageTemperatureLabel(selTileId)); ListingStandard.LabelDouble("OutdoorGrowingPeriod".Translate(), Zone_Growing.GrowingQuadrumsDescription(selTileId)); ListingStandard.LabelDouble("Rainfall".Translate(), selTile.rainfall.ToString("F0") + "mm"); if (selTile.biome.foragedFood != null && selTile.biome.forageability > 0f) { ListingStandard.LabelDouble("Forageability".Translate(), selTile.biome.forageability.ToStringPercent() + " (" + selTile.biome.foragedFood.label + ")"); } else { ListingStandard.LabelDouble("Forageability".Translate(), "0%"); } ListingStandard.LabelDouble("AnimalsCanGrazeNow".Translate(), (!VirtualPlantsUtility.EnvironmentAllowsEatingVirtualPlantsNowAt(selTileId)) ? "No".Translate() : "Yes".Translate()); ListingStandard.GapLine(); ListingStandard.LabelDouble("AverageDiseaseFrequency".Translate(), $"{(60f / selTile.biome.diseaseMtbDays):F1} {"PerYear".Translate()}"); ListingStandard.LabelDouble("TimeZone".Translate(), GenDate.TimeZoneAt(Find.WorldGrid.LongLatOf(selTileId).x).ToStringWithSign()); var stringBuilder2 = new StringBuilder(); var rot = Find.World.CoastDirectionAt(selTileId); if (rot.IsValid) { stringBuilder2.AppendWithComma(("HasCoast" + rot).Translate()); } if (Find.World.HasCaves(selTileId)) { stringBuilder2.AppendWithComma("HasCaves".Translate()); } if (stringBuilder2.Length > 0) { ListingStandard.LabelDouble("SpecialFeatures".Translate(), stringBuilder2.ToString().CapitalizeFirst()); } if (Prefs.DevMode) { ListingStandard.LabelDouble("Debug world tile ID", selTileId.ToString()); } }
private void DrawForageability() { DrawEntryHeader($"{"Forageability".Translate()} (%)", false, backgroundColor: ColorFromFilterType(typeof(TileFilterForageability))); DrawUsableMinMaxNumericField(_gameData.UserData.Forageability, "Forageability".Translate()); ListingStandard.GapLine(); // "Select" button if (ListingStandard.ButtonText("Select Forageable Food")) { var floatMenuOptions = new List <FloatMenuOption>(); // add a dummy 'Any' fake biome type. This sets the chosen biome to null. Action actionClick = delegate { _gameData.UserData.ForagedFood = null; }; // tool-tip when hovering above the 'Any' biome name on the floating menu Action mouseOverAction = delegate { var mousePos = Event.current.mousePosition; var rect = new Rect(mousePos.x, mousePos.y, DefaultElementHeight, DefaultElementHeight); TooltipHandler.TipRegion(rect, "Any Food"); }; var menuOption = new FloatMenuOption("PLMW_SelectAny".Translate(), actionClick, MenuOptionPriority.Default, mouseOverAction); floatMenuOptions.Add(menuOption); var foragedFoods = _gameData.DefData.ForagedFoodsPerBiome.Values.Where(x => x != null).Distinct().ToList(); // loop through all known biomes foreach (var foragedFood in foragedFoods) { Log.Message($"[PL] foragedFood: label: {foragedFood.label}; labelCap: {foragedFood.LabelCap}"); // clicking on the floating menu saves the selected biome actionClick = delegate { _gameData.UserData.ForagedFood = foragedFood; }; // tool-tip when hovering above the biome name on the floating menu mouseOverAction = delegate { var mousePos = Event.current.mousePosition; var rect = new Rect(mousePos.x, mousePos.y, DefaultElementHeight, DefaultElementHeight); TooltipHandler.TipRegion(rect, foragedFood.description); }; //create the floating menu menuOption = new FloatMenuOption(foragedFood.LabelCap, actionClick, MenuOptionPriority.Default, mouseOverAction); // add it to the list of floating menu options floatMenuOptions.Add(menuOption); } // create the floating menu var floatMenu = new FloatMenu(floatMenuOptions, "Select Forageable Food"); // add it to the window stack to display it Find.WindowStack.Add(floatMenu); } var currHeightBefore = ListingStandard.CurHeight; var rightLabel = _gameData.UserData.ForagedFood != null ? _gameData.UserData.ForagedFood.LabelCap : "Select Any"; ListingStandard.LabelDouble("Forageable Food: ", rightLabel); var currHeightAfter = ListingStandard.CurHeight; // display tool-tip over label if (_gameData.UserData.ForagedFood != null) { var currentRect = ListingStandard.GetRect(0f); currentRect.height = currHeightAfter - currHeightBefore; if (!string.IsNullOrEmpty(_gameData.UserData.ForagedFood.description)) { TooltipHandler.TipRegion(currentRect, _gameData.UserData.ForagedFood.description); } } }
protected void DrawSelectedTileInfo() { DrawEntryHeader("Selected Tile Info", backgroundColor: Color.yellow); var matchingTiles = PrepareLanding.Instance.TileFilter.AllMatchingTiles; if (_selectedTileIndex < 0 || _selectedTileIndex >= matchingTiles.Count) { return; } ListingStandard.verticalSpacing = 0f; var selTileId = matchingTiles[_selectedTileIndex]; var selTile = Find.World.grid[selTileId]; ListingStandard.Label(selTile.biome.LabelCap); var y = Find.WorldGrid.LongLatOf(selTileId).y; ListingStandard.Label(selTile.biome.description); ListingStandard.Gap(8f); ListingStandard.GapLine(); if (!selTile.biome.implemented) { ListingStandard.Label(selTile.biome.LabelCap + " " + "BiomeNotImplemented".Translate()); } ListingStandard.LabelDouble("Terrain".Translate(), selTile.hilliness.GetLabelCap()); if (selTile.VisibleRoads != null) { ListingStandard.LabelDouble("Road".Translate(), GenText.ToCommaList((from roadlink in selTile.VisibleRoads select roadlink.road.label).Distinct()).CapitalizeFirst()); } if (selTile.VisibleRivers != null) { ListingStandard.LabelDouble("River".Translate(), selTile.VisibleRivers.MaxBy((riverlink) => riverlink.river.degradeThreshold).river.LabelCap); } if (!Find.World.Impassable(selTileId)) { const int num = 2500; var numTicks = Mathf.Min(num + WorldPathGrid.CalculatedCostAt(selTileId, false), 120000); ListingStandard.LabelDouble("MovementTimeNow".Translate(), numTicks.ToStringTicksToPeriod()); var numTicks2 = Mathf.Min(num + WorldPathGrid.CalculatedCostAt(selTileId, false, Season.Summer.GetMiddleYearPct(y)), 120000); ListingStandard.LabelDouble("MovementTimeSummer".Translate(), numTicks2.ToStringTicksToPeriod()); var numTicks3 = Mathf.Min(num + WorldPathGrid.CalculatedCostAt(selTileId, false, Season.Winter.GetMiddleYearPct(y)), 120000); ListingStandard.LabelDouble("MovementTimeWinter".Translate(), numTicks3.ToStringTicksToPeriod()); } if (selTile.biome.canBuildBase) { ListingStandard.LabelDouble("StoneTypesHere".Translate(), GenText.ToCommaList(from rt in Find.World.NaturalRockTypesIn(selTileId) select rt.label).CapitalizeFirst()); } ListingStandard.LabelDouble("Elevation".Translate(), selTile.elevation.ToString("F0") + "m"); ListingStandard.GapLine(); ListingStandard.LabelDouble("AvgTemp".Translate(), selTile.temperature.ToStringTemperature()); var celsiusTemp = GenTemperature.AverageTemperatureAtTileForTwelfth(selTileId, Season.Winter.GetMiddleTwelfth(y)); ListingStandard.LabelDouble("AvgWinterTemp".Translate(), celsiusTemp.ToStringTemperature()); var celsiusTemp2 = GenTemperature.AverageTemperatureAtTileForTwelfth(selTileId, Season.Summer.GetMiddleTwelfth(y)); ListingStandard.LabelDouble("AvgSummerTemp".Translate(), celsiusTemp2.ToStringTemperature()); ListingStandard.LabelDouble("OutdoorGrowingPeriod".Translate(), Zone_Growing.GrowingQuadrumsDescription(selTileId)); ListingStandard.LabelDouble("Rainfall".Translate(), selTile.rainfall.ToString("F0") + "mm"); ListingStandard.LabelDouble("AnimalsCanGrazeNow".Translate(), (!VirtualPlantsUtility.EnvironmentAllowsEatingVirtualPlantsNowAt(selTileId)) ? "No".Translate() : "Yes".Translate()); ListingStandard.GapLine(); ListingStandard.LabelDouble("TimeZone".Translate(), GenDate.TimeZoneAt(Find.WorldGrid.LongLatOf(selTileId).x).ToStringWithSign()); var rot = Find.World.CoastDirectionAt(selTileId); if (rot.IsValid) { ListingStandard.LabelDouble(string.Empty, ("HasCoast" + rot).Translate()); } if (Prefs.DevMode) { ListingStandard.LabelDouble("Debug world tile ID", selTileId.ToString()); } }
protected void DrawUsableMinMaxFromRestrictedListItem <T>(MinMaxFromRestrictedListItem <T> item, string label, Func <T, string> itemToStringFunc = null) where T : struct, IConvertible { var tmpCheckedOn = item.Use; var textMin = "PLINT_UsableMinMaxNumFieldMin".Translate(); var textMax = "PLINT_UsableMinMaxNumFieldMax".Translate(); // Use ListingStandard.Gap(); ListingStandard.CheckboxLabeled(label, ref tmpCheckedOn, $"{"PLINT_UsableMinMaxNumFieldUse".Translate()} {textMin}/{textMax} {label}"); item.Use = tmpCheckedOn; // MIN if (ListingStandard.ButtonText($"{"PLINT_UsableMinMaxNumFieldMin".Translate()} {label}")) { var floatMenuOptions = new List <FloatMenuOption>(); foreach (var itemOption in item.Options) { var menuOptionString = itemToStringFunc == null ? itemOption.ToString(CultureInfo.InvariantCulture) : itemToStringFunc(itemOption); var menuOption = new FloatMenuOption(menuOptionString, delegate { item.Min = itemOption; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, $"{"PLINT_MinMaxFromRestrictedListItemSelect".Translate()} {label}"); Find.WindowStack.Add(floatMenu); } var minValueString = itemToStringFunc == null ? item.Min.ToString(CultureInfo.InvariantCulture) : itemToStringFunc(item.Min); ListingStandard.LabelDouble($"{"PLINT_UsableMinMaxNumFieldMin".Translate()} {label}:", minValueString); // MAX if (ListingStandard.ButtonText($"{"PLINT_UsableMinMaxNumFieldMax".Translate()} {label}")) { var floatMenuOptions = new List <FloatMenuOption>(); foreach (var itemOption in item.Options) { var menuOptionString = itemToStringFunc == null ? itemOption.ToString(CultureInfo.InvariantCulture) : itemToStringFunc(itemOption); var menuOption = new FloatMenuOption(menuOptionString, delegate { item.Max = itemOption; }); floatMenuOptions.Add(menuOption); } var floatMenu = new FloatMenu(floatMenuOptions, $"{"PLINT_MinMaxFromRestrictedListItemSelect".Translate()} {label}"); Find.WindowStack.Add(floatMenu); } var maxValueString = itemToStringFunc == null ? item.Min.ToString(CultureInfo.InvariantCulture) : itemToStringFunc(item.Max); ListingStandard.LabelDouble($"{"PLINT_UsableMinMaxNumFieldMax".Translate()} {label}:", maxValueString); }