新事件系统使用说明
xx
注册的回调接口一般需要返回 bool 类型值,当为true 时候会拦截优先级低的回调,为了方便只提供了一个不带参数的注册接口(RegisterDefaultBlock)可以不需要返回值.
/// <summary>
/// 监听不带参数的事件
/// </summary>
/// <param name="listener">监听对象,一个类中要保持一致,最好不要一会儿是this,一会儿是gameobject</param>
/// <param name="eventCode">事件id</param>
/// <param name="handler">此时一定不会阻止后面的执行</param>
/// <param name="isIgnoreOnDisableGameObject"></param>
/// <param name="priority">优先级,数值越大越先执行,建议使用 EventHandlerPriority 定义的数值 (+,- 操作)</param>
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterVoid(m_Host, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Default);
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterInt(gameObject, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Defaul);
//uint 参数类型
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterUInt(gameObject, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Default);
//long参数类型
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterLong(gameObject, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Default);
//float参数类型
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterFloat(gameObject, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Default);
//double参数类型
MEventCenter.GetInstance().RegisterDouble(gameObject, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Default);
//string参数类型
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterString(gameObject, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Default);
//bool参数类型
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterBool(gameObject, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Default);
//verctor2参数类型
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterVector2(gameObject, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Default);
//vector3参数类型
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterVector3(gameObject, (int) EventCodeDefine.XXX, YYY,
bool isIgnoreOnDisableGameObject = false, int priority =(int) EventHandlerPriority.Default);
//参数是一个EventParameter类型参数(参数内部可以包含各种常用的类型参数)
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().RegisterObj(gameObject, (int) EventCodeDefine.XXX, YYY);
dd
//取消参数1 对象的所有回调
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterAllEventOfListener(gameObject);
//取消参数1 对象的 参数2指定id 所有回调
if (MEventCenter.IsValidate())
MEventCenter.GetInstance(). UnRegisterEventOfCode(gameObject,(int) EventCodeDefine.xxx));
//取消参数1 对象指定的事件类型为2的所有回调 无参数
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().
UnRegisterVoid(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调 参数类型 EventParameter
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterObj(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调 参数类型单个 object
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterSignalObj(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterInt(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterLong(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调 参数类型 float
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterFloat(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调 参数类型 double
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterDouble(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调 参数类型 bool
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterBool(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调 参数类型 vevtor2
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterVector2(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调 参数类型 vector3
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterVector3(gameObject, (int) EventCodeDefine.XXX);
//取消参数1 对象指定的事件类型为2的所有回调 参数类型 string
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().UnRegisterString(gameObject, (int) EventCodeDefine.XXX);
xx
isRecycleAfterTrigger= true参数,当执行完事件后会自动回收这个对象,所有不要在后续再使用这个事件参数
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().TriggerDefault((int) EventCodeDefine.XXX);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 EventParameter
if (MEventCenter.IsValidate())
MEventCenter.GetInstance().TriggerObj((int) EventCodeDefine.XXX,YYY, bool isAutoRecycleEventParameter = true);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 int
MEventCenter.GetInstance().TriggerInt((int) EventCodeDefine.XXX,YYY);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 uint
MEventCenter.GetInstance().TriggerUInt((int) EventCodeDefine.XXX,YYY);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 long
MEventCenter.GetInstance().TriggerLong((int) EventCodeDefine.XXX,YYY);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 float
MEventCenter.GetInstance().TriggerFloat((int) EventCodeDefine.XXX,YYY);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 double
MEventCenter.GetInstance().TriggerDouble((int) EventCodeDefine.XXX,YYY);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 bool
MEventCenter.GetInstance().TriggerBool((int) EventCodeDefine.XXX,YYY);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 vector2
MEventCenter.GetInstance().TriggerVector2((int) EventCodeDefine.XXX,YYY);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 vector3
MEventCenter.GetInstance().TriggerVector3((int) EventCodeDefine.XXX,YYY);
//触发全局事件 事件id 参数1 指定,参数参数2指定类型 string
MEventCenter.GetInstance().TriggerString((int) EventCodeDefine.XXX,YYY);
namespace DMM.Core
{
/// <summary>
/// 在特化参数外的 通用参数(避免直接使用 object 类型参数,特别是lua 调用时候浮点数类型不一致)
/// </summary>
#if UNITY_EDITOR
[System.Serializable]
#endif
public class EventParameter
{
public long m_LongParameter;
public double m_DoubleParameter;
public string m_StringParameter;
public Vector2 m_Vector2Parameter;
public Vector3 m_Vector3Parameter;
public object m_ObjectParameter = null;
#if UNITY_EDITOR
public override string ToString()
{
return string.Format($"m_LongParameter={m_LongParameter} \n") +
string.Format($" m_DoubleParameter={m_DoubleParameter} m_StringParameter={m_StringParameter} \n") +
string.Format($"m_Vector2Parameter={m_Vector2Parameter} m_Vector3Parameter={m_Vector3Parameter} \n ") +
string.Format($"m_ObjectParameter={m_ObjectParameter} \n");
}
#endif
#if UNITY_EDITOR
public override string ToString()
{
return string.Format($"m_LongParameter={m_LongParameter} \n") +
string.Format($" m_DoubleParameter={m_DoubleParameter} m_StringParameter={m_StringParameter} \n") +
string.Format($"m_Vector2Parameter={m_Vector2Parameter} m_Vector3Parameter={m_Vector3Parameter} \n ") +
string.Format($"m_ObjectParameter={m_ObjectParameter} \n");
}
#endif
#region 类型转换接口 API
/// <summary>
/// 获取 m_LongParameter 参数转换为 uint 类型
/// </summary>
/// <returns></returns>
public uint AsUintFromLong() => (uint) m_LongParameter;
/// <summary>
/// 获取 m_LongParameter 参数转换为 int 类型
/// </summary>
/// <returns></returns>
public int AsIntFromLong() => (int) m_LongParameter;
/// <summary>
/// 获取 m_LongParameter 参数转换为 bool 类型
/// </summary>
/// <returns></returns>
public bool AsBoolFromLong() => m_LongParameter != 0;
/// <summary>
/// 获取 m_DoubleParameter 参数转换为 float 类型
/// </summary>
/// <returns></returns>
public uint AsFloatFromDouble() => (uint) m_DoubleParameter;
/// <summary>
/// 获取 m_DoubleParameter 参数转换为 uint 类型
/// </summary>
/// <returns></returns>
public uint AsUintFromDouble() => (uint) m_DoubleParameter;
/// <summary>
/// 获取 m_DoubleParameter 参数转换为 int 类型
/// </summary>
/// <returns></returns>
public int AsIntFromDouble() => (int) m_DoubleParameter;
/// <summary>
/// 获取 m_DoubleParameter 参数转换为 bool 类型
/// </summary>
/// <returns></returns>
public bool AsBoolFromDouble() => m_DoubleParameter != 0;
#endregion
}
/// <summary>
/// 获取一个通用参数类型对象 内部维持一个对象池
/// </summary>
/// <returns></returns>
public static EventParameter GetEventParameterIns()
{
return MEventCenter.GetInstance().GetEventParameterIns();
}
/// <summary>
/// 回收指定的参数对象
/// </summary>
/// <param name="eventParameter"></param>
public static void RecycleEventParameter(EventParameter eventParameter)
{
if (eventParameter == null) return;
MEventCenter.GetInstance().RecycleEventParameter(eventParameter);
}
ss
/// <summary>
/// 供EventCenter使用,用于定义需要处理的消息,每个枚举必须定义唯一的一值.每个类型最好预留一部分数据段,枚举值按照从小到大顺序排列
/// </summary>
public enum EventCodeDefine {
#region C#层全局通用事件[-1,-5000]
OnNotifyLoginOut = -1, //通知退出登录
OnNotifyRestart = -2, //重启Unity
NotifyOverDayBefore = -3, //跨天
NotifyOverDay = -4, //跨天
NotifyLoginSuccess = -5, //登录成功
NotifyReturnLobbyFromGame = -6, //单局返回大厅
NotifyPlayerInfoChanged = -7, //角色信息更新
NotifyCameraZoomOffset = -8, //摄像机滚轮滚动
NotifySkinSuiteCountChanged = -9, //套装数量改变
OnActivityLobbyRedPointChange = -10, //大厅红点数据更新
#endregion
#region ***Lua 相关事件 [-5001,-10000]***
#endregion
NotifyCurrencyItemRefresh=4, //某个代币信息需要刷新
NotifyComRedPointNotify=14, //通用红点状态通知更新
NotifyLobbyBannerUpdate=15, //首页Banner图需要更新
OnFinishLotteryBoxOpen=16,
}
/// <summary>
/// 为了转换 UIDataBinder 中的事件到其他事件系统的一个中转类,后期可能会删减 UIDataBinder 触发事件
/// </summary>
public class EventTriggerController
{
#region 通用
/// <summary>
/// 玩家数据更新
/// </summary>
public static void TriggerPlayerInfoChange() {
UIDataEvents.Inst.InvokeEvent("OnPlayerInfoChanged");
MEventCenter.GetInstance().TriggerDefault((int) EventCodeDefine.NotifyPlayerInfoChanged);
}
/// <summary>
/// 玩家数据更新
/// </summary>
public static void TriggerOverDayEvent() {
#if UNITY_EDITOR
GLog.LogInfo($"TriggerOverDayEvent 跨天了");
#endif
UIDataEvents.Inst.InvokeEvent("OverDayEvent");
MEventCenter.GetInstance().TriggerDefault((int) EventCodeDefine.NotifyOverDay);
}
/// <summary>
/// 套装部件数据更新
/// </summary>
public static void TriggerOnSkinSuiteCountChanged() {
UIDataEvents.Inst.InvokeEvent("OnSkinSuiteCountChagned");
MEventCenter.GetInstance().TriggerDefault((int) EventCodeDefine.NotifySkinSuiteCountChanged);
}
}
ss
ss
ss