public StateTransition Clone() { var st = new StateTransition(); st.TransitionCondition = TransitionCondition; st.FromState = FromState; st.ToState = ToState; st.RunTime = RunTime; st.Reset = Reset; return(st); }
// 检查状态迁移 bool CheckTransition(Fix64 te) { // 要生效的迁移条件 StateTransition tToWork = null; if (!running) { return(false); } // 当前状态下的迁移条件 foreach (var t in trans[curState]) { if (t.RunTime != null) { t.RunTime(te); } if (!running) // 状态可能已经迁移了 { break; } if (t.TransitionCondition != null && t.TransitionCondition(CurSt)) { tToWork = t; break; } } // 没有满足条件的就算了 if (tToWork == null) { return(false); } // 执行迁移操作 if (CurSt.RunOut != null) { CurSt.RunOut(tToWork.ToState); } if (!running) // 状态可能已经迁移了 { return(true); } var fromState = curState; curState = tToWork.ToState; if (CurSt.RunIn != null) { CurSt.RunIn(fromState); } if (!running) // 状态可能已经迁移了 { return(true); } // 新状态下的所有迁移条件重置一次 if (trans.ContainsKey(curState)) { foreach (var nt in trans[curState]) { if (nt.Reset != null) { nt.Reset(); } } } return(true); }