/// <summary> /// 添加状态 /// </summary> /// <param name="t_StateType">状态的抽象基类类型</param> public void AddState(BaseFSMState t_BaseFSMState) { if (null == t_BaseFSMState) { throw new GameBoxFrameworkException(string.Format("添加的状态不能为空!")); } if (!string.IsNullOrEmpty(t_BaseFSMState.StateName)) { if (IStateMapDataStructure.ContainsKey(t_BaseFSMState.StateName)) { throw new GameBoxFrameworkException(string.Format("状态'{0}'已经存在!", t_BaseFSMState.GetType().Name)); } IStateMapDataStructure.Add(t_BaseFSMState.StateName, t_BaseFSMState); } else { if (IStateMapDataStructure.ContainsKey(t_BaseFSMState.GetType().Name)) { throw new GameBoxFrameworkException(string.Format("状态'{0}'已经存在!", t_BaseFSMState.GetType().Name)); } IStateMapDataStructure.Add(t_BaseFSMState.GetType().Name, t_BaseFSMState); // 如果改状态没有名字,那么改状态就采用状态的类名 } t_BaseFSMState.OnStateInit(this); //初始化状态机 }
/// <summary> /// 更新现有的状态 /// </summary> /// <param name="t_FSMStateName">要更新的现有状态的键索引</param> /// <param name="t_BaseFSMState">要替换的状态实例</param> public void UpdateState(string t_FSMStateName, BaseFSMState t_BaseFSMState) { if (IStateMapDataStructure.ContainsKey(t_FSMStateName)) { IStateMapDataStructure.Update(t_FSMStateName, t_BaseFSMState); } }
/// <summary> /// 获取状态 /// </summary> /// <param name="t_StateName">状态保存进状态机时名字</param> /// <returns>状态的抽象基础状态的实例引用</returns> public BaseFSMState GetState(string t_StateName) { BaseFSMState t_BaseFSMState; IStateMapDataStructure.TryGetValue(t_StateName, out t_BaseFSMState); return(t_BaseFSMState); }
/// <summary> /// 移除状态 /// </summary> /// <param name="t_StateType">状态类型</param> public void RemoveState(Type t_StateType) { IStateMapDataStructure.Foreach((key, value) => { if (value.GetType() == t_StateType) { IStateMapDataStructure.Remove(key); value.OnStateDestroy(this); } }); }
/// <summary> /// 移除状态 /// </summary> /// <typeparam name="T">状态类型</typeparam> public void RemoveState <T>() where T : BaseFSMState { IStateMapDataStructure.Foreach((key, value) => { if (value is T) { IStateMapDataStructure.Remove(key); value.OnStateDestroy(this); } }); }
/// <summary> /// 移除状态机条件 /// </summary> /// <typeparam name="T"></typeparam> public void RemoveCondition <T>() where T : BaseFSMCondition { IConditionMapDataStructure.Foreach((key, value) => { if (value is T) { IStateMapDataStructure.Remove(key); value.OnConditionDestroy(this); } }); }
/// <summary> /// 获取所有状态 /// </summary> /// <returns>基础状态数组</returns> public BaseFSMState[] GetAllState() { BaseFSMState[] t_BaseFSMStates = new BaseFSMState[IStateMapDataStructure.Count]; var t_StateMaps = IStateMapDataStructure.ToArray(); for (int i = 0; i < t_StateMaps.Length; i++) { t_BaseFSMStates[i] = t_StateMaps[i].Value; } return(t_BaseFSMStates); }
/// <summary> /// 更改状态机状态 /// </summary> /// <param name="t_StateName">状态的名字</param> public void ChangeState(string t_StateName) { if (IsRunning) { IStateMapDataStructure.Foreach((key, value) => { if (key == t_StateName) { m_TempState = value; } }); } }
/// <summary> /// 添加状态 /// </summary> /// <typeparam name="T">状态的类型</typeparam> public void AddState <T>() where T : BaseFSMState { var t_State = Activator.CreateInstance(typeof(T)) as BaseFSMState; // 如果改状态没有名字,那么改状态就采用状态的类名 if (IStateMapDataStructure.ContainsKey(typeof(T).Name)) { throw new GameBoxFrameworkException(string.Format("状态'{0}'已经存在!", typeof(T).Name)); } IStateMapDataStructure.Add(typeof(T).Name, t_State); t_State.OnStateInit(this); //初始化状态机 }
/// <summary> /// 更改状态机状态 /// </summary> /// <param name="t_StateType"></param> public void ChangeState(Type t_StateType) { if (IsRunning) { IStateMapDataStructure.Foreach((key, value) => { if (value.GetType() == t_StateType) { m_TempState = value; } }); } }
/// <summary> /// 更改状态机状态 /// </summary> /// <param name="t_BaseFSMState">更改的目标状态</param> public void ChangeState(BaseFSMState t_BaseFSMState) { if (IsRunning) { IStateMapDataStructure.Foreach((key, value) => { if (value.Equals(t_BaseFSMState)) { m_TempState = value; } }); } }
/// <summary> /// 获取状态 /// </summary> /// <typeparam name="T">状态的类型</typeparam> /// <returns>状态的实例</returns> public T GetState <T>() where T : BaseFSMState { var t_Array = IStateMapDataStructure.ToArray(); for (int i = 0; i < t_Array.Length; i++) { if (t_Array[i].Value is T) { return(t_Array[i].Value as T); } } return(null); }
/// <summary> /// 获取状态 /// </summary> /// <param name="t_Type">状态的Type类型</param> /// <returns>状态的抽象基础状态的实例引用</returns> public BaseFSMState GetState(Type t_Type) { var t_Array = IStateMapDataStructure.ToArray(); for (int i = 0; i < t_Array.Length; i++) { if (t_Array[i].Value.GetType() == t_Type) { return(t_Array[i].Value as BaseFSMState); } } return(null); }
/// <summary> /// 移除状态机条件 /// </summary> /// <param name="t_FSMName">状态机条件的类名</param> public void RemoveCondition(string t_ConditionName) { BaseFSMCondition value; IConditionMapDataStructure.TryGetValue(t_ConditionName, out value); if (!IStateMapDataStructure.ContainsKey(t_ConditionName)) { IStateMapDataStructure.Remove(t_ConditionName); } if (null != value) { value.OnConditionDestroy(this); } }
/// <summary> /// 移除状态 /// </summary> /// <param name="t_FSMName"></param> public void RemoveState(string t_FSMName) { BaseFSMState value; IStateMapDataStructure.TryGetValue(t_FSMName, out value); if (!IStateMapDataStructure.ContainsKey(t_FSMName)) { IStateMapDataStructure.Remove(t_FSMName); } if (null != value) { value.OnStateDestroy(this); } }
/// <summary> /// 状态机被销毁 /// </summary> /// <param name="t_IModuleManager">状态机模块的管家</param> protected internal override void OnDestroy(IFSMOwner t_IFSMOwner) { //TODO:状态机被销毁后 IsRunning = false; //销毁所有的状态 IStateMapDataStructure.Foreach((key, value) => { value.OnStateDestroy(this); }); IStateMapDataStructure.Clear(); //销毁所有的条件 IConditionMapDataStructure.Foreach((key, value) => { value.OnConditionDestroy(this); }); IConditionMapDataStructure.Clear(); }
/// <summary> /// 添加状态 /// </summary> /// <param name="t_StateType">状态的抽象基类类型的Type类</param> public void AddState(Type t_StateType) { if (IStateMapDataStructure.ContainsKey(t_StateType.Name)) { throw new GameBoxFrameworkException(string.Format("状态'{0}'已经存在!", t_StateType.Name)); } AddState(Activator.CreateInstance(t_StateType) as BaseFSMState); //var t_Ctor = t_StateType.GetConstructors(); //if (0 < t_Ctor.Length) //有构造方法 //{ // AddState(Activator.CreateInstance(t_StateType) as BaseFSMState); //} //else //无默认构造方法 //{ // AddState(FormatterServices.GetSafeUninitializedObject(t_StateType) as BaseFSMState); //} }