Beispiel #1
0
 /// <summary>
 /// 由状态机调用
 /// </summary>
 /// <param name="triggerID"></param>
 /// <param name="stateID"></param>
 public void AddMap(FSMTriggerID triggerID, FSMStateID stateID)
 {
     //条件对应id
     map.Add(triggerID, stateID);
     //创建
     CreateTrigger(triggerID);
 }
Beispiel #2
0
        //创建条件对象
        private void AddTriggerObject(FSMTriggerID triggerID)
        {
            Type type       = Type.GetType("AI.FSM." + triggerID + "Trigger");
            var  triggerObj = Activator.CreateInstance(type) as FSMTrigger;

            triggerList.Add(triggerObj);
        }
Beispiel #3
0
        private void CreateTriggerObject(FSMTriggerID triggerID)
        {//反射
            Type       type = Type.GetType("AI.FSM." + triggerID + "Trigger");
            FSMTrigger obj  = Activator.CreateInstance(type) as FSMTrigger;

            Triggers.Add(obj);
        }
Beispiel #4
0
    /// <summary>
    /// 切换状态
    /// </summary>
    /// <param name="fSMTriggerID">切换条件</param>
    public void ChangeActiveState(FSMTriggerID triggerId)
    {
        if (currentState == null)
        {
            return;
        }
        //根据条件编号,在当前状态查找输出状态
        var stateId = currentState.GetOutPutStateId(triggerId);

        //可能得到的3个结果
        //1.None : 不处理
        if (stateId == FSMStateID.None)
        {
            return;
        }
        //退出当前状态
        currentState.ExitState(this);
        //2.默认状态: 将原默认状态设为当前状态
        if (stateId == FSMStateID.Default)
        {
            currentState = defaultState;
        }
        else //3.具体状态: 将具体状态设为当前状态
        {
            currentState = allState.Find(p => p.stateId == stateId);
        }

        currentSateId = currentState.stateId;
        //进入新状态
        currentState.EnterState(this);
    }
Beispiel #5
0
        /// <summary> 配置状态机 </summary>
        private void ConfigFSM()
        {
            // 读取状态机配置
            var config = AIConfiguration.Load(aiConfigFile);

            foreach (var item in config)
            {
                // 反射创建状态对象
                FSMState state;
                string   path    = "AI.FSM." + item.Key + "State";
                Type     typeObj = Type.GetType(path);
                object   obj     = Activator.CreateInstance(typeObj);
                state = (FSMState)obj;

                foreach (var it in item.Value)
                {
                    // 添加条件映射
                    FSMTriggerID triggerIDenum = (FSMTriggerID)Enum.Parse(typeof(FSMTriggerID), it.Key, true);
                    FSMStateID   stateIDenum   = (FSMStateID)Enum.Parse(typeof(FSMStateID), it.Value, true);
                    state.AddTrigger(triggerIDenum, stateIDenum);
                }
                // 放入状态库中
                states.Add(state);
            }
        }
Beispiel #6
0
 //由状态机调用(为映射表和条件列表赋值)
 public void AddMap(FSMTriggerID triggerID, FSMStateID stateID)
 {
     //添加映射
     map.Add(triggerID, stateID);
     //创建条件对象
     CreateTriggerObject(triggerID);
 }
Beispiel #7
0
 /// <summary>
 /// 移除映射对象
 /// </summary>
 /// <param name="triggerID"></param>
 public void RemoveMap(FSMTriggerID triggerID)
 {
     if (map.ContainsKey(triggerID))
     {
         map.Remove(triggerID);
     }
 }
Beispiel #8
0
 /// <summary>
 /// 添加当前状态的所对应的跳转条件的映射关系
 /// </summary>
 /// <param name="triggerID"></param>
 /// <param name="stateID"></param>
 public void AddMap(FSMTriggerID triggerID, FSMStateID stateID)
 {
     //将编号存入映射表
     map.Add(triggerID, stateID);
     //创建条件对象
     triggers.Add(CreatTriggerObject(triggerID));
 }
