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