示例#1
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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); //初始化状态机
        }
示例#2
0
文件: FSM.cs 项目: ITsuperFan/GameBox
 /// <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);
     }
 }
示例#3
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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);
        }
示例#4
0
文件: FSM.cs 项目: ITsuperFan/GameBox
 /// <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);
         }
     });
 }
示例#5
0
文件: FSM.cs 项目: ITsuperFan/GameBox
 /// <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);
         }
     });
 }
示例#6
0
文件: FSM.cs 项目: ITsuperFan/GameBox
 /// <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);
         }
     });
 }
示例#7
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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);
        }
示例#8
0
文件: FSM.cs 项目: ITsuperFan/GameBox
 /// <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;
             }
         });
     }
 }
示例#9
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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); //初始化状态机
        }
示例#10
0
文件: FSM.cs 项目: ITsuperFan/GameBox
 /// <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;
             }
         });
     }
 }
示例#11
0
文件: FSM.cs 项目: ITsuperFan/GameBox
 /// <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;
             }
         });
     }
 }
示例#12
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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);
        }
示例#13
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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);
        }
示例#14
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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);
            }
        }
示例#15
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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);
            }
        }
示例#16
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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();
        }
示例#17
0
文件: FSM.cs 项目: ITsuperFan/GameBox
        /// <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);
            //}
        }