Beispiel #9
0
 ///<summary>根据条件获取对应的输出状态</summary>
 private FSMStateID GetOutputState(FSMTriggerID fsmTriggerId)
 {
     if (map.ContainsKey(fsmTriggerId))
     {
         return(map[fsmTriggerId]);
     }
     return(FSMStateID.None);
 }
Beispiel #10
0
 ///<summary>删除条件映射</summary>
 public void RemoveTrigger(FSMTriggerID fsmTriggerId)
 {
     if (map.ContainsKey(fsmTriggerId))
     {
         map.Remove(fsmTriggerId);
         RemoveTriggerObject(fsmTriggerId);
     }
 }
Beispiel #11
0
 /// <summary>
 /// 删除映射表
 /// </summary>
 /// <param name="triggerID"></param>
 public void RemoveFsmMap(FSMTriggerID triggerID)
 {
     if (fsmMap.ContainsKey(triggerID))
     {
         fsmMap.Remove(triggerID);
         RemoveTriggerList(triggerID);
     }
 }
Beispiel #12
0
 //删除条件
 public void RemoveTrigger(FSMTriggerID triggerid)
 {
     if (map.ContainsKey(triggerid))
     {
         map.Remove(triggerid);
         RemoveTriggerObject(triggerid);
     }
 }
Beispiel #13
0
 ///<summary>
 ///查找映射表
 ///</summary>
 public FSMStateID GetOutPutStateId(FSMTriggerID triggerId)
 {
     if (map.ContainsKey(triggerId))
     {
         return(map[triggerId]);
     }
     return(FSMStateID.None);
 }
Beispiel #14
0
 /// <summary>
 /// 删除
 /// </summary>
 /// <param name="triggerId"></param>
 public void DeleteTrigger(FSMTriggerID triggerId)
 {
     if (map.ContainsKey(triggerId))
     {
         map.Remove(triggerId);
         triggers.RemoveAll(p => p.triggerId == triggerId);
     }
 }
Beispiel #15
0
        private void CreateTrigger(FSMTriggerID triggerID)
        {
            //反射获取类型
            Type       type    = Type.GetType("AI.FSM." + triggerID + "Trigger");
            FSMTrigger trigger = Activator.CreateInstance(type) as FSMTrigger;

            Triggers.Add(trigger);
        }
Beispiel #16
0
        private void CreatTrigger(FSMTriggerID triggerID)
        {
            //创建条件对象
            //命名规范"Assets.Script.FSM." + triggerID + "Trigger"
            Type       type    = Type.GetType("Assets.Script.FSM." + triggerID + "Trigger");
            FSMTrigger trigger = Activator.CreateInstance(type) as FSMTrigger;

            Triggers.Add(trigger);
        }
Beispiel #17
0
    //状态机调用
    public void AddMap(FSMTriggerID triggerID, FSMStateID stateID)
    {
        map.Add(triggerID, stateID);

        Type       type    = Type.GetType(triggerID + "Trigger");
        FSMTrigger trigger = Activator.CreateInstance(type) as FSMTrigger;

        Triggers.Add(trigger);
    }
Beispiel #18
0
 ///<summary>
 ///删除条件
 ///</summary>
 public void RemoveTrigger(FSMTriggerID fsmTriggerId)
 {
     //删除map对应的元素
     if (map.ContainsKey(fsmTriggerId))
     {
         map.Remove(fsmTriggerId);
         RemoveTrigger(fsmTriggerId);
     }
 }
Beispiel #19
0
 /// <summary>删除条件映射</summary>
 public void DeleteTrigger(FSMTriggerID triggerId)
 {
     //删除映射的同时,并删除条件对象
     if (map.ContainsKey(triggerId))
     {
         map.Remove(triggerId);
         DeleteTriggerObject(triggerId);
     }
 }
Beispiel #20
0
 /// <summary>查找映射</summary>
 public FSMStateID GetOutputState(FSMTriggerID triggerId)
 {
     //查找映射表,根据条件编号,返回输出状态的编号
     if (map.ContainsKey(triggerId))
     {
         return(map[triggerId]);
     }
     return(FSMStateID.None);
 }
