using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using UnityEngine; using EventSystemHandler = System.Action; namespace Thousandto.Launcher.ExternalLibs { //事件管理器EventMamanger的代理,用于Launcher中的脚本操作发送事件给逻辑系统 public class EventManagerProxy { //事件类型 private static Type _type; //代理类 private static Type _delegateType; //push消息的方法 private static MethodInfo _miPushEvent; //注册消息的方法 private static MethodInfo _miRegEvent; //取消注册的方法 private static MethodInfo _miUnRegEvent; //事件管理器的实例对象 private static object _eventManagerObj; //初始化类型 private static void InitType() { if (_eventManagerObj == null) { var assmbles = AppDomain.CurrentDomain.GetAssemblies(); for (int i = 0; i < assmbles.Length; i++) { var t = assmbles[i].GetType("Thousandto.Core.Base.EventManager"); if (t != null) { _type = t; _delegateType = assmbles[i].GetType("Thousandto.Core.Base.EventSystemHandler"); var pi = t.GetProperty("SharedInstance", BindingFlags.Static | BindingFlags.Public); _eventManagerObj = pi.GetValue(null, null); _miPushEvent = t.GetMethod("PushFixEvent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod); _miRegEvent = t.GetMethod("RegFixEventHandle", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod); _miUnRegEvent = t.GetMethod("UnRegFixEventHandle", BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod); return; } } } } //发送事件消息 public static void PushFixEvent(int eventType, object param = null, object sender = null, object target = null, bool isSync = true, float delayTime = 0f) { InitType(); if (_eventManagerObj != null && _miPushEvent != null) { _miPushEvent.Invoke(_eventManagerObj, new object[] { eventType, param, sender, target, isSync, delayTime }); } else { Debug.Log("Laucnher访问给事件系统失败,因为逻辑系统还没有被初始化!PushFixEvent"); } } //注册事件 public static void RegFixEventHandle(int eventType, EventSystemHandler eventHandler) { InitType(); if (_eventManagerObj != null && _miRegEvent != null && eventHandler != null) { _miRegEvent.Invoke(_eventManagerObj, new object[] { eventType, Delegate.CreateDelegate(_delegateType, eventHandler.Target,eventHandler.Method) }); } else { Debug.Log("Laucnher访问给事件系统失败,因为逻辑系统还没有被初始化!RegFixEventHandle"); } } //取消某个注册消息 public static void UnRegFixEventHandle(int eventType, EventSystemHandler eventHandler) { InitType(); if (_eventManagerObj != null && _miUnRegEvent != null && eventHandler != null) { _miUnRegEvent.Invoke(_eventManagerObj, new object[] { eventType, Delegate.CreateDelegate(_delegateType, eventHandler.Target, eventHandler.Method) }); } else { Debug.Log("Laucnher访问给事件系统失败,因为逻辑系统还没有被初始化!UnRegFixEventHandle"); } } } }