Exemplo n.º 1
0
        /// <summary>
        /// 改变状态
        /// </summary>
        /// <param name="state">目标状态</param>
        public void ChangeState(AbstractState state)
        {
            if (_currentState == state)
            {
                return;
            }
            // 离开当前状态前调用
            if (_currentState != null)
            {
                Debug.Log("OnExit: " + _currentState.GetType());
            }

            _currentState?.OnExit();
            // 改变状态
            _currentState = state;
            // 尝试获取状态对应的转换列表
            _transitions.TryGetValue(_currentState.GetType(), out _currentTransitions);
            // 如果没有对应的转换列表,则给一个默认的空列表
            if (_transitions == null)
            {
                _currentTransitions = EmptyTransitions;
            }

            Debug.Log("OnEnter: " + _currentState.GetType());
            // 进入状态时调用
            _currentState.OnEnter();
        }
Exemplo n.º 2
0
        /// <summary>
        /// 添加转换
        /// </summary>
        /// <param name="from">起始状态</param>
        /// <param name="to">下一个状态</param>
        /// <param name="predicate">状态转换的条件函数</param>
        public void AddTransition(AbstractState from, AbstractState to, Func <bool> predicate)
        {
            // 尝试通过状态获取对应的转换列表
            if (!_transitions.TryGetValue(from.GetType(), out var transitions))
            {
                // 如果没有就先初始化
                transitions = new List <Transition>();
                _transitions[from.GetType()] = transitions;
            }

            // 向转换列表中添加转换
            transitions.Add(new Transition(to, predicate));
        }