Beispiel #21
0
 //添加映射表
 public void AddFsmMap(FSMTriggerID triggerID, FSMStateID stateID)
 {
     if (!fsmMap.ContainsKey(triggerID))
     {
         fsmMap.Add(triggerID, stateID);
         AddTriggerList(triggerID);
     }
     fsmMap[triggerID] = stateID;
 }
Beispiel #22
0
        private void CreateTriggerObject(FSMTriggerID triggerID)
        {
            //创建条件对象
            //命名规范:"AI.FSM" + 条件枚举 + "Trigger"
            Type       type    = Type.GetType("AI.FSM." + triggerID + "Trigger");
            FSMTrigger trigger = Activator.CreateInstance(type) as FSMTrigger;

            triggers.Add(trigger);
        }
Beispiel #23
0
 /// <summary>添加条件映射</summary>
 public void AddTrigger(FSMTriggerID triggerId, FSMStateID outputStateId)
 {
     if (!map.ContainsKey(triggerId))
     {
         map.Add(triggerId, outputStateId);
         //添加映射的同时,并添加条件对象
         AddTriggerObject(triggerId);
     }
 }
Beispiel #24
0
        ///<summary>添加条件对象</summary>
        private void AddTriggerObject(FSMTriggerID fsmTriggerId)
        {
            var type = Type.GetType("AI.FSM." + fsmTriggerId + "Trigger");

            if (type != null)
            {
                var triggerObj = Activator.CreateInstance(type) as FSMTrigger;
                triggers.Add(triggerObj);
            }
        }
Beispiel #25
0
        //添加条件对象
        private void AddTriggerObject(FSMTriggerID triggerid)
        {
            Type typeobj = Type.GetType("AI.FSM." + triggerid + "Trigger");

            if (typeobj != null)
            {
                var triggerobj = Activator.CreateInstance(typeobj) as FSMTrigger;
                triggers.Add(triggerobj);
            }
        }
        private void CreateTriggerObject(FSMTriggerID triggerID)
        {
            //创建条件对象
            //命名规则:EveryFunc.FSM.+ triggerID + Trigger
            Type type = Type.GetType("EveryFunc.FSM." + triggerID + "Trigger");
            //创建新的条件对象
            FSMTrigger triggerOBJ = Activator.CreateInstance(type) as FSMTrigger;

            //添加对象
            triggers.Add(triggerOBJ);
        }
Beispiel #27
0
 //添加条件
 public void AddTrigger(FSMTriggerID triggerid, FSMStateID stateid)
 {
     if (map.ContainsKey(triggerid))
     {
         map[triggerid] = stateid;
     }
     else
     {
         map.Add(triggerid, stateid);
         AddTriggerObject(triggerid);
     }
 }
Beispiel #28
0
        ///<summary>添加条件映射</summary>
        public void AddMap(FSMTriggerID fsmTriggerId, FSMStateID fsmStateId)
        {
            map.Add(fsmTriggerId, fsmStateId);
            AddTriggerObject(fsmTriggerId);

            //if (!map.ContainsKey(fsmTriggerId))
            //{
            //    map.Add(fsmTriggerId, fsmStateId);
            //    AddTriggerObject(fsmTriggerId);
            //}
            //else
            //{
            //    map[fsmTriggerId] = fsmStateId;
            //}
        }
Beispiel #29
0
        private void AddTriggerObject(FSMTriggerID triggerId)
        {
            //根据triggerId使用反射动态创建trigger的对象
            var type = Type.GetType("AI.FSM." + triggerId + "Trigger");

            if (type != null)
            {
                var obj = Activator.CreateInstance(type) as FSMTrigger;
                //将创建好的对象加入triggers
                if (obj != null)
                {
                    triggers.Add(obj);
                }
            }
        }
Beispiel #30
0
    private void AddTriggerObject(FSMTriggerID fsmTriggerId)
    {
        //根据fsmTriggerId推导出相对应的条件类的名称
        var type = Type.GetType("NPCAI.FSM." + fsmTriggerId + "Trigger");

        if (type != null)
        {
            //反射创建条件类的对象
            var triggerObj = Activator.CreateInstance(type) as FSMTrigger;
            if (triggerObj != null)//将创建好的对象加入到条件列表
            {
                triggers.Add(triggerObj);
            }
        }
    }