/// <summary> /// 根据名字获取状态 /// </summary> /// <param name="name"></param> /// <returns>null:没有该状态</returns> public State GetStateWithName(StateName name) { State state = null; DictStates.TryGetValue(name, out state); return(state); }
/// <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); }
/// <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); }