/// <summary> /// 设置运行时环境管理器,用于读取保存的信息 /// </summary> /// <param name="rm">反序列化后的RM实例</param> public static void ResumeFromSaveData(RuntimeManager rm) { // 清空画面并停下BGM ViewManager.GetInstance().RemoveView(ResourceType.Unknown); Musician.GetInstance().StopAndReleaseBGM(); // 变更运行时环境 Director.RunMana = rm; CommonUtils.ConsoleLine("RuntimeManager is replaced", "Director", OutputStyle.Important); // 变更屏幕管理器 ScreenManager.ResetSynObject(Director.RunMana.Screen); CommonUtils.ConsoleLine("ScreenManager is replaced", "Director", OutputStyle.Important); // 重绘整个画面 ViewManager.GetInstance().ReDraw(); // 恢复背景音乐 Director.GetInstance().updateRender.Bgm(Director.RunMana.PlayingBGM, GlobalDataContainer.GAME_SOUND_BGMVOL); // 清空字符串缓冲 Director.GetInstance().updateRender.dialogPreStr = String.Empty; Director.GetInstance().updateRender.pendingDialogQueue.Clear(); // 弹空全部等待,复现保存最后一个动作 Director.RunMana.ExitUserWait(); Interrupt reactionNtr = new Interrupt() { type = InterruptType.LoadReaction, detail = "Reaction for load data", interruptSA = Director.RunMana.DashingPureSa, interruptFuncSign = "", returnTarget = null, pureInterrupt = true }; // 提交中断 Director.RunMana.CallStack.Submit(reactionNtr); }
/// <summary> /// 向运行时环境发出中断 /// </summary> /// <param name="ntr">中断</param> public void SubmitInterrupt(Interrupt ntr) { Director.RunMana.CallStack.Submit(ntr); }
/// <summary> /// 向栈机提交一个中断调用 /// </summary> /// <param name="ntr">中断</param> public void Submit(Interrupt ntr) { StackMachineFrame smf = new StackMachineFrame() { State = StackMachineState.Interrupt, ScriptName = null, PC = 0, IP = ntr.interruptSA, Argv = null, BindingFunctionName = null, BindingSceneName = null, Delay = TimeSpan.FromMilliseconds(0), Tag = ntr.returnTarget, BindingInterrupt = ntr }; this.coreStack.Push(smf); }