/// <summary> /// 由状态机调用 /// </summary> /// <param name="triggerID"></param> /// <param name="stateID"></param> public void AddMap(FSMTriggerID triggerID, FSMStateID stateID) { //条件对应id map.Add(triggerID, stateID); //创建 CreateTrigger(triggerID); }
//创建条件对象 private void AddTriggerObject(FSMTriggerID triggerID) { Type type = Type.GetType("AI.FSM." + triggerID + "Trigger"); var triggerObj = Activator.CreateInstance(type) as FSMTrigger; triggerList.Add(triggerObj); }
private void CreateTriggerObject(FSMTriggerID triggerID) {//反射 Type type = Type.GetType("AI.FSM." + triggerID + "Trigger"); FSMTrigger obj = Activator.CreateInstance(type) as FSMTrigger; Triggers.Add(obj); }
/// <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); }
/// <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); } }
//由状态机调用(为映射表和条件列表赋值) public void AddMap(FSMTriggerID triggerID, FSMStateID stateID) { //添加映射 map.Add(triggerID, stateID); //创建条件对象 CreateTriggerObject(triggerID); }
/// <summary> /// 移除映射对象 /// </summary> /// <param name="triggerID"></param> public void RemoveMap(FSMTriggerID triggerID) { if (map.ContainsKey(triggerID)) { map.Remove(triggerID); } }
/// <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)); }
///<summary>根据条件获取对应的输出状态</summary> private FSMStateID GetOutputState(FSMTriggerID fsmTriggerId) { if (map.ContainsKey(fsmTriggerId)) { return(map[fsmTriggerId]); } return(FSMStateID.None); }
///<summary>删除条件映射</summary> public void RemoveTrigger(FSMTriggerID fsmTriggerId) { if (map.ContainsKey(fsmTriggerId)) { map.Remove(fsmTriggerId); RemoveTriggerObject(fsmTriggerId); } }
/// <summary> /// 删除映射表 /// </summary> /// <param name="triggerID"></param> public void RemoveFsmMap(FSMTriggerID triggerID) { if (fsmMap.ContainsKey(triggerID)) { fsmMap.Remove(triggerID); RemoveTriggerList(triggerID); } }
//删除条件 public void RemoveTrigger(FSMTriggerID triggerid) { if (map.ContainsKey(triggerid)) { map.Remove(triggerid); RemoveTriggerObject(triggerid); } }
///<summary> ///查找映射表 ///</summary> public FSMStateID GetOutPutStateId(FSMTriggerID triggerId) { if (map.ContainsKey(triggerId)) { return(map[triggerId]); } return(FSMStateID.None); }
/// <summary> /// 删除 /// </summary> /// <param name="triggerId"></param> public void DeleteTrigger(FSMTriggerID triggerId) { if (map.ContainsKey(triggerId)) { map.Remove(triggerId); triggers.RemoveAll(p => p.triggerId == triggerId); } }
private void CreateTrigger(FSMTriggerID triggerID) { //反射获取类型 Type type = Type.GetType("AI.FSM." + triggerID + "Trigger"); FSMTrigger trigger = Activator.CreateInstance(type) as FSMTrigger; Triggers.Add(trigger); }
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); }
//状态机调用 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); }
///<summary> ///删除条件 ///</summary> public void RemoveTrigger(FSMTriggerID fsmTriggerId) { //删除map对应的元素 if (map.ContainsKey(fsmTriggerId)) { map.Remove(fsmTriggerId); RemoveTrigger(fsmTriggerId); } }
/// <summary>删除条件映射</summary> public void DeleteTrigger(FSMTriggerID triggerId) { //删除映射的同时,并删除条件对象 if (map.ContainsKey(triggerId)) { map.Remove(triggerId); DeleteTriggerObject(triggerId); } }
/// <summary>查找映射</summary> public FSMStateID GetOutputState(FSMTriggerID triggerId) { //查找映射表,根据条件编号,返回输出状态的编号 if (map.ContainsKey(triggerId)) { return(map[triggerId]); } return(FSMStateID.None); }
//添加映射表 public void AddFsmMap(FSMTriggerID triggerID, FSMStateID stateID) { if (!fsmMap.ContainsKey(triggerID)) { fsmMap.Add(triggerID, stateID); AddTriggerList(triggerID); } fsmMap[triggerID] = stateID; }
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); }
/// <summary>添加条件映射</summary> public void AddTrigger(FSMTriggerID triggerId, FSMStateID outputStateId) { if (!map.ContainsKey(triggerId)) { map.Add(triggerId, outputStateId); //添加映射的同时,并添加条件对象 AddTriggerObject(triggerId); } }
///<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); } }
//添加条件对象 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); }
//添加条件 public void AddTrigger(FSMTriggerID triggerid, FSMStateID stateid) { if (map.ContainsKey(triggerid)) { map[triggerid] = stateid; } else { map.Add(triggerid, stateid); AddTriggerObject(triggerid); } }
///<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; //} }
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); } } }
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); } } }