100 lines
3.9 KiB
C#
100 lines
3.9 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Reflection;
|
||
using System.Text;
|
||
using UnityEngine;
|
||
using EventSystemHandler = System.Action<System.Object, System.Object>;
|
||
|
||
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");
|
||
}
|
||
}
|
||
}
|
||
}
|