예제 #1
0
        /// <summary>
        /// 根据名字获取状态
        /// </summary>
        /// <param name="name"></param>
        /// <returns>null:没有该状态</returns>
        public State GetStateWithName(StateName name)
        {
            State state = null;

            DictStates.TryGetValue(name, out state);
            return(state);
        }
예제 #2
0
        /// <summary>
        /// 移除状态/状态机
        /// 不能是当前状态和默认状态
        /// </summary>
        /// <param name="name"></param>
        /// <returns>false:移除失败  true:移除成功</returns>
        public bool RemoveState(StateName name)
        {
            bool result = false;

            if (CurrentState != null && CurrentState.Name != name && DefaultState != null && DefaultState.Name != name)
            {
                if (DictStates != null && DictStates.ContainsKey(name))
                {
                    // 删除状态
                    DictStates.Remove(name);
                    // 删除过渡到本状态的状态过渡
                    foreach (State state in DictStates.Values)
                    {
                        List <TransitionName> templist = new List <TransitionName>();
                        foreach (Transition transition in state.Transitions.Values)
                        {
                            if (transition.ToState.Name == name)
                            {
                                templist.Add(transition.Name);
                            }
                        }
                        foreach (TransitionName transitionName in templist)
                        {
                            state.Transitions.Remove(transitionName);
                        }
                    }
                    result = true;
                }
            }
            return(result);
        }
예제 #3
0
        /// <summary>
        /// 创建并添加状态
        /// </summary>
        /// <typeparam name="T">类型</typeparam>
        /// <param name="name">添加的状态名</param>
        /// <param name="isDefault">是否设置为默认状态</param>
        /// <returns>添加的状态</returns>
        public T AddState <T>(StateName name, bool isDefault = false) where T : State, new()
        {
            if (DictStates == null)
            {
                throw new Exception("DictStates 为 null");
            }
            if (DictStates.ContainsKey(name))
            {
                throw new Exception("DictStates 中已存在  " + name);
            }
            T state = new T();

            state.InitState(name, this);
            DictStates.Add(name, state);
            if (isDefault)
            {
                DefaultState = state;
            }
            return(state);
        }