public void ReferenceDefCheck(ref SRTS_DefProperties props) { if (props.referencedDef is null) { SRTS_DefProperties propsRef = props; props.referencedDef = DefDatabase <ThingDef> .GetNamed(settings.defProperties.FirstOrDefault(x => x.Value == propsRef).Key); } }
public override void DoSettingsWindowContents(Rect inRect) { this.CheckDictionaryValid(); var font = Text.Font; Text.Font = GameFont.Tiny; string credit = "Settings by Smash Phil"; Widgets.Label(new Rect(inRect.width - (6 * credit.Count()), inRect.height + 64f, inRect.width, inRect.height), credit); Text.Font = font; Listing_Standard listing_Standard = new Listing_Standard(); Rect settingsCategory = new Rect(inRect.width / 2 - (inRect.width / 12), inRect.y, inRect.width / 6, inRect.height); Rect groupSRTS = new Rect(settingsCategory.x - settingsCategory.width, settingsCategory.y, settingsCategory.width, settingsCategory.height); if (Prefs.DevMode) { Rect emergencyReset = new Rect(inRect.width - settingsCategory.width, settingsCategory.y, settingsCategory.width, settingsCategory.height); listing_Standard.Begin(emergencyReset); if (listing_Standard.ButtonText("DevMode Reset")) { this.settings.defProperties.Clear(); this.CheckDictionaryValid(); this.ResetMainSettings(); Log.Message("========================== \n DevMode Settings Reset:"); foreach (KeyValuePair <string, SRTS_DefProperties> pair in settings.defProperties) { Log.Message("KVP: " + pair.Key + " : " + pair.Value.referencedDef.defName); } Log.Message("=========================="); } listing_Standard.End(); } listing_Standard.Begin(groupSRTS); if (currentPage == SRTS.SettingsCategory.Settings) { listing_Standard.ButtonText(string.Empty); } else if (currentPage == SRTS.SettingsCategory.Stats || currentPage == SRTS.SettingsCategory.Research) { if (listing_Standard.ButtonText(currentKey)) { List <FloatMenuOption> options = new List <FloatMenuOption>(); foreach (string s in settings.defProperties.Keys) { options.Add(new FloatMenuOption(s, () => currentKey = s, MenuOptionPriority.Default, null, null, 0f, null, null)); } if (!options.Any()) { options.Add(new FloatMenuOption("NoneBrackets".Translate(), null, MenuOptionPriority.Default, null, null, 0f, null, null)); } Find.WindowStack.Add(new FloatMenu(options)); } } listing_Standard.End(); listing_Standard.Begin(settingsCategory); if (listing_Standard.ButtonText(EnumToString(currentPage))) { FloatMenuOption op1 = new FloatMenuOption("MainSettings".Translate(), () => currentPage = SRTS.SettingsCategory.Settings, MenuOptionPriority.Default, null, null, 0f, null, null); FloatMenuOption op2 = new FloatMenuOption("DefSettings".Translate(), () => currentPage = SRTS.SettingsCategory.Stats, MenuOptionPriority.Default, null, null, 0f, null, null); FloatMenuOption op3 = new FloatMenuOption("ResearchSettings".Translate(), () => currentPage = SRTS.SettingsCategory.Research, MenuOptionPriority.Default, null, null, 0f, null, null); Find.WindowStack.Add(new FloatMenu(new List <FloatMenuOption>() { op1, op2, op3 })); } listing_Standard.End(); props = settings.defProperties[currentKey]; if (props is null) { this.ResetMainSettings(); settings.defProperties.Clear(); this.CheckDictionaryValid(); props = settings.defProperties[currentKey]; } this.ReferenceDefCheck(ref props); Rect propsReset = new Rect(settingsCategory.x + settingsCategory.width, settingsCategory.y, settingsCategory.width, settingsCategory.height); listing_Standard.Begin(propsReset); if (listing_Standard.ButtonText("ResetDefault".Translate(), "ResetDefaultTooltip".Translate())) { if (currentPage == SRTS.SettingsCategory.Settings) { this.ResetMainSettings(); } else if (currentPage == SRTS.SettingsCategory.Stats || currentPage == SRTS.SettingsCategory.Research) { FloatMenuOption op1 = new FloatMenuOption("ResetThisSRTS".Translate(), () => props.ResetToDefaultValues(), MenuOptionPriority.Default, null, null, 0f, null, null); FloatMenuOption op2 = new FloatMenuOption("ResetAll".Translate(), delegate() { for (int i = 0; i < settings.defProperties.Count; i++) { SRTS_DefProperties p = settings.defProperties.ElementAt(i).Value; this.ReferenceDefCheck(ref p); p.ResetToDefaultValues(); } }, MenuOptionPriority.Default, null, null, 0f, null, null); Find.WindowStack.Add(new FloatMenu(new List <FloatMenuOption>() { op1, op2 })); } } listing_Standard.End(); Rect group2 = new Rect(inRect.x, settingsCategory.y + 36f, inRect.width / 3, inRect.height); if (currentPage == SRTS.SettingsCategory.Stats) { listing_Standard.Begin(group2); listing_Standard.Settings_Header("SRTSSettings".Translate(), DialogSettings.highlightColor); listing_Standard.Settings_SliderLabeled("FlightSpeed".Translate(), string.Empty, ref props.flightSpeed, 0.15f, 50, 2, 2, 9999f, "Instant".Translate()); listing_Standard.Settings_SliderLabeled("FuelEfficiency".Translate(), "FuelEfficiencySymbol".Translate(), ref props.fuelPerTile, 1, 6f); if (settings.passengerLimits) { int min = props.minPassengers; int max = props.maxPassengers; listing_Standard.Settings_SliderLabeled("MinPassengers".Translate(), string.Empty, ref props.minPassengers, 1, 100); listing_Standard.Settings_SliderLabeled("MaxPassengers".Translate(), string.Empty, ref props.maxPassengers, 1, 100, 999, "\u221E"); if (props.minPassengers > props.maxPassengers && min != props.minPassengers) { props.maxPassengers = props.minPassengers; } if (props.maxPassengers < props.minPassengers && max != props.maxPassengers) { props.minPassengers = props.maxPassengers; } } else { listing_Standard.Gap(54f); } int mass = (int)props.massCapacity; listing_Standard.Settings_IntegerBox("CargoCapacity".Translate(), ref mass, 100f, 50f, 0, int.MaxValue); props.massCapacity = (float)mass; listing_Standard.Gap(12f); if (props.BombCapable) { listing_Standard.Gap(24f); listing_Standard.Settings_Header("BombSettings".Translate(), DialogSettings.highlightColor); listing_Standard.Settings_SliderLabeled("BombSpeed".Translate(), string.Empty, ref props.bombingSpeed, 0.5f, 2.5f, 10f, 1); listing_Standard.Settings_SliderLabeled("RadiusDrop".Translate(), "CellsEndValue".Translate(), ref props.radiusDrop, 1, 10); listing_Standard.Settings_SliderLabeled("DistanceBetweenDrops".Translate(), "CellsEndValue".Translate(), ref props.distanceBetweenDrops, 0.2f, 11, 1, 1, 999, "SingleDrop".Translate()); listing_Standard.Settings_Header("BombCountSRTS".Translate(), DialogSettings.highlightColor, GameFont.Tiny, TextAnchor.MiddleLeft); listing_Standard.Settings_SliderLabeled("PreciseBombing".Translate(), string.Empty, ref props.precisionBombingNumBombs, 1, 10); listing_Standard.Settings_SliderLabeled("CarpetBombing".Translate(), string.Empty, ref props.numberBombs, 1, 40); } listing_Standard.End(); if (SRTSHelper.SOS2ModLoaded) { Rect sos2Rect = new Rect(inRect.width - (inRect.width / 4), inRect.height - (inRect.height / 8), inRect.width / 4, inRect.height / 4); listing_Standard.Begin(sos2Rect); listing_Standard.Settings_Header("SOS2Compatibility".Translate(), DialogSettings.highlightColor, GameFont.Small, TextAnchor.MiddleLeft); listing_Standard.CheckboxLabeled("SpaceFaring".Translate(), ref props.spaceFaring); listing_Standard.CheckboxLabeled("ShuttleBayLanding".Translate(), ref props.shuttleBayLanding); listing_Standard.End(); } } else if (currentPage == SRTS.SettingsCategory.Research) { listing_Standard.Begin(group2); listing_Standard.Settings_Header("ResearchDef".Translate(props.RequiredResearch[0].LabelCap), DialogSettings.highlightColor); int rPoints = (int)props.researchPoints; listing_Standard.Settings_IntegerBox("SRTSResearch".Translate(), ref rPoints, 100f, 50f, 0, int.MaxValue); props.researchPoints = (float)rPoints; listing_Standard.Gap(24f); listing_Standard.Settings_Header("SRTSResearchRequirements".Translate(), DialogSettings.highlightColor, GameFont.Small); foreach (ResearchProjectDef proj in props.requiredResearch) { listing_Standard.Settings_Header(proj.LabelCap, Color.clear, GameFont.Small); } for (int i = props.CustomResearch.Count - 1; i >= 0; i--) { ResearchProjectDef proj = props.customResearchRequirements[i]; if (listing_Standard.Settings_ButtonLabeled(proj.LabelCap, "RemoveResearch".Translate(), Color.cyan, 60f, false, true)) { props.RemoveCustomResearch(proj); } listing_Standard.Gap(8f); } if (listing_Standard.Settings_Button("AddItemSRTS".Translate(), new Rect(group2.width - 60f, group2.y + 24f, 60f, 20f), Color.white, true, true)) { Find.WindowStack.Add(new Dialog_ResearchChange()); } listing_Standard.Gap(24f); listing_Standard.End(); } else if (currentPage == SRTS.SettingsCategory.Settings) { if (!checkValidityBombs) { ///<summary>Only run once, ensure that removed ThingDefs do not show defNames inside inner list.</summary> for (int i = mod.settings.allowedBombs.Count - 1; i >= 0; i--) { string s = mod.settings.allowedBombs[i]; if (mod.settings.allowedBombs.Contains(s) && DefDatabase <ThingDef> .GetNamedSilentFail(s) is null) { mod.settings.allowedBombs.Remove(s); } if (mod.settings.disallowedBombs.Contains(s) && DefDatabase <ThingDef> .GetNamedSilentFail(s) is null) { mod.settings.disallowedBombs.Remove(s); } } checkValidityBombs = true; } listing_Standard.Begin(group2); listing_Standard.CheckboxLabeled("PassengerLimit".Translate(), ref settings.passengerLimits, "PassengerLimitTooltip".Translate()); listing_Standard.CheckboxLabeled("DisplayHomeItems".Translate(), ref settings.displayHomeItems, "DisplayHomeItemsTooltip".Translate()); listing_Standard.CheckboxLabeled("DynamicWorldObjectSRTS".Translate(), ref settings.dynamicWorldDrawingSRTS, "DynamicWorldObjectSRTSTooltip".Translate()); listing_Standard.Gap(24f); listing_Standard.CheckboxLabeled("ExpandBombPoints".Translate(), ref settings.expandBombPoints, "ExpandBombPointsTooltip".Translate()); listing_Standard.End(); int numBoxesBefore = 4; float bufferFromGroup2 = 24f + (24 * numBoxesBefore); Rect bombLabel = new Rect(group2.x, group2.y + bufferFromGroup2, group2.width, group2.height / 3); listing_Standard.Begin(bombLabel); listing_Standard.Settings_Header("AllowedBombs".Translate(), DialogSettings.highlightColor, GameFont.Small); float buttonWidth = 60f; if (listing_Standard.Settings_Button("ChangeItemSRTS".Translate(), new Rect(group2.width - buttonWidth, 1f, buttonWidth, 20f), Color.white, true, true)) { Find.WindowStack.Add(new Dialog_AllowedBombs()); } listing_Standard.End(); Rect group3 = new Rect(group2.x, bombLabel.y + 24f, group2.width, group2.height / 3); Rect viewRect = new Rect(group3.x, group3.y, group2.width - 24f, group3.height * ((float)mod.settings.allowedBombs.Count / 6f) + 24f); Widgets.BeginScrollView(group3, ref scrollPosition, viewRect, true); listing_Standard.Begin(viewRect); foreach (string s in mod.settings.allowedBombs) { listing_Standard.Settings_Header(s, Color.clear, GameFont.Small); } listing_Standard.End(); Widgets.EndScrollView(); Rect transportGroupRect = new Rect(inRect.width - inRect.width / 3, group2.y, inRect.width / 3, group2.height); listing_Standard.Begin(transportGroupRect); listing_Standard.Settings_Header("SRTSBoardingOptions".Translate(), DialogSettings.highlightColor, GameFont.Small); listing_Standard.CheckboxLabeled("AllowDownedSRTS".Translate(), ref settings.allowEvenIfDowned); listing_Standard.CheckboxLabeled("AllowUnsecurePrisonerSRTS".Translate(), ref settings.allowEvenIfPrisonerUnsecured); listing_Standard.CheckboxLabeled("AllowCapturablePawnSRTS".Translate(), ref settings.allowCapturablePawns); listing_Standard.End(); } if (currentPage == SRTS.SettingsCategory.Stats || currentPage == SRTS.SettingsCategory.Research) { GraphicRequest graphicRequest = new GraphicRequest(props.referencedDef.graphicData.graphicClass, props.referencedDef.graphicData.texPath, ShaderTypeDefOf.Cutout.Shader, props.referencedDef.graphic.drawSize, Color.white, Color.white, props.referencedDef.graphicData, 0, null); string texPath = props.referencedDef.graphicData.texPath; if (graphicRequest.graphicClass == typeof(Graphic_Multi)) { texPath += "_north"; } Rect pictureRect = new Rect(inRect.width / 2, inRect.height / 3, 300f, 300f); GUI.DrawTexture(pictureRect, ContentFinder <Texture2D> .Get(texPath, true)); DialogSettings.Draw_Label(new Rect(pictureRect.x, inRect.height / 3 - 60f, 300f, 100f), props.referencedDef.label.Replace("SRTS ", ""), Color.clear, Color.white, GameFont.Medium, TextAnchor.MiddleCenter); var valueFont = Text.Font; var alignment = Text.Anchor; Text.Font = GameFont.Tiny; Text.Anchor = TextAnchor.MiddleCenter; Widgets.Label(new Rect(inRect.width - settingsCategory.width, settingsCategory.y + (Prefs.DevMode ? 30f : 0f), settingsCategory.width, 30f), props.defaultValues ? "DefaultValues".Translate() : "CustomValues".Translate()); Text.Font = valueFont; Text.Anchor = alignment; } if (props.defaultValues && !props.IsDefault) { props.defaultValues = false; } base.DoSettingsWindowContents(inRect); }