//添加监听,eobj=null时为全局监听,!=null时挂在eobj上。 public static void AddEventListener(int eventID, Action <GameEventData> handler, GameObjBase eobj = null) { if (eobj != null) { eobj.AddEventListener(eventID, handler); } else { if (GameDispatch.m_DicEvent.ContainsKey(eventID)) { List <Delegate> ld = GameDispatch.m_DicEvent[eventID]; if (ld.Contains(handler)) { Debug.LogError("EventListener Actionhandler Error!"); } else { ld.Add(handler); } } else { List <Delegate> ld = new List <Delegate>(); ld.Add(handler); GameDispatch.m_DicEvent.Add(eventID, ld); } } }
public override void Init(GameObjBase gobj) { base.Init(gobj); Assembly asm = Assembly.GetExecutingAssembly(); string statemapname = "FSM_" + gobj.GetType().Name; if (gobj.GetType().Name == "NpcPlayer" || gobj.GetType().Name == "Pet") { statemapname = "FSM_" + "NetPlayer"; } ClashFsmStateMap stateMap = DBManager.m_DBFsm.GetFsmStateMap(statemapname); // Debug.Log("class nema===================================================================================================" + statemapname); if (stateMap == null) { Debug.LogError("<FSM not exist>:FSM.name = " + statemapname); return; } foreach (ClashFsmStateMap.State state in stateMap.States) { ClashFsmStateBase newState = (ClashFsmStateBase)asm.CreateInstance(GDefine.m_GameNamespace + state.Name); //Debug.Log("class nemastate name=" + newState.GetType().Name); if (newState == null) { Debug.LogError("<FSM error>:state not exist: fsm.name = " + statemapname + "state.name = " + state.Name); continue; } newState.SetGameObject(m_Owner); foreach (ClashFsmStateMap.Dest dest in state.Dests) { LinkState newLink = new LinkState(); newLink.m_StateName = dest.Name; newLink.m_EventId = dest.EventID; // TODO Add Conditions foreach (ClashFsmStateMap.Condition cond in dest.Conditions) { if (!newLink.m_AllConditions.ContainsKey(cond.Name)) { newLink.m_AllConditions.Add(cond.Name, cond.Params); } else { Debug.LogError("<FSM error>: same condition can't be added in one dest twice!"); } } newState.m_LinkStateList.Add(newLink); } AddState(newState); } }
//消息分发,eobj=null全局广播,!=null直接发给挂在eobj上的监听 public static void DispatchEvent(GameEventData edata, GameObjBase eobj = null) { if (eobj != null) { eobj.DispatchEvent(edata); } else { //Debug.Log("edata.m_iEventID"+edata.m_iEventID); if (m_DicEvent.ContainsKey(edata.m_iEventID)) { List <Delegate> ld = m_DicEvent[edata.m_iEventID]; for (int i = ld.Count - 1; i >= 0; i--) { // Debug.Log("ld.Count"+ld.Count); Action <GameEventData> gameaction = (Action <GameEventData>)ld[i]; gameaction(edata); } } } }
public virtual void SetGameObject(GameObjBase obj) { m_GameObject = obj; }
public virtual void Init(GameObjBase go) { m_Owner = go; }
public override void SetGameObject(GameObjBase obj) { base.SetGameObject(obj); }
public void Init(GameObjBase go, float speed) { m_Owner = go; moveSpeed = speed; }
public static void RemoveEventListener(int eventID, Action <GameEventData> handler, GameObjBase eobj = null) { if (eobj != null) { eobj.RemoveEventListener(eventID, handler); } else { if (GameDispatch.m_DicEvent.ContainsKey(eventID)) { List <Delegate> ld = GameDispatch.m_DicEvent[eventID]; ld.Remove(handler); } } }