public bool changeProcedure(Type procedureType, string intent, bool addToLastList = true) { if (!mSceneProcedureList.TryGetValue(procedureType, out SceneProcedure targetProcedure)) { logError("can not find scene procedure : " + procedureType); return(false); } // 将上一个流程记录到返回列表中 if (mCurProcedure != null && addToLastList) { mLastProcedureList.Add(mCurProcedure); if (mLastProcedureList.Count > mMaxLastProcedureCount) { mLastProcedureList.RemoveAt(0); } } if (mCurProcedure == null || mCurProcedure.getType() != procedureType) { // 如果当前已经在一个流程中了,则要先退出当前流程,但是不要销毁流程 if (mCurProcedure != null) { // 需要找到共同的父节点,退到该父节点时则不再退出 mCurProcedure.exit(mCurProcedure.getSameParent(targetProcedure), targetProcedure); } SceneProcedure lastProcedure = mCurProcedure; mCurProcedure = targetProcedure; mCurProcedure.init(lastProcedure, intent); } return(true); }
public bool changeProcedure(PROCEDURE_TYPE procedure, string intent) { if (mSceneProcedureList.ContainsKey(procedure)) { // 将上一个流程记录到返回列表中 if (mCurProcedure != null) { mLastProcedureList.Add(mCurProcedure.getType()); } if (mCurProcedure == null || mCurProcedure.getType() != procedure) { SceneProcedure targetProcedure = mSceneProcedureList[procedure]; // 如果当前已经在一个流程中了,则要先退出当前流程,但是不要销毁流程 if (mCurProcedure != null) { // 需要找到共同的父节点,退到该父节点时则不再退出 SceneProcedure exitTo = mCurProcedure.getSameParent(targetProcedure); SceneProcedure nextPro = targetProcedure; mCurProcedure.exit(exitTo, nextPro); } SceneProcedure lastProcedure = mCurProcedure; mCurProcedure = targetProcedure; if (mCurProcedure != null) { mCurProcedure.init(lastProcedure, intent); } } return(true); } else { UnityUtility.logError("error : can not find scene procedure : " + procedure); } return(false); }
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"); } }
// 由GameScene调用 // 进入流程 public void init(SceneProcedure lastProcedure, string intent) { // 如果父节点还没有初始化,则先初始化父节点 if (mParentProcedure != null && !mParentProcedure.mInited) { mParentProcedure.init(lastProcedure, intent); } // 再初始化自己 onInit(lastProcedure, intent); mInited = true; }
// 由GameScene调用 // 进入流程 public void init(SceneProcedure lastProcedure, string intent) { // 如果父节点还没有初始化,则先初始化父节点 if (mParentProcedure != null && !mParentProcedure.mInited) { mParentProcedure.init(lastProcedure, intent); } // 再初始化自己,如果是从子节点返回到父节点,则需要调用另外一个初始化函数 if (lastProcedure != null && lastProcedure.isThisOrParent(mProcedureType)) { onInitFromChild(lastProcedure, intent); } else { onInit(lastProcedure, intent); } mInited = true; }
public bool changeProcedure(Type procedure, string intent, bool addToLastList = true) { if (mSceneProcedureList.ContainsKey(procedure)) { // 将上一个流程记录到返回列表中 if (mCurProcedure != null && addToLastList) { mLastProcedureList.Add(mCurProcedure); if (mLastProcedureList.Count > mMaxLastProcedureCount) { mLastProcedureList.RemoveAt(0); } } if (mCurProcedure == null || mCurProcedure.getProcedureType() != procedure) { SceneProcedure targetProcedure = mSceneProcedureList[procedure]; // 如果当前已经在一个流程中了,则要先退出当前流程,但是不要销毁流程 if (mCurProcedure != null) { // 需要找到共同的父节点,退到该父节点时则不再退出 SceneProcedure exitTo = mCurProcedure.getSameParent(targetProcedure); SceneProcedure nextPro = targetProcedure; mCurProcedure.exit(exitTo, nextPro); } SceneProcedure lastProcedure = mCurProcedure; mCurProcedure = targetProcedure; mCurProcedure.init(lastProcedure, intent); } return(true); } else { logError("can not find scene procedure : " + procedure); } return(false); }