/// <summary> /// 构造函数 /// </summary> private Director() { CommonUtils.ConsoleLine("CurrentDirectory is: " + System.Environment.CurrentDirectory, "Director", OutputStyle.Normal); CommonUtils.ConsoleLine("BaseDirectory is: " + System.AppDomain.CurrentDomain.BaseDirectory, "Director", OutputStyle.Normal); this.InitConfig(); this.resMana = ResourceManager.GetInstance(); Director.RunMana = new RuntimeManager(); this.updateRender = new UpdateRender(); Director.RunMana.SetScreenManager(ScreenManager.GetInstance()); this.timer = new DispatcherTimer(); this.timer.Interval = TimeSpan.FromMilliseconds(GlobalDataContainer.DirectorTimerInterval); this.timer.Tick += UpdateContext; #if NOTIME #else this.timer.Start(); this.InitRuntime(); #endif }
/// <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); }