public static FSMWorldState Creat() { FSMWorldState temp = null; if (_states.Count > 0) { temp = _states.Dequeue(); temp.Initialize(); } temp = new FSMWorldState(); temp.Initialize(); return(temp); }
/// <summary> /// 添加Action 切换关系 /// </summary> /// <param name="nowState">前一个状态</param> /// <param name="nextState">下一个状态</param> /// <param name="preconditions">过度条件</param> /// <param name="priority">优先级</param> public void AddRelation(E_ActionTYpe nowState, E_ActionTYpe nextState, FSMWorldState preconditions, int priority) { if (_actionSet.ContainsKey(nowState) && _actionSet.ContainsKey(nextState)) { FSMSubsequenceAction subAction = new FSMSubsequenceAction(_actionSet[nextState], preconditions, priority); if (!_nextActions.ContainsKey(nowState)) { _nextActions.Add(nowState, new List <FSMSubsequenceAction>()); } _nextActions[nowState].Add(subAction); } }
public bool CheckContain(FSMWorldState state) { int maxID = (int)E_PropType.Count; for (int i = 0; i < maxID; i++) { if (state._stateSet[i] != null) { if (!state._stateSet[i].Equals(_stateSet[i])) { return(false); } } } return(true); }
/// <summary> /// 初始化状态机 /// </summary> public void Initialize() { foreach (FSMBaseAction action in _actionSet.Values) { action.BuildRelation(); } _currentState = FSMWroldStateFactory.Creat(); _currentState.Initialize(); if (_actionSet.ContainsKey(_defaultAction)) { _currentAction = _actionSet[_defaultAction]; ActiveAction(_currentAction); } else { Debug.LogError("No This Action"); } }
/// <summary> /// 重置状态机 /// </summary> public void Reset() { if (_currentAction != null) { DeactiveAction(_currentAction); _currentAction = null; } if (_actionSet.ContainsKey(_defaultAction)) { _currentAction = _actionSet[_defaultAction]; } if (_currentAction == null) { Debug.LogError("No this Action"); } _isStop = false; _isTransform = true; _currentState = FSMWroldStateFactory.Creat(); }
public FSMSubsequenceAction(FSMBaseAction action, FSMWorldState preconditions, int priority) { _action = action; _preconditions = preconditions; _priority = priority; }