源码里面有一个消息系统,把这个消息系统挖出来,然后单独的一个EventCenter就出来了,文章最后面会有演示如何使用.
先来看看都有哪些文件:
Assets/Scripts/Common/目录下
Callback.cs,
Event.cs,
EventCenter.cs,
EventDefine.cs.
Callback.cs:
//无参数
public delegate void Callback();
//一个参数
public delegate void Callback<T>(T arg1);
//两个参数
public delegate void Callback<T, U>(T arg1, U arg2);
//三个参数
public delegate void Callback<T, U, V>(T arg1, U arg2, V arg3);
//四个参数
public delegate void Callback<T, U, V, X>(T arg1, U arg2, V arg3, X arg4);
Event.cs:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class CEvent
{
//Event类型
private EGameEvent eventId;
//参数表
private Dictionary<string, object> paramList;
public CEvent()
{
paramList = new Dictionary<string, object> ();
}
public CEvent(EGameEvent id)
{
eventId = id;
paramList = new Dictionary<string, object> ();
}
public EGameEvent GetEventId()
{
return eventId;
}
public void AddParam(string name, object value)
{
paramList [name] = value;
}
public object GetParam(string name)
{
if (paramList.ContainsKey(name))
{
return paramList [name];
}
return null;
}
public bool HasParam(string name)
{
if (paramList.ContainsKey(name))
{
return true;
}
return false;
}
public int GetParamCount()
{
return paramList.Count;
}
public Dictionary<string, object> GetParamList()
{
return paramList;
}
}
EventDefine.cs
using UnityEngine;
using System.Collections;
//Event事件enum
public enum EGameEvent
{
eGameEvent_ErrorStr = 1,
eGameEvent_ConnectServerFail,
eGameEvent_ConnectServerSuccess,
eGameEvent_ReConnectSuccess,
eGameEvent_ReConnectFail,
eGameEvent_InputUserData,
eGameEvent_SelectServer,
eGameEvent_IntoLobby,
eGameEvent_IntoRoom,
eGameEvent_RoomBack,
eGameEvent_RoomEnd,
eGameEvent_IntoHero,
eGameEvent_Loading,
eGameEvent_LoadingEnd,
eGameEvent_GameOver,
eGameEvent_ReConnectToBattle,
eGameEvent_BattleFinished,
eGameEvent_AskReadySucces,
eGameEvent_AskLeaveBattleSucces,
eGameEvent_BattleStateChange,
eGameEvent_AskComplementedRegisterInfo,
eGameEvent_AskAddInBattle,
eGameEvent_TheBattleUserFull,
eGameEvent_NullBattle,
eGameEvent_BattlePDWNotMatch,
eGameEvent_NullUser,
eGameEvent_InvalidMapID,
eGameEvent_InvalidBattlePos,
eGameEvent_JustInBattle,
eGameEvent_JustNotInBattle,
eGameEvent_UserDonotInTheBattle,
eGameEvent_InvalidBattleState,
eGameEvent_YouAreNotBattleManager,
eGameEvent_NotAllUserReady,
eGameEvent_NotEnoughGold,
eGameEvent_Reborn,
eGameEvent_PlayerEnterAlter,
eGameEvent_ChangeMapState,
eGameEvent_UpdateUserGameItems,
eGameEvent_GameStartTime,
eGameEvent_OpenUIPlay,
eGameEvent_SceneChange,
eGameEvent_SystemNoticeCreatePrefab,
eGameEvent_CreateDailyBonus,
eGameEvent_DailyBonus,
eGameEvent_RemoveDailyBonus,
eGameEvent_ChangeMoney,
eGameEvent_UpdateMiniMap,
eGameEvent_InitMiniMap,
eGameEvent_AddMiniMap,
eGameEvent_RemoveMiniMap,
eGameEvent_BroadcastBeAtk,
eGameEvent_RemoveMiniWarning,
eGameEvent_AllPlayerGoods,
eGameEvent_AllPlayerAssist,
eGameEvent_AllPlayerKills,
eGameEvent_AllPlayerDeaths,
eGameEvent_AllPlayerCp,
eGameEvent_AllPlayerLevel,
eGameEvent_AllPlayerLastHit,
eGameEvent_NotifyChangeKills,
eGameEvent_NotifyChangeDeaths,
eGameEvent_LocalPlayerCp,
eGameEvent_PlayerGetCp,
eGameEvent_LocalPlayerAssist,
eGameEvent_UpLv,
eGameEvent_BeginWaiting,
eGameEvent_EndWaiting,
eGameEvent_MatchNumber,
eGameEvent_EntityHpChange, //entityHP改变
eGameEvent_EntityMpChange, //entityMP改变
//OB
eGameEvent_HeroInfoChange,
eGameEvent_HeroHpChange,
eGameEvent_HeroLvChange,
eGameEvent_HeroMpChange,
eGameEvent_SkillUpLvChange,
eGameEvent_SkillInfo,
eGameEvent_HeroHeadInfoChange,
eGameEvent_HeroDeathTime,
eGameEvent_HeroBackTown,
eGameEvent_AbsSkillInfo,
eGameEvent_SkillCDInfo,
eGameEvent_FuryStateInfo,
eGameEvent_PackageBuyInfo,
eGameEvent_PersonInitInfo,
eGameEvent_InviteAddFriendInfo,
eGameEvent_RemoveFriend,
eGameEvent_RemoveFriendEnd,
eGameEvent_FriendPersonInfo, //详细信息
eGameEvent_BlackInfo, //黑名单简介
eGameEvent_ReceiveLobbyMsg,
eGameEvent_ReceiveNewMsg,
eGameEvent_RemoveChatTask,
eGameEvent_InvitationMsg,
eGameEvent_FindFriendInfo,
eGameEvent_FindClear,
eGameEvent_TalkUIDetails,
eGameEvent_AskFriendError,
eGameEvent_HeroReborn, //英雄复活
eGameEvent_NotyfyDeathEnter,
eGameEvent_NotifyDeathExit,
eGameEvent_ChatCheck,
eGameEvent_LockTarget, //广播自己锁定目标
eGameEvent_AddOrDelEnemy, //广播增加或者删除敌方玩家
eGameEvent_SSPingInfo, //广播SSPing
eGameEvent_NotifyChangeCp, //Cp改变
eGameEvent_NotifyHpLessWarning, //血量警告特效
eGameEvent_NotifyOpenShop, //打开商店,关闭商店
eGameEvent_NotifyBuildingDes, //Ientity死亡
eGameEvent_GuideShowBuildingTips,
//sdk event
eGameEvent_SdkRegisterSuccess, //sdk登陆成功
eGameEvent_SdkServerCheckSuccess, //服务器向SDK验证成功
eGameEvent_SdkLogOff,
//Login
eGameEvent_LoginEnter, //进入登陆
eGameEvent_LoginExit, //退出登陆
eGameEvent_LoginError, //登录错误码
eGameEvent_LoginSuccess, //登陆成功
eGameEvent_LoginFail, //登陆失败
//system notic
eGameEvent_SystemNoticeEnter,
eGameEvent_SystemNoticeExit,
//兑换码
eGameEvent_ExtraBonusEnter,
eGameEvent_ExtraBonusExit,
//英雄时限
eGameEvent_TimeLimitHeroEnter,
eGameEvent_TImeLimitHeroExit,
//英雄信息
eGameEvent_HeroDatumEnter,
eGameEvent_HeroDatumExit,
//user info
eGameEvent_UserEnter, //进入用户信息设置
eGameEvent_UserExit, //退出用户信息设置
//账号获得物品
eGameEvent_UserGetGoodsHero, //获得英雄
eGameEvent_UserGetGoodsNml, //获得普通物品
eGameEvent_UserGetMoney,
eGameEvent_RefreshGoodHero, //刷新商城显示物品
eGameEvent_CsGetNewHero, //账号获得新的英雄
eGameEvent_RefreshTimeLimitHero,
//lobby
eGameEvent_LobbyEnter, //进入大厅
eGameEvent_LobbyExit, //退出大厅
eGameEvent_BattleEnter, //进入战斗
eGameEvent_BattleExit, //退出战斗
eGameEvent_MarketEnter,
eGameEvent_MarketExit,
eGameEvent_MarketHeroListEnter,
eGameEvent_MarketHeroListExit,
eGameEvent_MarketHeroInfoEnter,
eGameEvent_MarketHeroInfoExit,
eGameEvent_HeroTimeLimitEnter,
eGameEvent_HeroTimeLimitExit,
eGameEvent_MarketRuneListEnter,
eGameEvent_MarketRuneListExit,
eGameEvent_MarketRuneInfoEnter,
eGameEvent_MarketRuneInfoExit,
eGameEvent_MarketRuneBuyEnter,
eGameEvent_MarketRuneBuyExit,
eGameEvent_RuneEquipWindowEnter,
eGameEvent_RuneEquipWindowExit,
eGameEvent_RuneCombineWindowEnter,
eGameEvent_RuneCombineWindowExit,
eGameEvent_RuneRefreshCardUpdate,
eGameEvent_RuneRefreshWindowEnter,
eGameEvent_RuneRefreshWindowExit,
eGameEvent_RuneBuyWindowEnter,
eGameEvent_RuneBuyWindowExit,
eGameEvent_PurchaseSuccessWindowEnter,
eGameEvent_PurchaseSuccessWindowExit,
eGameEvent_PurchaseRuneSuccessWin,
eGameEvent_RuneQuipUpdate,
eGameEvent_RuneQuipUnload,
eGameEvent_RuneBagUpdata,
eGameEvent_GameSettingEnter,
eGameEvent_GameSettingExit,
eGameEvent_TeamMatchEnter, //进入组队匹配
eGameEvent_TeamMatchExit, //退出组队匹配
eGameEvent_TeamMatchAddTeammate, //增加队友
eGameEvent_TeamMatchDelTeammatem, //删除队友
eGameEvent_TeamMatchInvitationEnter, //组队邀请界面
eGameEvent_TeamMatchInvitationExit, //组队邀请界面退出
eGameEvent_TeamMatchSearchingEnter, //匹配中界面
eGameEvent_TeamMatchSearchingExit, //匹配中界面
eGameEvent_ServerMatchInvitationEnter, //服务器匹配邀请界面
eGameEvent_ServerMatchInvitationExit, //服务器匹配邀请界面退出
eGameEvent_HomePageEnter, //进入主页
eGameEvent_HomePageExit, //退出主页
//个人信息
eGameEvent_PersonInfoEnter,
eGameEvent_PersonInfoExit,
eGameEvent_ChangeNickName,
eGameEvent_ChangeHeadID,
eGameEvent_ChangeUserLevel,
//VIP
eGameEvent_VIPPrerogativeEnter,
eGameEvent_VIPPrerogativeExit,
//mail
eGameEvent_MailEnter,
eGameEvent_MailExit,
eGameEvent_AskMailInfo,
eGameEvent_AskCloseOrGetMailGift,
eGameEvent_UpdateMailList,
eGameEvent_UpdateMailInfo,
eGameEvent_AddNewMailReq,
eGameEvent_AddNewMailRsp,
eGameEvent_SetDefaultMailInfo,
eGameEvent_BattleUpdateRoomList, //更新房间列表
//social
eGameEvent_SocialEnter,
eGameEvent_SocialExit,
eGameEvent_CreateFriendPrefab,
eGameEvent_CreateBlackPrefab,
eGameEvent_FriendChangeInfo, //简介
//Invite
eGameEvent_InviteCreate,
eGameEvent_InviteEnter,
eGameEvent_InviteExit,
eGameEvent_InviteChange,
//在大厅接收Invite
eGameEvent_InviteAddRoom,
eGameEvent_InviteRoomEnter,
eGameEvent_InviteRoomExit,
eGameEvent_NewInviteRoom,
//chatTask
eGameEvent_ChatTaskEnter,
eGameEvent_ChatTaskExit,
eGameEvent_ChatTaskFriend,
eGameEvent_ReadyChatTaskEnter,
eGameEvent_ShowChatTaskFriend,
//room
eGameEvent_RoomEnter, //进入登陆
eGameEvent_RoomExit, //退出登陆
eGameEvent_AskBeginBattleError, //开始游戏错语反馈
eGameEvent_SeatPosUpdate, //更新座位
eGameEvent_RecvChatMsg, //收到房间聊天消息
//RoomOpenInvite
eGameEvent_RoomInviteEnter,
eGameEvent_RoomInviteExit,
eGameEvent_InviteList,
//hero
eGameEvent_HeroEnter, //进入英雄选择
eGameEvent_HeroExit, //退出英雄选择
eGameEvent_HeroPreSelect, //英雄预选择
eGameEvent_HeroRealSelect, //英雄选择确认
eGameEvent_HeroAddSelect, //增加一个英雄选择
eGameEvent_HeroEnterRamdon, //进入随机选择英雄
eGameEvent_HeroFirstTime, //第一次读秒时间
eGameEvent_HeroSecondTime, //第二次读秒时间
eGameEvent_HeroReconnectPreSelect, //重连预选择选择
//play
eGameEvent_BattleInfoEnter, //进入实时战斗查看信息
eGameEvent_BattleInfoExit, //退出实时战斗查看信息
eGameEvent_BattleIngEnter, //查看当前战绩
eGameEvent_BattleMineEnter, //查看自己当前的属性
eGameEvent_BattleTimeDownEnter, //进入战斗倒计时
//LocalPlayer
eGameEvent_LocalPlayerHpChange,
eGameEvent_LocalPlayerMpChange,
eGameEvent_LocalPlayerLevelChange,
eGameEvent_LocalPlayerExpChange,
eGameEvent_LocalPlayerInit,
eGameEvent_LocalPlayerPassiveSkillsUpLv,
eGameEvent_LocalPlayerPassiveSkills,
eGameEvent_LocalPlayerSkillCD,
eGameEvent_LocalPlayerSilence,
eGameEvent_SkillDescribleType,
eGameEvent_SkillDescribleId,
eGameEvent_SkillDescribleUpdate,
eGameEvent_LocalPlayerUpdateFuryValue,
eGameEvent_LocalPlayerUpdateFuryEffect,
eGameEvent_LocalPlayerRange,
//over
eGameEvent_ScoreEnter, //进入胜负显示
eGameEvent_ScoreExit, //退出胜负显示
eGameEvent_SettlementEnter, //进入结算显示
eGameEvent_SettlementExit, //退出结算显示
eGameEvent_GamePlayEnter,
eGameEvent_GamePlayExit,
eGameEvent_HeroAttributesInfo,
//吸附
eGameEvent_SoleSoldierEnter,
eGameEvent_SoleSoldierExit,
eGameEvent_ResetAbsHead,
eGameEvent_ResetLockHead,
eGameEvent_AbsorbResult,
//新手引导
eGameEvent_UIGuideEnter,
eGameEvent_UIGuideExit,
eGameEvent_UIGuideEvent,
eGameEvent_PlayGuideEnter,
eGameEvent_PlayGuideExit,
eGameEvent_PlayGuideDragEvent,
eGameEvent_PlayGuideTaskFinish,
eGameEvent_PlayChildTaskFinish,
eGameEvent_PlayTaskModelFinish,
eGameEvent_GuideKillTask,
eGameEvent_GuideAbsorbTask,
eGameEvent_GuideLockTargetCanAbsorb, //如果锁定了可以吸附的小怪
eGameEvent_GuideLockTargetCanNotAbsorb, //锁定对象为空了或者锁定对象不能吸附
//进阶引导
eGameEvent_AdvancedGuideEnter,
eGameEvent_AdvancedGuideExit,
eGameEvent_AdvancedGuideShowTip,
eGameEvent_AdvancedGuideBeAttackByBuilding,
//其他
eGameEvent_ShowMessage, //显示MessageBox
eGameEvent_ShowLogicMessage,
//DailyBonus
eGameEvent_DailyBonusEnter,
eGameEvent_DailyBonusExit,
eGameEvent_DailyBonusUpdate,
eGameEvent_NotifyAllTaskUpdate,
eGameEvent_NotifyDailyTaskUpdate,
eGameEvent_NotifyOneTaskAdd,
eGameEvent_NotifyOneTaskUpdate,
eGameEvent_NotifyOneTaskDel,
eGameEvent_NotifyOneTaskRewards,
//UIGuide //register guide
eGameEvent_UIGuideTriggerRegister = -5000,
eGameEvent_UIGuideTriggerNewsGuide = -5001,
eGameEvent_UIGuideTriggerSelfDefGame = -5002,
eGameEvent_UIGuideTriggerCreateRoom = -5003,
eGameEvent_UIGuideTriggerBackLobby = -5004,
eGameEvent_UIGuideTriggerMatchGame = -5005,
eGameEvent_UIGuideTriggerSelectHero = -5006,
eGameEvent_UIGuideTriggerRoomBeginGame = -5007,
eGameEvent_SecondaryGuideTipToBuyStart = -5008,
eGameEvent_SecondaryGuideTipToBackCityStart = -5009,
eGameEvent_SecondaryGuideTipToFurySkillStart = -5010,
eGameEvent_SecondaryGuideTipToShopCpStart = -5011,
eGameEvent_SecondaryGuideTipToBuyEnd = -5012,
eGameEvent_SecondaryGuideTipToBackCityEnd = -5013,
eGameEvent_SecondaryGuideTipToFurySkillEnd = -5014,
eGameEvent_SecondaryGuideTipToShopCpEnd = -5015,
eGameEvent_UIGuideInputNickNameStart = -8000,
eGameEvent_UIGuideSelectSexStart = -8001,
eGameEvent_UIGuideSelectHeadStart = -8002,
eGameEvent_UIGuideCommitRegisterStart = -8003,
eGameEvent_UIGuideNewsGuideStart = -8004,
eGameEvent_UIGuideSelfDefBtnStart = -8005,
eGameEvent_UIGuideSelectPrimaryBtnStart = -8006,
eGameEvent_UIGuideCreateRoomBtnStart = -8007,
eGameEvent_UIGuideBackLobbyBtnStart = -8008,
eGameEvent_UIGuideMatchBtnStart = -8009,
eGameEvent_UIGuideRoomBeginBtnStart = -8010,
eGameEvent_UIGuideSelectHeroHeadStart = -8011,
eGameEvent_UIGuideSelectHeroCommitStart = -8012,
eGameEvent_UIGuideInputNickNameEnd = -1000,
eGameEvent_UIGuideSelectSexEnd = -1001,
eGameEvent_UIGuideSelectHeadEnd = -1002,
eGameEvent_UIGuideCommitRegisterEnd = -1003,
eGameEvent_UIGuideNewsGuideEnd = -1004,
eGameEvent_UIGuideSelfDefBtnEnd = -1005,
eGameEvent_UIGuideSelectPrimaryBtnEnd = -1006,
eGameEvent_UIGuideSelectCreateRoomBtnEnd = -1007,
eGameEvent_UIGuideBackLobbyBtnEnd = -1008,
eGameEvent_UIGuideMatchBtnEnd = -1009,
eGameEvent_UIGuideRoomBeginBtnEnd = -1010,
eGameEvent_UIGuideSelectHeroHeadEnd = -1011,
eGameEvent_UIGuideSelectHeroCommitEnd = -1012,
}
最后是EventCenter.cs:
using System;
using System.Collections.Generic;
using UnityEngine;
static internal class EventCenter
{
//EventTable
static public Dictionary<EGameEvent, Delegate> mEventTable = new Dictionary<EGameEvent, Delegate> ();
//保存一直存在,不会被删除的Event
static public List<EGameEvent> mPermanentMessages = new List<EGameEvent> ();
//把event加进mPermanentMessages里面
static public void MarkAsPermanent(EGameEvent eventType)
{
mPermanentMessages.Add (eventType);
}
//删除除了需要一直存在的其他的所有event
static public void Cleanup()
{
List<EGameEvent> messagesToRemove = new List<EGameEvent> ();
foreach(KeyValuePair<EGameEvent, Delegate> pair in mEventTable)
{
bool wasFound = false;
foreach (EGameEvent message in mPermanentMessages)
{
if (pair.Key == message)
{
wasFound = true;
break;
}
}
if (!wasFound)
{
messagesToRemove.Add (pair.Key);
}
}
foreach (EGameEvent message in messagesToRemove)
{
mEventTable.Remove (message);
}
}
//打印当前eventTable中的所有event
static public void PrEGameEventEventTable()
{
Debug.Log ("\t\t\t=== MESSENGER PrEGameEventEventTable ===");
foreach(KeyValuePair<EGameEvent, Delegate> pair in mEventTable)
{
Debug.Log ("\t\t\t" + pair.Key + "\t\t" + pair.Value);
}
Debug.Log ("\n");
}
//添加Listener之前的的准备工作
static public void OnListenerAdding(EGameEvent eventType, Delegate listenerBeingAdded)
{
if (!mEventTable.ContainsKey(eventType))
{
mEventTable.Add (eventType, null);
}
Delegate d = mEventTable [eventType];
if (d != null && d.GetType() != listenerBeingAdded.GetType())
{
throw new ListenerException (string.Format ("Attempting to add listener with inconsistent signature for event type {0}. Current listeners have type {1} and listener being added has type {2}", eventType, d.GetType ().Name, listenerBeingAdded.GetType ().Name));
}
}
//删除Listener之前的准备工作
static public void OnListenerRemoving(EGameEvent eventType, Delegate listenerBeingRemoved)
{
if (mEventTable.ContainsKey(eventType))
{
Delegate d = mEventTable[eventType];
if (d == null)
{
throw new ListenerException(string.Format("Attempting to remove listener with for event type \"{0}\" but current listener is null.", eventType));
}
else if (d.GetType() != listenerBeingRemoved.GetType())
{
throw new ListenerException(string.Format("Attempting to remove listener with inconsistent signature for event type {0}. Current listeners have type {1} and listener being removed has type {2}", eventType, d.GetType().Name, listenerBeingRemoved.GetType().Name));
}
}
else
{
throw new ListenerException(string.Format("Attempting to remove listener for type \"{0}\" but Messenger doesn't know about this event type.", eventType));
}
}
static public void OnListenerRemoved(EGameEvent eventType)
{
if (mEventTable[eventType] == null)
{
mEventTable.Remove (eventType);
}
}
//进行broadcast之前的准备
//啥也没做啊
static public void OnBroadcasting(EGameEvent eventType)
{
if (!mEventTable.ContainsKey(eventType))
{
}
}
static public BroadcastException CreateBroadcastSignatureException(EGameEvent eventType)
{
return new BroadcastException(string.Format("Broadcasting message \"{0}\" but listeners have a different signature than the broadcaster.", eventType));
}
//其实就是抛出Exception
public class BroadcastException: Exception
{
public BroadcastException(string msg)
:base(msg)
{
}
}
public class ListenerException: Exception
{
public ListenerException(string msg)
:base(msg)
{
}
}
//无参数
static public void AddListener(EGameEvent eventType, Callback handler)
{
OnListenerAdding (eventType, handler);
//这个“+”号表示:一个delegate实例可以实现组播(multicast)
//当触发事件时,组播里所有callback一次调用
mEventTable [eventType] = (Callback)mEventTable [eventType] + handler;
}
//单个参数
static public void AddListener<T>(EGameEvent eventType, Callback<T> handler)
{
OnListenerAdding (eventType, handler);
mEventTable [eventType] = (Callback<T>)mEventTable [eventType] + handler;
}
//两个参数
static public void AddListener<T, U>(EGameEvent eventType, Callback<T, U> handler)
{
OnListenerAdding (eventType, handler);
mEventTable [eventType] = (Callback<T, U>)mEventTable [eventType] + handler;
}
//三个参数
static public void AddListener<T, U, V>(EGameEvent eventType, Callback<T, U, V> handler)
{
OnListenerAdding (eventType, handler);
mEventTable [eventType] = (Callback<T, U, V>)mEventTable [eventType] + handler;
}
//四个函数
static public void AddListener<T, U, V, X>(EGameEvent eventType, Callback<T, U, V, X> handler)
{
OnListenerAdding (eventType, handler);
mEventTable [eventType] = (Callback<T, U, V, X>)mEventTable [eventType] + handler;
}
//无参数
static public void RemoveListener(EGameEvent eventType, Callback handler)
{
OnListenerRemoving (eventType, handler);
mEventTable [eventType] = (Callback)mEventTable [eventType] - handler;
OnListenerRemoved (eventType);
}
//单个参数
static public void RemoveListener<T>(EGameEvent eventType, Callback<T> handler)
{
OnListenerRemoving (eventType, handler);
mEventTable [eventType] = (Callback<T>)mEventTable [eventType] - handler;
OnListenerRemoved (eventType);
}
//两个参数
static public void RemoveListener<T, U>(EGameEvent eventType, Callback<T, U> handler)
{
OnListenerRemoving (eventType, handler);
mEventTable [eventType] = (Callback<T, U>)mEventTable [eventType] - handler;
OnListenerRemoved (eventType);
}
//三个参数
static public void RemoveListener<T, U, V>(EGameEvent eventType, Callback<T, U, V> handler)
{
OnListenerRemoving (eventType, handler);
mEventTable [eventType] = (Callback<T, U, V>)mEventTable [eventType] - handler;
OnListenerRemoved (eventType);
}
//四个参数
static public void RemoveListener<T, U, V, X>(EGameEvent eventType, Callback<T, U, V, X> handler)
{
OnListenerRemoving (eventType, handler);
mEventTable [eventType] = (Callback<T, U, V, X>)mEventTable [eventType] - handler;
OnListenerRemoved (eventType);
}
//无参数
static public void Broadcast(EGameEvent eventType)
{
OnBroadcasting (eventType);
Delegate d;
if (mEventTable.TryGetValue(eventType, out d))
{
Callback callback = d as Callback;
if (callback != null)
{
callback ();
}
else
{
throw CreateBroadcastSignatureException (eventType);
}
}
}
//如其名,把CEvent传进需要的地方,但暂时不知道该怎么样
static public void SendEvent(CEvent evt)
{
Broadcast<CEvent> (evt.GetEventId (), evt);
}
//单个参数
static public void Broadcast<T>(EGameEvent eventType, T arg1)
{
OnBroadcasting (eventType);
Delegate d;
if (mEventTable.TryGetValue(eventType, out d))
{
Callback<T> callback = d as Callback<T>;
if (callback != null)
{
callback (arg1);
}
else
{
throw CreateBroadcastSignatureException (eventType);
}
}
}
//两个参数
static public void Broadcast<T, U>(EGameEvent eventType, T arg1, U arg2)
{
OnBroadcasting (eventType);
Delegate d;
if (mEventTable.TryGetValue(eventType, out d))
{
Callback<T, U> callback = d as Callback<T, U>;
if (callback != null)
{
callback (arg1, arg2);
}
else
{
throw CreateBroadcastSignatureException (eventType);
}
}
}
//三个参数
static public void Broadcast<T, U, V>(EGameEvent eventType, T arg1, U arg2, V arg3)
{
OnBroadcasting (eventType);
Delegate d;
if (mEventTable.TryGetValue(eventType, out d))
{
Callback<T, U, V> callback = d as Callback<T, U, V>;
if (callback != null)
{
callback (arg1, arg2, arg3);
}
else
{
throw CreateBroadcastSignatureException (eventType);
}
}
}
//四个参数
static public void Broadcast<T, U, V, X>(EGameEvent eventType, T arg1, U arg2, V arg3, X arg4)
{
OnBroadcasting (eventType);
Delegate d;
if (mEventTable.TryGetValue(eventType, out d))
{
Callback<T, U, V, X> callback = d as Callback<T, U, V, X>;
if (callback != null)
{
callback (arg1, arg2, arg3, arg4);
}
else
{
throw CreateBroadcastSignatureException (eventType);
}
}
}
}
太长了,如何使用放到下一篇.