Ejemplo n.º 1
0
 /// <summary>
 /// SetTrigger,外部调用
 /// </summary>
 /// <param name="eTrigger"></param>
 public void SetTrigger(ETriggerCondition eTrigger)
 {
     triggerSet.Add(eTrigger);
     //优先anyState
     anyState.transitionList.ForEach(tra =>
     {
         // 目标状态不为当前状态
         if (tra.to != GetCurrentState())
         {
             if (LoopThroughTrasitionConditions(tra, () =>
             {
                 //如果目标是subfsm,需将trigger加入temp,不移除trigger,待后续继续使用
                 if (tra.to is SubFsm)
                 {
                     tempTriggerList.Add(eTrigger);
                 }
             }))
             {
                 //成功变更状态
                 //从AnyStte更新状态后,需从下往上更新current
                 UpdateCurrent();
                 // 已经成功找到下一个状态,停止遍历
                 return;
             }
         }
     });
     //再Current
     GetCurrentState().transitionList.ForEach(tra =>
     {
         if (LoopThroughTrasitionConditions(tra, () =>
         {
             //如果目标是subfsm,需将trigger加入temp,不移除trigger,待后续继续使用
             if (tra.to is SubFsm)
             {
                 tempTriggerList.Add(eTrigger);
             }
         }))
         {
             // 已经成功找到下一个状态,停止遍历
             return;
         }
     });
     //即使没有改变状态,也将这次的trigger移除
     triggerSet.Remove(eTrigger);
 }
Ejemplo n.º 2
0
 protected bool GetTrigger(ETriggerCondition eTrigger)
 {
     return(_fsm.triggerSet.Contains(eTrigger));
 }
Ejemplo n.º 3
0
 public void SetTrigger(ETriggerCondition eTrigger)
 {
     _fsm.SetTrigger(eTrigger);
 }