Skip to content

Commit e5296f3

Browse files
committed
Reimplemented the disabling mechanism
1 parent eb3eb68 commit e5296f3

3 files changed

Lines changed: 60 additions & 17 deletions

File tree

Main.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@ namespace SelectiveEffects
55
{
66
public class Main : MelonMod
77
{
8+
internal static bool _isGameMain = false;
9+
public static bool IsGameMain => _isGameMain;
10+
811
public override void OnInitializeMelon()
912
{
1013
SettingsManager.Load();
1114
EffectsDisablerManager.Init();
1215
LoggerInstance.Msg("SelectiveEffects has loaded correctly!");
1316
}
17+
18+
public override void OnSceneWasLoaded(int buildIndex, string sceneName)
19+
{
20+
_isGameMain = sceneName.Equals("GameMain");
21+
}
1422
}
1523
}

Managers/EffectsDisablerManager.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,18 @@
22
{
33
using static SettingsManager;
44

5+
/*
6+
[RegisterTypeInIl2Cpp]
7+
public class DisableEffectComponent : MonoBehaviour
8+
{
9+
public DisableEffectComponent(IntPtr ptr) : base(ptr) { }
10+
}
11+
*/
12+
513
internal static class EffectsDisablerManager
614
{
715
public static List<EffectsCondition> effectsDisablerList;
16+
public static HashSet<string> effectsDisabledUids = new();
817
public static bool AnyEffect = false;
918

1019
public static void Init()
@@ -43,6 +52,29 @@ public static void Init()
4352
internal abstract class EffectsCondition
4453
{
4554
public abstract bool Condition(string s);
55+
56+
public virtual void Action(string s)
57+
{
58+
EffectsDisablerManager.effectsDisabledUids.Add(s);
59+
//effectPrefab.AddComponent<DisableEffectComponent>();
60+
}
61+
62+
public bool CheckDo(string uid)
63+
{
64+
if (!Condition(uid)) return false;
65+
66+
Action(uid);
67+
return true;
68+
}
69+
}
70+
71+
// Unused
72+
internal class JudgementSize : EffectsCondition
73+
{
74+
public override bool Condition(string s)
75+
{
76+
return s.Contains("Score");
77+
}
4678
}
4779

4880
internal class Perfects : EffectsCondition

Patches/MainEffectsPatch.cs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,34 @@
55

66
namespace SelectiveEffects.Patches
77
{
8-
[HarmonyPatch(typeof(Effect), nameof(Effect.CreateInstance))]
9-
internal class MainEffectsPatch
8+
[HarmonyPatch(typeof(Effect))]
9+
internal static class MainEffectsPatch
1010
{
11-
public static void Postfix(Effect __instance, ref GameObject __result)
11+
[HarmonyPostfix]
12+
[HarmonyPatch(nameof(Effect.Init))]
13+
public static void ModifyPrefabs(Effect __instance)
1214
{
13-
if (!SettingsManager.Enabled) return;
15+
if (!Main.IsGameMain) return;
16+
17+
if (SettingsManager.DisableAllEffects) return;
1418

15-
16-
if (SettingsManager.DisableAllEffects)
19+
foreach (EffectsCondition effecObject in EffectsDisablerManager.effectsDisablerList)
1720
{
18-
__result.SetActive(false);
19-
return;
21+
if (effecObject.CheckDo(__instance.uid)) return;
2022
}
21-
23+
}
2224

23-
if (SettingsManager.DisableAllEffects || !EffectsDisablerManager.AnyEffect) return;
2425

25-
string fxName = __instance.uid;
26-
foreach (EffectsCondition effecObject in EffectsDisablerManager.effectsDisablerList)
27-
{
28-
if (!effecObject.Condition(fxName)) continue;
26+
[HarmonyPostfix]
27+
[HarmonyPatch(nameof(Effect.CreateInstance))]
28+
public static void DisableEffects(Effect __instance, ref GameObject __result)
29+
{
30+
if (!SettingsManager.Enabled) return;
2931

30-
__result.SetActive(false);
31-
return;
32-
}
32+
if (!SettingsManager.DisableAllEffects
33+
&& !EffectsDisablerManager.effectsDisabledUids.Contains(__instance.uid)
34+
) return;
35+
__result.SetActive(false);
3336
}
3437
}
3538
}

0 commit comments

Comments
 (0)