2using System.Reflection;
3using System.Runtime.CompilerServices;
4using System.Collections.Generic;
5using System.Collections.Immutable;
10using Microsoft.Xna.Framework;
15 public class CUIMultiModResolver
17 internal static void InitStatic()
23 CUI.OnDispose += () =>
27 MouseInputHandledMethods.Clear();
31 public static List<object> CUIInputs =
new();
32 public static List<object> CUIs =
new();
33 public static List<Action<bool>> MouseInputHandledMethods =
new();
35 public static void MarkOtherInputsAsHandled()
39 foreach (
object input
in CUIInputs)
43 PropertyInfo setAsHandled = input.GetType().GetProperty(
"MouseInputHandled");
44 setAsHandled.SetValue(input,
true);
45 CUI.Log($
"setAsHandled.SetValue(input, true) for {input}");
49 CUI.Warning($
"Couldn't find MouseInputHandled in CUIInput in CUI from other mod ({input.GetType()})");
55 public static void FindOtherInputs()
57 AppDomain currentDomain = AppDomain.CurrentDomain;
59 foreach (Assembly
asm in currentDomain.GetAssemblies())
61 foreach (Type T
in asm.GetTypes())
67 FieldInfo InstanceField = T.GetField(
"Instance", BindingFlags.Static | BindingFlags.Public);
68 object CUIInstance = InstanceField.GetValue(
null);
69 if (CUIInstance !=
null && CUIInstance != CUI.Instance)
71 CUIs.Add(CUIInstance);
72 FieldInfo inputField = T.GetField(
"input", AccessTools.all);
74 object input = inputField.GetValue(CUIInstance);
75 if (input !=
null) CUIInputs.Add(input);
80 CUI.Warning($
"Couldn't find CUIInputs in CUI from other mod ({T})");
87 foreach (
object input
in CUIInputs)
91 PropertyInfo setAsHandled = input.GetType().GetProperty(
"MouseInputHandled");
92 MouseInputHandledMethods.Add(setAsHandled.SetMethod.CreateDelegate<Action<bool>>(input));
96 CUI.Warning($
"Couldn't find MouseInputHandled in CUIInput in CUI from other mod ({input.GetType()})");