Beispiel #1
0
 /// <summary>
 /// 移除状态
 /// </summary>
 /// <param name="t_StateType">状态类型</param>
 public void RemoveCondition(Type t_ConditionType)
 {
     IConditionMapDataStructure.Foreach((key, value) => {
         if (value.GetType() == t_ConditionType)
         {
             IConditionMapDataStructure.Remove(key);
             value.OnConditionDestroy(this);
         }
     });
 }
Beispiel #2
0
 /// <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);
         }
     });
 }
Beispiel #3
0
 /// <summary>
 /// 轮询更新条件
 /// </summary>
 private void UpdateCondition()
 {
     IConditionMapDataStructure.Foreach((key, value) => {
         if (value.OnConditionLoop(this))
         {
             if (null != value.StateType)
             {
                 ChangeState(value.StateType);
             }
         }
     });
 }
Beispiel #4
0
        /// <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();
        }