示例#1
0
 //添加监听,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);
         }
     }
 }
示例#2
0
        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);
            }
        }
示例#3
0
 //消息分发,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);
             }
         }
     }
 }
示例#4
0
 public virtual void SetGameObject(GameObjBase obj)
 {
     m_GameObject = obj;
 }
示例#5
0
 public virtual void Init(GameObjBase go)
 {
     m_Owner = go;
 }
示例#6
0
 public override void SetGameObject(GameObjBase obj)
 {
     base.SetGameObject(obj);
 }
示例#7
0
 public void Init(GameObjBase go, float speed)
 {
     m_Owner   = go;
     moveSpeed = speed;
 }
示例#8
0
 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);
         }
     }
 }