Exemple #1
0
    public static FSMWorldState Creat()
    {
        FSMWorldState temp = null;

        if (_states.Count > 0)
        {
            temp = _states.Dequeue();
            temp.Initialize();
        }
        temp = new FSMWorldState();
        temp.Initialize();
        return(temp);
    }
Exemple #2
0
    /// <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);
        }
    }
Exemple #3
0
    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);
    }
Exemple #4
0
    /// <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");
        }
    }
Exemple #5
0
 /// <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();
 }
Exemple #6
0
 public FSMSubsequenceAction(FSMBaseAction action, FSMWorldState preconditions, int priority)
 {
     _action        = action;
     _preconditions = preconditions;
     _priority      = priority;
 }