Esempio n. 1
0
        /// <summary>
        ///     Initialize weather specific settings
        /// </summary>
        /// <param name="settings">The settings instance to use</param>
        /// <param name="biome">The biome we're working with</param>
        /// <param name="key">The key to use</param>
        /// <param name="weathers">The weathers to iterate through</param>
        /// <param name="visibilityFunc">Our base visibility function</param>
        private void InitWeatherSettings(ModSettingsPack settings, BiomeDef biome, string key,
                                         List <WeatherDef> weathers,
                                         SettingHandle.ShouldDisplay visibilityFunc)
        {
            // Per-biome rain and snowfall multipliers
            foreach (var weather in weathers)
            {
                weatherCommonalities[weather] = new WeatherData(settings, biome, weather, visibilityFunc);
            }

            SpacerDrawer.GenerateSpacer("ColdDesertNights_WeatherMiscSettings".Translate(), settings, visibilityFunc);

            // If we're allowed to bypass the rain limits
            settingIgnoreRainLimit = settings.GetHandle(
                $"ignore_rain_limit_{key}",
                "    " + "ColdDesertNights_IgnoreRainLimit".Translate(),
                "ColdDesertNights_IgnoreRainLimit_Desc".Translate(), false);

            // Force weather into the given range
            minWeatherTemperature = settings.GetHandle(
                $"weather_temp_min_{key}",
                "    " + "ColdDesertNights_WeatherTempMin".Translate(),
                "ColdDesertNights_WeatherTempMin_Desc".Translate(), -999f);
            maxWeatherTemperature = settings.GetHandle(
                $"weather_temp_max_{key}",
                "    " + "ColdDesertNights_WeatherTempMax".Translate(),
                "ColdDesertNights_WeatherTempMax_Desc".Translate(), 999f);

            // Set our visibility predicates:
            settingIgnoreRainLimit.VisibilityPredicate        =
                minWeatherTemperature.VisibilityPredicate     =
                    maxWeatherTemperature.VisibilityPredicate =
                        visibilityFunc;
        }
