示例#1
0
 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);
     }
 }
示例#2
0
        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);
        }