Files
barotrauma-localmods/Quick Interactions/CSharp/Client/CrabUI/Global/CUIMultiModResolver.cs

106 lines
2.8 KiB
C#

using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using Barotrauma;
using HarmonyLib;
using Microsoft.Xna.Framework;
using System.IO;
namespace QICrabUI
{
public class CUIMultiModResolver
{
internal static void InitStatic()
{
CUI.OnInit += () =>
{
//FindOtherInputs();
};
CUI.OnDispose += () =>
{
CUIInputs.Clear();
CUIs.Clear();
MouseInputHandledMethods.Clear();
};
}
public static List<object> CUIInputs = new();
public static List<object> CUIs = new();
public static List<Action<bool>> MouseInputHandledMethods = new();
public static void MarkOtherInputsAsHandled()
{
//MouseInputHandledMethods.ForEach(action => action(true));
foreach (object input in CUIInputs)
{
try
{
PropertyInfo setAsHandled = input.GetType().GetProperty("MouseInputHandled");
setAsHandled.SetValue(input, true);
CUI.Log($"setAsHandled.SetValue(input, true) for {input}");
}
catch (Exception e)
{
CUI.Warning($"Couldn't find MouseInputHandled in CUIInput in CUI from other mod ({input.GetType()})");
continue;
}
}
}
public static void FindOtherInputs()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
foreach (Assembly asm in currentDomain.GetAssemblies())
{
foreach (Type T in asm.GetTypes())
{
if (T.Name == "CUI")
{
try
{
FieldInfo InstanceField = T.GetField("Instance", BindingFlags.Static | BindingFlags.Public);
object CUIInstance = InstanceField.GetValue(null);
if (CUIInstance != null && CUIInstance != CUI.Instance)
{
CUIs.Add(CUIInstance);
FieldInfo inputField = T.GetField("input", AccessTools.all);
object input = inputField.GetValue(CUIInstance);
if (input != null) CUIInputs.Add(input);
}
}
catch (Exception e)
{
CUI.Warning($"Couldn't find CUIInputs in CUI from other mod ({T})");
continue;
}
}
}
}
foreach (object input in CUIInputs)
{
try
{
PropertyInfo setAsHandled = input.GetType().GetProperty("MouseInputHandled");
MouseInputHandledMethods.Add(setAsHandled.SetMethod.CreateDelegate<Action<bool>>(input));
}
catch (Exception e)
{
CUI.Warning($"Couldn't find MouseInputHandled in CUIInput in CUI from other mod ({input.GetType()})");
continue;
}
}
}
}
}