class IntermissionController native ui { // This is mostly a black box to the native intermission code. // May be scriptified later, but right now we do not need it. native void Start(); native bool Responder(InputEvent ev); native bool Ticker(); native void Drawer(); native bool NextPage(); } // Wrapper to play the native intermissions within a screen job. class IntermissionScreenJob : ScreenJob { IntermissionController controller; ScreenJob Init(IntermissionController ctrl, bool allowwipe) { Super.Init(); if (allowwipe && wipetype != 0) flags = wipetype << ScreenJob.transition_shift; controller = ctrl; return self; } override void Start() { controller.Start(); } override bool OnEvent(InputEvent evt) { return controller.Responder(evt); } override void OnTick() { if (!controller.Ticker()) jobstate = finished; } override void Draw(double smoothratio) { controller.Drawer(); } override void OnDestroy() { controller.Destroy(); Super.OnDestroy(); } } class DoomCutscenes ui { //--------------------------------------------------------------------------- // // // //--------------------------------------------------------------------------- static void BuildMapTransition(ScreenJobRunner runner, IntermissionController inter, StatusScreen status) { if (status) { runner.Append(status); } if (inter) { runner.Append(new("IntermissionScreenJob").Init(inter, status != null)); } } }