1
0
Fork 0

Patch Jester destructor to reset the light show

It is needed to despawn Jester via Imperium's Object Explorer.
This commit is contained in:
ivan tkachenko 2025-07-21 01:06:45 +03:00
parent 8e065d3e51
commit 730f125d62
1 changed files with 23 additions and 1 deletions

View File

@ -528,7 +528,9 @@ namespace MuzikaGromche
}
Config = new Config(base.Config);
DiscoBallManager.Initialize();
new Harmony(PluginInfo.PLUGIN_NAME).PatchAll(typeof(JesterPatch));
var harmony = new Harmony(PluginInfo.PLUGIN_NAME);
harmony.PatchAll(typeof(JesterPatch));
harmony.PatchAll(typeof(EnemyAIPatch));
}
else
{
@ -1875,6 +1877,26 @@ namespace MuzikaGromche
}
}
[HarmonyPatch(typeof(EnemyAI))]
internal class EnemyAIPatch
{
// JesterAI class does not override abstract method OnDestroy,
// so we have to patch its superclass directly.
[HarmonyPatch(nameof(EnemyAI.OnDestroy))]
[HarmonyPrefix]
public static void CleanUpOnDestroy(EnemyAI __instance)
{
if (__instance is JesterAI)
{
Plugin.ResetLightColor();
DiscoBallManager.Disable();
// Just in case if players have spawned multiple Jesters,
// Don't reset Plugin.CurrentTrack and Plugin.BeatTimeState to null,
// so that the code wouldn't crash without extra null checks.
}
}
}
internal class State
{
public AudioSource farAudio;