public void backToLastProcedure(string intend) { if (mLastProcedureList.Count == 0) { return; } // 获得上一次进入的流程 PROCEDURE_TYPE lastType = mLastProcedureList[mLastProcedureList.Count - 1]; if (mSceneProcedureList.ContainsKey(lastType)) { SceneProcedure targetProcedure = mSceneProcedureList[lastType]; // 先返回到当前流程进入之前的状态 // 需要找到共同的父节点,退到该父节点时则不再退出 SceneProcedure exitTo = mCurProcedure.getSameParent(targetProcedure); mCurProcedure.back(exitTo); SceneProcedure lastProcedure = mCurProcedure; mCurProcedure = targetProcedure; mCurProcedure.init(lastProcedure, intend); // 进入上一次的流程后,将流程从返回列表中删除 mLastProcedureList.RemoveAt(mLastProcedureList.Count - 1); } else { UnityUtility.logError("error : can not back scene procedure"); } }
// 返回到自己进入之前的状态 public void back(SceneProcedure backTo) { // 中断自己所有未执行的命令 foreach (var cmd in mDelayCmdList) { mCommandSystem.interruptCommand(cmd.Key); } mDelayCmdList.Clear(); // 当返回目标为自己时,则不再返回 if (this == backTo) { return; } // 先返回自己进入之前的状态 onBack(); mInited = false; // 再返回父节点进入之前的状态 if (mParentProcedure != null) { mParentProcedure.back(backTo); } }