Config refactor to split dungeon generation and the mod's universal features.
This commit is contained in:
parent
d690b69a26
commit
83d0d8a737
44 changed files with 2001 additions and 1664 deletions
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using ScarletMansion.Configs;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
@ -17,7 +18,7 @@ namespace ScarletMansion.ModPatch {
|
|||
}
|
||||
|
||||
public static void Call(){
|
||||
if (StartOfRound.Instance.IsHost && PluginConfig.Instance.facilityMeltdownActiveValue){
|
||||
if (StartOfRound.Instance.IsHost && ConfigMain.Instance.facilityMeltdownActiveValue){
|
||||
FacilityMeltdown.API.MeltdownAPI.StartMeltdown(Plugin.modGUID);
|
||||
GamePatch.Managers.AngerManager.Instance.TriggerAngerLightForever();
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
@ -9,18 +10,16 @@ using LethalConfig.ConfigItems;
|
|||
using BepInEx.Configuration;
|
||||
using System.Reflection;
|
||||
|
||||
using ChangeList = ScarletMansion.PresetConfig.ChangeList;
|
||||
using ConfigEntryBundleInt = ScarletMansion.PluginConfig.ConfigEntryBundle<int>;
|
||||
using ConfigEntryBundleFloat = ScarletMansion.PluginConfig.ConfigEntryBundle<float>;
|
||||
using ConfigEntryBundleString = ScarletMansion.PluginConfig.ConfigEntryBundle<string>;
|
||||
using ConfigEntryBundleBool = ScarletMansion.PluginConfig.ConfigEntryBundle<bool>;
|
||||
using HarmonyLib;
|
||||
using LethalConfig.MonoBehaviours.Components;
|
||||
using UnityEngine.UI;
|
||||
using LethalConfig.MonoBehaviours;
|
||||
using ScarletMansion.Configs;
|
||||
using Microsoft.CSharp;
|
||||
using System.CodeDom.Compiler;
|
||||
|
||||
namespace ScarletMansion.ModPatch {
|
||||
public class LethalConfigPatch : ModPatch {
|
||||
public class LethalConfigPatch<T> : ModPatch where T: ConfigDungeon<T> {
|
||||
|
||||
public const string section = "_Presets";
|
||||
public const string descriptionPrefix = "These are a set of preset config values for your convience. Your config values will automatically update to these preset values every time SDM is loaded. These config values are a brighter shade of red. To disable this feature, set this value to Custom.";
|
||||
|
@ -32,7 +31,8 @@ namespace ScarletMansion.ModPatch {
|
|||
|
||||
public static void ForceUIUpdate(){
|
||||
try {
|
||||
var configMenuObject = GameObject.FindObjectOfType<ConfigMenu>();
|
||||
// zaggy said it's better
|
||||
var configMenuObject = GameObject.FindAnyObjectByType<ConfigMenu>();
|
||||
configMenuObject.Close(false);
|
||||
configMenuObject.Open();
|
||||
} catch (Exception e) {
|
||||
|
@ -50,14 +50,14 @@ namespace ScarletMansion.ModPatch {
|
|||
return LethalConfig.ConfigItems.Options.CanModifyResult.True();
|
||||
}
|
||||
|
||||
public static void CreateConfig(ConfigEntryBase configEntry) {
|
||||
if (configEntry is ConfigEntry<int>) CreateIntConfig(configEntry as ConfigEntry<int>);
|
||||
else if (configEntry is ConfigEntry<float>) CreateFloatConfig(configEntry as ConfigEntry<float>);
|
||||
else if (configEntry is ConfigEntry<string>) CreateStringConfig(configEntry as ConfigEntry<string>);
|
||||
else if (configEntry is ConfigEntry<bool>) CreateBoolConfig(configEntry as ConfigEntry<bool>);
|
||||
public static void CreateConfig(Assembly assembly, ConfigEntryBase configEntry) {
|
||||
if (configEntry is ConfigEntry<int>) CreateIntConfig(assembly, configEntry as ConfigEntry<int>);
|
||||
else if (configEntry is ConfigEntry<float>) CreateFloatConfig(assembly, configEntry as ConfigEntry<float>);
|
||||
else if (configEntry is ConfigEntry<string>) CreateStringConfig(assembly, configEntry as ConfigEntry<string>);
|
||||
else if (configEntry is ConfigEntry<bool>) CreateBoolConfig(assembly, configEntry as ConfigEntry<bool>);
|
||||
}
|
||||
|
||||
public static void CreateIntConfig(ConfigEntry<int> configEntry){
|
||||
public static void CreateIntConfig(Assembly assembly, ConfigEntry<int> configEntry){
|
||||
var options = new LethalConfig.ConfigItems.Options.IntSliderOptions{
|
||||
Section = configEntry.Definition.Section,
|
||||
Name = configEntry.Definition.Key,
|
||||
|
@ -67,10 +67,10 @@ namespace ScarletMansion.ModPatch {
|
|||
};
|
||||
|
||||
var entry = new IntSliderConfigItem(configEntry, options);
|
||||
LethalConfigManager.AddConfigItem(entry);
|
||||
LethalConfigManager.AddConfigItem(entry, assembly);
|
||||
}
|
||||
|
||||
public static void CreateFloatConfig(ConfigEntry<float> configEntry){
|
||||
public static void CreateFloatConfig(Assembly assembly, ConfigEntry<float> configEntry){
|
||||
var options = new LethalConfig.ConfigItems.Options.FloatSliderOptions{
|
||||
Section = configEntry.Definition.Section,
|
||||
Name = configEntry.Definition.Key,
|
||||
|
@ -80,10 +80,10 @@ namespace ScarletMansion.ModPatch {
|
|||
};
|
||||
|
||||
var entry = new FloatSliderConfigItem(configEntry, options);
|
||||
LethalConfigManager.AddConfigItem(entry);
|
||||
LethalConfigManager.AddConfigItem(entry, assembly);
|
||||
}
|
||||
|
||||
public static void CreateStringConfig(ConfigEntry<string> configEntry){
|
||||
public static void CreateStringConfig(Assembly assembly, ConfigEntry<string> configEntry){
|
||||
var options = new LethalConfig.ConfigItems.Options.TextInputFieldOptions{
|
||||
Section = configEntry.Definition.Section,
|
||||
Name = configEntry.Definition.Key,
|
||||
|
@ -93,10 +93,10 @@ namespace ScarletMansion.ModPatch {
|
|||
};
|
||||
|
||||
var entry = new TextInputFieldConfigItem(configEntry, options);
|
||||
LethalConfigManager.AddConfigItem(entry);
|
||||
LethalConfigManager.AddConfigItem(entry, assembly);
|
||||
}
|
||||
|
||||
public static void CreateBoolConfig(ConfigEntry<bool> configEntry){
|
||||
public static void CreateBoolConfig(Assembly assembly, ConfigEntry<bool> configEntry){
|
||||
var options = new LethalConfig.ConfigItems.Options.BoolCheckBoxOptions{
|
||||
Section = configEntry.Definition.Section,
|
||||
Name = configEntry.Definition.Key,
|
||||
|
@ -106,10 +106,10 @@ namespace ScarletMansion.ModPatch {
|
|||
};
|
||||
|
||||
var entry = new BoolCheckBoxConfigItem(configEntry, options);
|
||||
LethalConfigManager.AddConfigItem(entry);
|
||||
LethalConfigManager.AddConfigItem(entry, assembly);
|
||||
}
|
||||
|
||||
public static void CreatePresetConfig<T>(ConfigEntry<T> configEntry, List<ChangeList> changeList) where T: Enum {
|
||||
public static void CreatePresetConfig<U>(Assembly assembly, ConfigEntry<U> configEntry, List<ConfigManager<T>.ChangeList> changeList) where U: Enum {
|
||||
configEntry.SettingChanged += (obj, args) => ForceUIUpdate();
|
||||
|
||||
var description = $"{requiresNewLobby}\n\n{descriptionPrefix}\n\n";
|
||||
|
@ -125,20 +125,20 @@ namespace ScarletMansion.ModPatch {
|
|||
CanModifyCallback = CanModifyCallback,
|
||||
};
|
||||
|
||||
var entry = new EnumDropDownConfigItem<T>(configEntry, options);
|
||||
LethalConfigManager.AddConfigItem(entry);
|
||||
var entry = new EnumDropDownConfigItem<U>(configEntry, options);
|
||||
LethalConfigManager.AddConfigItem(entry, assembly);
|
||||
}
|
||||
|
||||
public static void AutoGenerateConfigs(params object[] ignoreTargets){
|
||||
var fields = typeof(PluginConfig).GetFields(BindingFlags.Public | BindingFlags.Static);
|
||||
public static void AutoGenerateConfigs<TTarget>(Assembly assembly, params object[] ignoreTargets) where TTarget: ConfigManager<TTarget> {
|
||||
var fields = typeof(TTarget).GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
|
||||
foreach(var p in fields){
|
||||
var value = p.GetValue(null);
|
||||
if (ignoreTargets.Contains(value)) continue;
|
||||
|
||||
var valueBundle = value as PluginConfig.ConfigEntryBundleBase;
|
||||
if (valueBundle != null){
|
||||
if (value is ConfigManager<TTarget>.ConfigEntryBundleBase){
|
||||
var valueBundle = (ConfigManager<TTarget>.ConfigEntryBundleBase)value;
|
||||
foreach(var c in valueBundle.GetConfigs()){
|
||||
CreateConfig(c);
|
||||
CreateConfig(assembly, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -147,27 +147,34 @@ namespace ScarletMansion.ModPatch {
|
|||
public override void AddPatch() {
|
||||
LethalConfigManager.SkipAutoGen();
|
||||
|
||||
CreatePresetConfig(PluginConfig.lcDungeonGenerationPreset.config, PresetConfig.dungeonGenerationChangeList);
|
||||
CreatePresetConfig(PluginConfig.lcDungeonLightingPreset.config, PresetConfig.dungeonLightingChangeList);
|
||||
LethalConfigManager.SetModDescription("Adds the Scarlet Devil Mansion from Touhou as a possible dungeon to the snow maps.\n\nThis is the master config for the entire mod.");
|
||||
|
||||
var mainAssembly = typeof(Plugin).Assembly;
|
||||
var dungeonAssembly = typeof(DungeonFoyer.Plugin).Assembly;
|
||||
|
||||
CreatePresetConfig(dungeonAssembly, ConfigDungeon<T>.dungeonGenerationPreset.config, ConfigDungeon<T>.dungeonGenerationChangeList);
|
||||
CreatePresetConfig(dungeonAssembly, ConfigDungeon<T>.dungeonLightingPreset.config, ConfigDungeon<T>.dungeonLightingChangeList);
|
||||
|
||||
AutoGenerateConfigs(PluginConfig.lcDungeonGenerationPreset, PluginConfig.lcDungeonLightingPreset);
|
||||
AutoGenerateConfigs<ConfigMain>(mainAssembly);
|
||||
AutoGenerateConfigs<T>(dungeonAssembly, ConfigDungeon<T>.dungeonGenerationPreset, ConfigDungeon<T>.dungeonLightingPreset);
|
||||
|
||||
try {
|
||||
Plugin.Instance.harmony.PatchAll(typeof(LethalConfigPatch));
|
||||
//Plugin.Instance.harmony.PatchAll(typeof(LethalConfigPatch));
|
||||
} catch (Exception e) {
|
||||
Plugin.logger.LogWarning("Tried to HarmonyPatch LethalConfig but failed. Nothing bad will happen but report this bug to dev.");
|
||||
Plugin.logger.LogError(e.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
[HarmonyPatch(typeof(LethalConfig.MonoBehaviours.ConfigList), "LoadConfigsForMod")]
|
||||
[HarmonyPostfix]
|
||||
public static void LoadConfigsForModPatch(ref LethalConfig.MonoBehaviours.ConfigList __instance, ref LethalConfig.Mods.Mod mod) {
|
||||
try {
|
||||
if (mod.ModInfo.Guid == Plugin.modGUID) {
|
||||
|
||||
var genChanges = PresetConfig.defaultGeneration.GetAllConfigEntries();
|
||||
var lightChanges = PresetConfig.defaultLighting.GetAllConfigEntries();
|
||||
var genChanges = Presets.defaultGeneration.GetAllConfigEntries();
|
||||
var lightChanges = Presets.defaultLighting.GetAllConfigEntries();
|
||||
|
||||
foreach(Transform child in __instance.listContainerObject.transform){
|
||||
var controller = child.GetComponentInChildren<ModConfigController>();
|
||||
|
@ -187,6 +194,7 @@ namespace ScarletMansion.ModPatch {
|
|||
}
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ using System.Text;
|
|||
using System.Threading.Tasks;
|
||||
using BepInEx;
|
||||
using BepInEx.Bootstrap;
|
||||
using ScarletMansion.Configs;
|
||||
|
||||
namespace ScarletMansion.ModPatch {
|
||||
public class ModCompability {
|
||||
|
@ -17,7 +18,7 @@ namespace ScarletMansion.ModPatch {
|
|||
|
||||
public static readonly ModPatch[] modPatches = new ModPatch[] {
|
||||
//new AdvancedCompanyPatch(advancedCompanyGuid),
|
||||
new LethalConfigPatch(lethalConfigGuid),
|
||||
new LethalConfigPatch<ConfigDungeonFoyer>(lethalConfigGuid),
|
||||
new FacilityMeltdownPatch(facilityMeldownGuid),
|
||||
new ReservedFlashlightPatch(reserveFlashlightGuid),
|
||||
new ReservedKeyPatch(reserveKeyGuid)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue