示例#1
0
文件: GameScene.cs 项目: microxw/MaQ
    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");
        }
    }
示例#2
0
    // 返回到自己进入之前的状态
    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);
        }
    }