/// <summary> /// 转换状态 /// </summary> /// <param name="aiRule"></param> public void PerformRule(AIrule aiRule) { if (aiRule == AIrule.NullAIrule) { Debug.LogError("PerformRule Error:NullAIrule"); return; } AIEvent aiEvent = currentAIFSM.GetOutputState(aiRule); if (aiEvent == AIEvent.NullEvent) { Debug.LogError("PerformRule Error:NullEvent"); return; } currentAIEvent = aiEvent; for (int i = 0; i < aiFSMs.Count; i++) { if (aiFSMs[i].AiEvent == currentAIEvent) { currentAIFSM.DoBeforeLeaving(); currentAIFSM = aiFSMs[i]; currentAIFSM.DoBeforeEntering(); return; } } }
/// <summary> /// 获取AI规则对应事件 /// </summary> /// <param name="aIrule"></param> /// <returns></returns> public AIEvent GetOutputState(AIrule aIrule) { if (AI_RE_FSM.ContainsKey(aIrule)) { return(AI_RE_FSM[aIrule]); } return(AIEvent.NullEvent); }
/// <summary> /// 删除键值AI规则与事件对应关系 /// </summary> /// <param name="aIrule"></param> public void DelAIEventAndEvent(AIrule aIrule) { if (AI_RE_FSM.ContainsKey(aIrule)) { AI_RE_FSM.Remove(aIrule); } else { Debug.LogError("AIFSM ERROR: AI规则与事件关联中并不包含此规则"); } }
/// <summary> /// 添加键值AI规则与事件对应关系 /// </summary> /// <param name="aIrule"></param> /// <param name="aIEvent"></param> public void AddAIEventAndEvent(AIrule aIrule, AIEvent aIEvent) { if (aIrule == AIrule.NullAIrule) { Debug.LogError("AIFSM ERROR: NullAIrule 不允许对应 AIrule"); return; } if (aIEvent == AIEvent.NullEvent) { Debug.LogError("AIFSM ERROR: NullEvent 不允许对应 AIEvent"); return; } if (AI_RE_FSM.ContainsKey(aIrule)) { Debug.LogError("AIFSM ERROR: 已经存在相同AIrule." + aIrule.ToString() + "作为Key"); return; } AI_RE_FSM.Add(aIrule, aIEvent); }