Esempio n. 2
0
        /// <summary>
        ///     Initializes the weather data from the given <see cref="ModSettingsPack" /> settings
        ///     and <see cref="WeatherDef" />, creating our settings in the process.
        /// </summary>
        /// <param name="settings">The setting pack to use</param>
        /// <param name="biome">The biome to use</param>
        /// <param name="weather">The weather to base this off of</param>
        /// <param name="visibilityFunc">Function which returns if we should display this now</param>
        public WeatherData(ModSettingsPack settings, BiomeDef biome, WeatherDef weather,
                           SettingHandle.ShouldDisplay visibilityFunc)
        {
            this.weather = weather;
            var curCommonality =
                biome.baseWeatherCommonalities.FirstOrDefault(wc => wc.weather == weather)?.commonality ?? 0f;

            // Init our settings...
            SpacerDrawer.GenerateSpacer(GenText.ToTitleCaseSmart(weather.label), settings, visibilityFunc);

            commonality = settings.GetHandle($"weather_{biome.defName}_{weather.defName}",
                                             "    " + "ColdDesertNights_BiomeWeather".Translate(),
                                             "ColdDesertNights_BiomeWeather_Desc".Translate(curCommonality), curCommonality,
                                             Validators.FloatRangeValidator(0f, float.MaxValue));

            allowRepeating = settings.GetHandle($"weather_{biome.defName}_{weather.defName}_repeating",
                                                "    " + "ColdDesertNights_BiomeWeatherRepeating".Translate(),
                                                "ColdDesertNights_BiomeWeatherRepeating_Desc".Translate(
                                                    (weather.repeatable ? "ColdDesertNights_Checked" : "ColdDesertNights_Unchecked").Translate()),
                                                weather.repeatable);

            allowEarly = settings.GetHandle($"weather_{biome.defName}_{weather.defName}_early",
                                            "    " + "ColdDesertNights_BiomeWeatherEarly".Translate(),
                                            "ColdDesertNights_BiomeWeatherEarly_Desc".Translate(
                                                (Favorability.Neutral <= weather.favorability
                        ? "ColdDesertNights_Checked"
                        : "ColdDesertNights_Unchecked").Translate()),
                                            Favorability.Neutral <= weather.favorability);

            // And set our visibility predicates...
            commonality.VisibilityPredicate
                    = allowRepeating.VisibilityPredicate
                    = allowEarly.VisibilityPredicate
                    = visibilityFunc;
        }
        /// <summary>
        /// Generates a randomly named settings spacer
        /// </summary>
        /// <param name="label">The label to use</param>
        /// <param name="settings">The settings handle to use</param>
        /// <param name="visibilityFunc">The visibility predicate</param>
        public static void GenerateSpacer(string label, ModSettingsPack settings, SettingHandle.ShouldDisplay visibilityFunc)
        {
            var spacer = settings.GetHandle <bool>("s" + spacers++, label,
                                                   string.Empty);

            spacer.CustomDrawer        = r => Draw(label, r);
            spacer.Unsaved             = true;
            spacer.VisibilityPredicate = visibilityFunc;
        }
        internal void PrepareSettingsHandles(ModSettingsPack pack)
        {
            GlobalHotkeysSetting         = pack.GetHandle("globalHotkeys", "setting_globalHotkeys_label".Translate(), "setting_globalHotkeys_desc".Translate(), true);
            ContextOverlaySetting        = pack.GetHandle("contextOverlay", "setting_contextOverlay_label".Translate(), "setting_contextOverlay_desc".Translate(), true);
            ContextWatermarkSetting      = pack.GetHandle("contextWatermark", "setting_contextWatermark_label".Translate(), "setting_contextWatermark_desc".Translate(), true);
            ReplaceIconsSetting          = pack.GetHandle("replaceIcons", "setting_replaceIcons_label".Translate(), "setting_replaceIcons_desc".Translate(), false);
            HaulWorktypeSetting          = pack.GetHandle("haulUrgentlyWorktype", "setting_haulUrgentlyWorktype_label".Translate(), "setting_haulUrgentlyWorktype_desc".Translate(), true);
            FinishOffWorktypeSetting     = pack.GetHandle("finishOffWorktype", "setting_finishOffWorktype_label".Translate(), "setting_finishOffWorktype_desc".Translate(), false);
            ExtendedContextActionSetting = pack.GetHandle("extendedContextActionKey", "setting_extendedContextHotkey_label".Translate(), "setting_extendedContextHotkey_desc".Translate(), true);
            ReverseDesignatorPickSetting = pack.GetHandle("reverseDesignatorPick", "setting_reverseDesignatorPick_label".Translate(), "setting_reverseDesignatorPick_desc".Translate(), true);
            FinishOffUnforbidsSetting    = pack.GetHandle("finishOffUnforbids", "setting_finishOffUnforbids_label".Translate(), "setting_finishOffUnforbids_desc".Translate(), true);

            PartyHuntSetting = pack.GetHandle("partyHunt", "setting_partyHunt_label".Translate(), "setting_partyHunt_desc".Translate(), true);

            StorageSpaceAlertSetting = pack.GetHandle("storageSpaceAlert", "setting_storageSpaceAlert_label".Translate(), "setting_storageSpaceAlert_desc".Translate(), true);

            SelectionLimitSetting = pack.GetHandle("selectionLimit", "setting_selectionLimit_label".Translate(), "setting_selectionLimit_desc".Translate(), 200, Validators.IntRangeValidator(50, 100000));
            SelectionLimitSetting.SpinnerIncrement = 50;
            // designators
            MakeSettingsCategoryToggle(pack, "setting_showToolToggles_label", () => expandToolSettings = !expandToolSettings);
            foreach (var designatorDef in DefDatabase <ThingDesignatorDef> .AllDefs)
            {
                var handleName = DesignatorHandleNamePrefix + designatorDef.defName;
                var handle     = pack.GetHandle(handleName, "setting_showTool_label".Translate(designatorDef.label), null, true);
                handle.VisibilityPredicate          = () => expandToolSettings;
                designatorToggleHandles[handleName] = handle;
            }
            // context menus
            MakeSettingsCategoryToggle(pack, "setting_showProviderToggles_label", () => expandProviderSettings = !expandProviderSettings);
            SettingHandle.ShouldDisplay menuEntryHandleVisibility = () => expandProviderSettings;
            foreach (var handle in DesignatorContextMenuController.RegisterMenuEntryHandles(pack))
            {
                handle.VisibilityPredicate = menuEntryHandleVisibility;
            }
            // reverse designators
            MakeSettingsCategoryToggle(pack, "setting_showReverseToggles_label", () => expandReverseToolSettings = !expandReverseToolSettings);
            foreach (var reverseDef in DefDatabase <ReverseDesignatorDef> .AllDefs)
            {
                var handleName = ReverseDesignatorHandleNamePrefix + reverseDef.defName;
                var handle     = pack.GetHandle(handleName, "setting_showTool_label".Translate(reverseDef.designatorDef.label), "setting_reverseDesignator_desc".Translate(), true);
                handle.VisibilityPredicate = () => expandReverseToolSettings;
                reverseDesignatorToggleHandles[handleName] = handle;
            }
            FinishOffSkillRequirement = pack.GetHandle("finishOffSkill", "setting_finishOffSkill_label".Translate(), "setting_finishOffSkill_desc".Translate(), true);
            FinishOffSkillRequirement.VisibilityPredicate = () => Prefs.DevMode;

            StripMineSettings = pack.GetHandle <StripMineGlobalSettings>("stripMineSettings", null, null);
            if (StripMineSettings.Value == null)
            {
                StripMineSettings.Value = new StripMineGlobalSettings();
            }
            // invisible but resettable
            StripMineSettings.VisibilityPredicate = () => false;

            RegisterPackHandlesChangedCallback(pack);
        }
