From 28025e031b4b271d35ffc7c075923b7bea98f77b Mon Sep 17 00:00:00 2001 From: Frank Yang Date: Tue, 23 Nov 2021 19:11:00 +0800 Subject: [PATCH] feat: toggleable level --- GodSeekerPlus/GodSeekerPlus.csproj | 2 +- GodSeekerPlus/Lang/en.json | 4 +++- GodSeekerPlus/Lang/zh.json | 4 +++- GodSeekerPlus/Menu.cs | 2 +- GodSeekerPlus/Modules/CarefreeMelodyFix.cs | 2 +- GodSeekerPlus/Modules/CompleteLowerDifficulty.cs | 2 +- GodSeekerPlus/Modules/DoorDefaultBegin.cs | 2 +- GodSeekerPlus/Modules/FastDreamWarp.cs | 2 +- GodSeekerPlus/Modules/FastSuperDash.cs | 2 +- GodSeekerPlus/Modules/ForceArriveAnimation.cs | 2 +- GodSeekerPlus/Modules/ForceOvercharm.cs | 2 +- GodSeekerPlus/Modules/FrameRateLimit.cs | 2 +- GodSeekerPlus/Modules/GreyPrinceEnterShort.cs | 2 +- GodSeekerPlus/Modules/HalveDamage.cs | 2 +- GodSeekerPlus/Modules/MemorizeBindings.cs | 2 +- GodSeekerPlus/Modules/Module.cs | 9 +++------ GodSeekerPlus/Modules/ModuleAttribute.cs | 8 +++++++- GodSeekerPlus/Modules/UnlockEternalOrdeal.cs | 2 +- GodSeekerPlus/Modules/UnlockRadiance.cs | 2 +- GodSeekerPlus/Modules/UnlockRadiant.cs | 2 +- 20 files changed, 32 insertions(+), 25 deletions(-) diff --git a/GodSeekerPlus/GodSeekerPlus.csproj b/GodSeekerPlus/GodSeekerPlus.csproj index a8e6dc9..14677a2 100644 --- a/GodSeekerPlus/GodSeekerPlus.csproj +++ b/GodSeekerPlus/GodSeekerPlus.csproj @@ -1,7 +1,7 @@ GodSeekerPlus - 0.12.0 + 0.12.1 A Hollow Knight mod to enhance your Godhome experience Clazex Copyright © 2021 Clazex diff --git a/GodSeekerPlus/Lang/en.json b/GodSeekerPlus/Lang/en.json index 2aad352..989a72b 100644 --- a/GodSeekerPlus/Lang/en.json +++ b/GodSeekerPlus/Lang/en.json @@ -1,5 +1,7 @@ { - "RequireRestart": "Requires a restart to take effect.", + "ToggleableLevel/AnyTime": "", + "ToggleableLevel/ReloadSave": "Reload the save to apply change", + "ToggleableLevel/RestartGame": "Restart the game to apply change", "Modules/CarefreeMelodyFix": "Carefree Melody Fix", "Modules/CompleteLowerDifficulty": "Complete Lower Difficulty", "Modules/DoorDefaultBegin": "Door Default Begin", diff --git a/GodSeekerPlus/Lang/zh.json b/GodSeekerPlus/Lang/zh.json index 4db461a..ef7ef82 100644 --- a/GodSeekerPlus/Lang/zh.json +++ b/GodSeekerPlus/Lang/zh.json @@ -1,5 +1,7 @@ { - "RequireRestart": "需重启以生效。", + "ToggleableLevel/AnyTime": "", + "ToggleableLevel/ReloadSave": "重新加载存档以生效", + "ToggleableLevel/RestartGame": "重启游戏以生效", "Modules/CarefreeMelodyFix": "无忧旋律修复", "Modules/CompleteLowerDifficulty": "完成较低难度", "Modules/DoorDefaultBegin": "门默认开始", diff --git a/GodSeekerPlus/Menu.cs b/GodSeekerPlus/Menu.cs index ed55a8a..62fd976 100644 --- a/GodSeekerPlus/Menu.cs +++ b/GodSeekerPlus/Menu.cs @@ -17,7 +17,7 @@ List IMenuMod.GetMenuData(MenuEntry? _) => ModuleHelper .Map(name => new MenuEntry( L11nUtil.Localize($"Modules/{name}"), States, - moduleManager.Modules[name].Toggleable ? "" : L11nUtil.Localize("RequireRestart"), + L11nUtil.Localize($"ToggleableLevel/{moduleManager.Modules[name].ToggleableLevel}"), (val) => moduleManager.Modules[name].Enabled = Convert.ToBoolean(val), () => Convert.ToInt32(moduleManager.Modules[name].Enabled) )) diff --git a/GodSeekerPlus/Modules/CarefreeMelodyFix.cs b/GodSeekerPlus/Modules/CarefreeMelodyFix.cs index 1e69d18..33a7681 100644 --- a/GodSeekerPlus/Modules/CarefreeMelodyFix.cs +++ b/GodSeekerPlus/Modules/CarefreeMelodyFix.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = true)] internal sealed class CarefreeMelodyFix : Module { private protected override void Load() => ModHooks.CharmUpdateHook += WatchAndFixCarefreeMelody; diff --git a/GodSeekerPlus/Modules/CompleteLowerDifficulty.cs b/GodSeekerPlus/Modules/CompleteLowerDifficulty.cs index 931f66a..89b28fb 100644 --- a/GodSeekerPlus/Modules/CompleteLowerDifficulty.cs +++ b/GodSeekerPlus/Modules/CompleteLowerDifficulty.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = true)] internal sealed class CompleteLowerDifficulty : Module { private protected override void Load() { } diff --git a/GodSeekerPlus/Modules/DoorDefaultBegin.cs b/GodSeekerPlus/Modules/DoorDefaultBegin.cs index 79046c2..4b61be1 100644 --- a/GodSeekerPlus/Modules/DoorDefaultBegin.cs +++ b/GodSeekerPlus/Modules/DoorDefaultBegin.cs @@ -6,7 +6,7 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = true)] internal sealed class DoorDefaultBegin : Module { private protected override void Load() => On.BossDoorChallengeUI.ShowSequence += OverrideOrig; diff --git a/GodSeekerPlus/Modules/FastDreamWarp.cs b/GodSeekerPlus/Modules/FastDreamWarp.cs index 088301e..322ad76 100644 --- a/GodSeekerPlus/Modules/FastDreamWarp.cs +++ b/GodSeekerPlus/Modules/FastDreamWarp.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.ReloadSave, defaultEnabled = true)] internal sealed class FastDreamWarp : Module { private protected override void Load() => On.PlayMakerFSM.OnEnable += ModifyDreamNailFSM; diff --git a/GodSeekerPlus/Modules/FastSuperDash.cs b/GodSeekerPlus/Modules/FastSuperDash.cs index 0bf46fe..c95441f 100644 --- a/GodSeekerPlus/Modules/FastSuperDash.cs +++ b/GodSeekerPlus/Modules/FastSuperDash.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.ReloadSave, defaultEnabled = true)] internal sealed class FastSuperDash : Module { private protected override void Load() => On.PlayMakerFSM.OnEnable += ModifySuperDashFSM; diff --git a/GodSeekerPlus/Modules/ForceArriveAnimation.cs b/GodSeekerPlus/Modules/ForceArriveAnimation.cs index 138a42d..864bd7b 100644 --- a/GodSeekerPlus/Modules/ForceArriveAnimation.cs +++ b/GodSeekerPlus/Modules/ForceArriveAnimation.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = false)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = false)] internal sealed class ForceArriveAnimation : Module { private static readonly string[] scenes = { "GG_Vengefly", diff --git a/GodSeekerPlus/Modules/ForceOvercharm.cs b/GodSeekerPlus/Modules/ForceOvercharm.cs index c7cf43c..d3c4f5d 100644 --- a/GodSeekerPlus/Modules/ForceOvercharm.cs +++ b/GodSeekerPlus/Modules/ForceOvercharm.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = false)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = false)] internal sealed class ForceOvercharm : Module { private protected override void Load() => ModHooks.CharmUpdateHook += DoOvercharm; diff --git a/GodSeekerPlus/Modules/FrameRateLimit.cs b/GodSeekerPlus/Modules/FrameRateLimit.cs index 515b0f3..9911854 100644 --- a/GodSeekerPlus/Modules/FrameRateLimit.cs +++ b/GodSeekerPlus/Modules/FrameRateLimit.cs @@ -2,7 +2,7 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = false)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = false)] internal sealed class FrameRateLimit : Module { private int time = default; diff --git a/GodSeekerPlus/Modules/GreyPrinceEnterShort.cs b/GodSeekerPlus/Modules/GreyPrinceEnterShort.cs index ff6b7c3..d1d44fc 100644 --- a/GodSeekerPlus/Modules/GreyPrinceEnterShort.cs +++ b/GodSeekerPlus/Modules/GreyPrinceEnterShort.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = true)] internal sealed class GreyPrinceEnterShort : Module { private protected override void Load() => On.PlayMakerFSM.OnEnable += ModifyGPFSM; diff --git a/GodSeekerPlus/Modules/HalveDamage.cs b/GodSeekerPlus/Modules/HalveDamage.cs index 5961376..be2b851 100644 --- a/GodSeekerPlus/Modules/HalveDamage.cs +++ b/GodSeekerPlus/Modules/HalveDamage.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = false)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = false)] internal sealed class HalveDamage : Module { private protected override void Load() => ModHooks.TakeHealthHook += MakeDamageHalved; diff --git a/GodSeekerPlus/Modules/MemorizeBindings.cs b/GodSeekerPlus/Modules/MemorizeBindings.cs index 6c59499..7b9ecb6 100644 --- a/GodSeekerPlus/Modules/MemorizeBindings.cs +++ b/GodSeekerPlus/Modules/MemorizeBindings.cs @@ -3,7 +3,7 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = true)] internal sealed class MemorizeBindings : Module { private protected override void Load() { On.BossDoorChallengeUI.ShowSequence += ApplyBindingStates; diff --git a/GodSeekerPlus/Modules/Module.cs b/GodSeekerPlus/Modules/Module.cs index 91f3292..903acd1 100644 --- a/GodSeekerPlus/Modules/Module.cs +++ b/GodSeekerPlus/Modules/Module.cs @@ -11,17 +11,14 @@ internal abstract class Module { private bool Loaded { get; set; } = false; - internal bool Toggleable => - GetType().GetCustomAttribute().toggleable; + internal ToggleableLevel ToggleableLevel => + GetType().GetCustomAttribute().toggleableLevel; internal bool Enabled { get => GodSeekerPlus.Instance.GlobalSettings.modules[Name]; set { GodSeekerPlus.Instance.GlobalSettings.modules[Name] = value; - - if (Toggleable) { - Update(); - } + Update(); } } diff --git a/GodSeekerPlus/Modules/ModuleAttribute.cs b/GodSeekerPlus/Modules/ModuleAttribute.cs index ea50ba5..7bb38af 100644 --- a/GodSeekerPlus/Modules/ModuleAttribute.cs +++ b/GodSeekerPlus/Modules/ModuleAttribute.cs @@ -2,6 +2,12 @@ namespace GodSeekerPlus.Modules; [AttributeUsage(AttributeTargets.Class)] internal sealed class ModuleAttribute : Attribute { - public bool toggleable; + public ToggleableLevel toggleableLevel; public bool defaultEnabled; } + +internal enum ToggleableLevel { + AnyTime, + ReloadSave, + RestartGame +} diff --git a/GodSeekerPlus/Modules/UnlockEternalOrdeal.cs b/GodSeekerPlus/Modules/UnlockEternalOrdeal.cs index 9ea9f76..96235a8 100644 --- a/GodSeekerPlus/Modules/UnlockEternalOrdeal.cs +++ b/GodSeekerPlus/Modules/UnlockEternalOrdeal.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = true)] internal sealed class UnlockEternalOrdeal : Module { private protected override void Load() => ModHooks.AfterSavegameLoadHook += SetOrdealUnlocked; diff --git a/GodSeekerPlus/Modules/UnlockRadiance.cs b/GodSeekerPlus/Modules/UnlockRadiance.cs index 8a7abf9..98eb056 100644 --- a/GodSeekerPlus/Modules/UnlockRadiance.cs +++ b/GodSeekerPlus/Modules/UnlockRadiance.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = true)] internal sealed class UnlockRadiance : Module { private const string scene = "Radiance Boss Scene"; diff --git a/GodSeekerPlus/Modules/UnlockRadiant.cs b/GodSeekerPlus/Modules/UnlockRadiant.cs index 872e709..95dc26e 100644 --- a/GodSeekerPlus/Modules/UnlockRadiant.cs +++ b/GodSeekerPlus/Modules/UnlockRadiant.cs @@ -1,6 +1,6 @@ namespace GodSeekerPlus.Modules; -[Module(toggleable = true, defaultEnabled = true)] +[Module(toggleableLevel = ToggleableLevel.AnyTime, defaultEnabled = true)] internal sealed class UnlockRadiant : Module { private protected override void Load() => On.BossChallengeUI.Setup += UnlockTier3;