Esempio n. 5
0
        /// <summary>
        ///     Initializes the biome data from the given <see cref="ModSettingsPack" /> settings
        ///     and <see cref="BiomeDef" />, creating our settings in the process.
        /// </summary>
        /// <param name="settings">The setting pack to use</param>
        /// <param name="biome">The biome to base this off of</param>
        /// <param name="visibilityFunc">Function which returns if we should display this now</param>
        /// <param name="currentPane">The current settings pane we're on</param>
        /// <param name="weathers">A list of weathers to iterate through</param>
        /// <param name="conditions">A list of game conditions to iterate through</param>
        public BiomeData(ModSettingsPack settings, BiomeDef biome, SettingHandle.ShouldDisplay visibilityFunc,
                         SettingHandle <SettingsPane> currentPane,
                         List <WeatherDef> weathers, List <GameConditionDef> conditions)
        {
            // Build out the key:
            var key = Regex.Replace(biome.defName, "[^A-Za-z]", "");

            // Init all of our various settings
            InitGeneralSettings(settings, biome, key,
                                () => currentPane.Value == SettingsPane.General && visibilityFunc());
            InitWeatherSettings(settings, biome, key, weathers,
                                () => currentPane.Value == SettingsPane.Weather && visibilityFunc());
            InitConditionSettings(settings, key, conditions,
                                  () => currentPane.Value == SettingsPane.Conditions && visibilityFunc());

            // Port things from the v1 labeling:
            var v1Key = Regex.Replace(biome.label, "[^A-Za-z]", ""); // <-- This was a bad plan.

            if (string.IsNullOrEmpty(v1Key))
            {
                return;
            }

            var oldFunc = settings.PeekValue($"temp_func_{v1Key}");

            if (oldFunc != null && settingFunc.HasDefaultValue())
            {
                settingFunc.StringValue = oldFunc;
                settings.TryRemoveUnclaimedValue($"temp_func_{v1Key}");
            }

            var oldMult = settings.PeekValue($"temp_multiplier_{v1Key}");

            if (oldMult != null && settingMultiplier.HasDefaultValue())
            {
                settingMultiplier.StringValue = oldMult;
                settings.TryRemoveUnclaimedValue($"temp_multiplier_{v1Key}");
            }

            var oldOffset = settings.PeekValue($"temp_offset_{v1Key}");

            if (oldOffset == null || !settingOffset.HasDefaultValue())
            {
                return;
            }

            settingOffset.StringValue = settings.PeekValue($"temp_offset_{v1Key}");
            settings.TryRemoveUnclaimedValue($"temp_offset_{v1Key}");
        }
Esempio n. 6
0
 /// <summary>
 ///     Initialize condition specific settings
 /// </summary>
 /// <param name="settings">The settings instance to use</param>
 /// <param name="key">The key to use</param>
 /// <param name="conditions">The conditions to iterate through</param>
 /// <param name="visibilityFunc">Our base visibility function</param>
 private void InitConditionSettings(ModSettingsPack settings, string key,
                                    List <GameConditionDef> conditions, SettingHandle.ShouldDisplay visibilityFunc)
 {
     // Iterate through each of our conditions...
     foreach (var condition in conditions)
     {
         var setting = settings.GetHandle($"condition_{key}_{condition.defName}_offset",
                                          "ColdDesertNights_ConditionTemp".Translate(GenText.ToTitleCaseSmart(condition.label)),
                                          "ColdDesertNights_ConditionTemp_Desc".Translate(),
                                          DefaultConditionTemps.ContainsKey(condition) ? DefaultConditionTemps[condition] : 0f,
                                          Validators.FloatRangeValidator(-400, 400));
         setting.VisibilityPredicate = visibilityFunc;
         conditionOffsets[condition] = setting;
     }
 }
Esempio n. 7
0
        /// <summary>
        ///     Initalizes all of our 'general' tab settings.
        /// </summary>
        /// <param name="settings">The settings instance to use</param>
        /// <param name="biome">The biome we're working with</param>
        /// <param name="key">The key to use</param>
        /// <param name="visibilityFunc">Our base visibility function</param>
        private void InitGeneralSettings(ModSettingsPack settings, BiomeDef biome, string key,
                                         SettingHandle.ShouldDisplay visibilityFunc)
        {
            settingFunc = settings.GetHandle($"temp_func_{key}",
                                             "ColdDesertNights_Function".Translate(GenText.ToTitleCaseSmart(biome.label)),
                                             "ColdDesertNights_Function_Desc".Translate(),
                                             TemperatureFunctions.Vanilla, null, "ColdDesertNights_Function_Enum_");
            settingMultiplier = settings.GetHandle(
                $"temp_multiplier_{key}",
                "ColdDesertNights_Multiplier".Translate(GenText.ToTitleCaseSmart(biome.label)),
                "ColdDesertNights_Multiplier_Desc".Translate(), 14.0f,
                Validators.FloatRangeValidator(-200, 200));
            settingOffset = settings.GetHandle($"temp_offset_{key}",
                                               "ColdDesertNights_Offset".Translate(GenText.ToTitleCaseSmart(biome.label)),
                                               "ColdDesertNights_Offset_Desc".Translate(), 0.0f,
                                               Validators.FloatRangeValidator(-200, 200));
            settingSeasonal = settings.GetHandle($"temp_seasonal_{key}",
                                                 "ColdDesertNights_Seasonal".Translate(GenText.ToTitleCaseSmart(biome.label)),
                                                 "ColdDesertNights_Seasonal_Desc".Translate(), 56.0f,
                                                 Validators.FloatRangeValidator(-400, 400));

            settingFunc.VisibilityPredicate                 =
                settingMultiplier.VisibilityPredicate       =
                    settingOffset.VisibilityPredicate       =
                        settingSeasonal.VisibilityPredicate =
                            visibilityFunc;


            // And use them to init our values...
            UpdateFunction(settingFunc.Value);
            RecalculateMultiplierAndOffset();
            RecalculateSeasonalCurve(settingSeasonal.Value);

            // Sync them up when they get changed
            settingFunc.OnValueChanged       += UpdateFunction;
            settingMultiplier.OnValueChanged += _ => RecalculateMultiplierAndOffset();
            settingOffset.OnValueChanged     += _ => RecalculateMultiplierAndOffset();
            settingSeasonal.OnValueChanged   += RecalculateSeasonalCurve;
        }
        public override void DefsLoaded()
        {
            // ------------------ Basic options -----------------

            //Config.ColonistsPrefPasteOverTasty = Settings.GetHandle<bool>("colonistsPrefPasteOverTasty", "PrefNutrientPasteOverTasty".Translate(), "PrefNutrientPasteOverTasty_desc".Translate(), true);
            //Config.privilegedPrisoners = Settings.GetHandle<bool>("privilegedPrisoners", "PrivilegedPrisoners".Translate(), "PrivilegedPrisoners_desc".Translate(), false);

            //Config.IncapColonistsFeedMode = Settings.GetHandle("incapColonistsFeedMode", "IncapFeedMode".Translate(), "", IncapFeedMode.AnimalsLikeExcludeCorpses, null, "enumSetting_");

            //Config.petsPreferHunt = Settings.GetHandle<bool>("petsPreferHunt", "PetsPreferHunt".Translate(), "PetsPreferHunt_desc".Translate(), true);

            Config.SeparatedNutrientPaste = Settings.GetHandle <bool>("separatedNutrientPaste", "SeparatedNutrientPaste".Translate(), "SeparatedNutrientPaste_desc".Translate(), true);

            Config.PrintPreferencesCommand = Settings.GetHandle <bool>("commandPrintReport", "PrintReportCommand".Translate(), "PrintReportCommand_desc".Translate());
            Config.PrintPreferencesCommand.CustomDrawer = delegate(Rect rect)
            {
                if (Widgets.ButtonText(rect, "commandPrintReportButton".Translate()))
                {
                    var floatOptions = new List <FloatMenuOption>();
                    foreach (var printMode in Enum.GetValues(typeof(ReportMode)))
                    {
                        floatOptions.Add(new FloatMenuOption(("commandPrintReportOption_" + printMode.ToString()).Translate(), () =>
                        {
                            Report.PrintCompatibilityReport((ReportMode)printMode);
                        }));
                    }
                    Find.WindowStack.Add(new FloatMenu(floatOptions));
                }
                return(true);
            };

            Config.NeedsTabUIHeight           = Settings.GetHandle <float>("NeedsTabUIHeight", "NeedsTabUIHeight".Translate(), "NeedsTabUIHeight_desc".Translate(), 140);
            Config.NeedsTabUIHeight.Validator = delegate(string text)
            {
                float value;

                if (!float.TryParse(text, out value))
                {
                    return(false);
                }

                if (value < 100)
                {
                    return(false);
                }

                return(true);
            };
            Config.NeedsTabUIHeight.OnValueChanged = delegate(float value)
            {
                UI.PawnPolicyCard.middleRectHeigth = value;
            };

            Config.controlPets      = Settings.GetHandle <bool>("controlPets", "ControlPets".Translate(), "ControlPets_desc".Translate(), true);
            Config.controlPrisoners = Settings.GetHandle <bool>("controlPrisoners", "ControlPrisoners".Translate(), "ControlPrisoners_desc".Translate(), true);
            Config.controlColonists = Settings.GetHandle <bool>("controlColonists", "ControlColonists".Translate(), "ControlColonists_desc".Translate(), true);
            Config.controlVisitors  = Settings.GetHandle <bool>("controlVisitors", "ControlVisitors".Translate(), "ControlColonists_desc".Translate(), true);

            Config.ShowAdvancedOptions = Settings.GetHandle <bool>("showAdvancedOptions", "ShowAdvancedOptions".Translate(), "ShowAdvancedOptions_desc".Translate(), false);

            // ------------------ Advanced options -----------------
            {
                SettingHandle.ShouldDisplay VisibilityPredicate = (() => Config.ShowAdvancedOptions);

                Config.petsSafeHuntMaxStrengthRatio = Settings.GetHandle <float>("petsSafeHuntMaxStrenghRatio", "PetsSafeHuntMaxStrenghtRatio".Translate(), "PetsSafeHuntMaxStrenghtRatio_desc".Translate(), 0.25f);
                Config.petsSafeHuntMaxStrengthRatio.VisibilityPredicate = VisibilityPredicate;
                Config.petsSafeHuntMaxStrengthRatio.Validator           = delegate(string value)
                {
                    float ratio;

                    if (float.TryParse(value, out ratio) && 0f < ratio && ratio <= 0.5f)
                    {
                        return(true);
                    }

                    Logger.Warning("Wrong option value: " + value + " \nreseting...");

                    return(false);
                };

                Config.useCorpsesForTaming = Settings.GetHandle <bool>("useCorpsesForTaming", "UseCorpsesForTaming".Translate(), "UseCorpsesForTaming_desc".Translate(), false);
                Config.useCorpsesForTaming.VisibilityPredicate = VisibilityPredicate;

                Config.useHumanlikeCorpsesForTaming = Settings.GetHandle <bool>("useHumanlikeCorpsesForTaming", "UseHumanlikeCorpsesForTaming".Translate(), "UseHumanlikeCorpsesForTaming_desc".Translate(), false);
                Config.useHumanlikeCorpsesForTaming.VisibilityPredicate = VisibilityPredicate;

                //Config.extendedFoodOptimality = Settings.GetHandle<bool>("extendedFoodOptimality", "ExtendedFoodOptimality".Translate(), "ExtendedFoodOptimality_desc".Translate(), true);
                //Config.extendedFoodOptimality.VisibilityPredicate = VisibilityPredicate;

                Config.CostFactor = Settings.GetHandle <float>("CostFactor", "CostFactor".Translate(), "CostFactor_desc".Translate(), Config.CONFIG_DEFAULT_COST_FACTOR);
                Config.CostFactor.VisibilityPredicate = VisibilityPredicate;

                Config.FoodSearchMaxItemsCount = Settings.GetHandle <int>("FoodSearchMaxItemsCount", "FoodSearchMaxItemsCount".Translate(), "FoodSearchMaxItemsCount_desc".Translate(), 2000);
                Config.FoodSearchMaxItemsCount.VisibilityPredicate = VisibilityPredicate;

                Config.useMealsForTaming = Settings.GetHandle <bool>("useMealsForTaming", "UseMealsForTaming".Translate(), "UseMealsForTaming_desc".Translate(), false);
                Config.useMealsForTaming.VisibilityPredicate = VisibilityPredicate;

#if DEBUG
                Config.debugNoPawnsRestricted = Settings.GetHandle <bool>("debugNoPawnsRestricted", "debugNoPawnsRestricted", "", false);
                Config.debugFoodPrefConstant  = Settings.GetHandle <bool>("debugFoodPrefConstant", "debugFoodPrefConstant", "", false);
                Config.debugNoWasteFactor     = Settings.GetHandle <bool>("debugNoWasteFactor", "debugNoWasteFactor", "", false);
#endif
            }

            FoodCategoryUtils.ClearAllRecords();
            processDefs();

            // ducktape
            processCannibalMealDef("MealNutrientPaste");
            //processCannibalMealDef("MealSimple");
            //processCannibalMealDef("MealFine");
            //processCannibalMealDef("MealLavish");

            //#if DEBUG
            Report.PrintCompatibilityReport(ReportMode.DefName, true);
            //#endif
        }