allow cutscenes in intermissions
This commit is contained in:
parent
74a04474e1
commit
206c2291d9
6 changed files with 143 additions and 16 deletions
|
|
@ -58,6 +58,7 @@
|
|||
#include "sbar.h"
|
||||
#include "screenjob.h"
|
||||
#include "vm.h"
|
||||
#include "i_time.h"
|
||||
|
||||
FIntermissionDescriptorList IntermissionDescriptors;
|
||||
|
||||
|
|
@ -66,12 +67,17 @@ IMPLEMENT_CLASS(DIntermissionScreenFader, false, false)
|
|||
IMPLEMENT_CLASS(DIntermissionScreenText, false, false)
|
||||
IMPLEMENT_CLASS(DIntermissionScreenCast, false, false)
|
||||
IMPLEMENT_CLASS(DIntermissionScreenScroller, false, false)
|
||||
IMPLEMENT_CLASS(DIntermissionScreenCutscene, false, true)
|
||||
IMPLEMENT_CLASS(DIntermissionController, false, true)
|
||||
|
||||
IMPLEMENT_POINTERS_START(DIntermissionController)
|
||||
IMPLEMENT_POINTER(mScreen)
|
||||
IMPLEMENT_POINTERS_END
|
||||
|
||||
IMPLEMENT_POINTERS_START(DIntermissionScreenCutscene)
|
||||
IMPLEMENT_POINTER(mScreenJobRunner)
|
||||
IMPLEMENT_POINTERS_END
|
||||
|
||||
extern int NoWipe;
|
||||
|
||||
CVAR(Bool, nointerscrollabort, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG);
|
||||
|
|
@ -276,6 +282,66 @@ void DIntermissionScreen::OnDestroy()
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void DIntermissionScreenCutscene::Init(FIntermissionAction *desc, bool first)
|
||||
{
|
||||
Super::Init(desc, first);
|
||||
mScreenJobRunner = CreateRunner(false);
|
||||
if(first) NoWipe++;
|
||||
CreateCutscene(&static_cast<FIntermissionActionCutscene*>(desc)->scn, mScreenJobRunner, nullptr);
|
||||
}
|
||||
|
||||
int DIntermissionScreenCutscene::Responder (FInputEvent *ev)
|
||||
{
|
||||
ScaleOverrider ovr(twod);
|
||||
IFVIRTUALPTRNAME(mScreenJobRunner, NAME_ScreenJobRunner, OnEvent)
|
||||
{
|
||||
FInputEvent evt = *ev;
|
||||
int result = 0;
|
||||
VMValue parm[] = { mScreenJobRunner, &evt };
|
||||
VMReturn ret(&result);
|
||||
VMCall(func, parm, 2, &ret, 1);
|
||||
return result ? -1 : 0;
|
||||
}
|
||||
return Super::Responder(ev);
|
||||
}
|
||||
|
||||
int DIntermissionScreenCutscene::Ticker()
|
||||
{
|
||||
++mTicker;
|
||||
ScaleOverrider ovr(twod);
|
||||
IFVIRTUALPTRNAME(mScreenJobRunner, NAME_ScreenJobRunner, OnTick)
|
||||
{
|
||||
int result = 0;
|
||||
VMValue parm[] = { mScreenJobRunner };
|
||||
VMReturn ret(&result);
|
||||
VMCall(func, parm, 1, &ret, 1);
|
||||
return result ? -1 : 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void DIntermissionScreenCutscene::Drawer ()
|
||||
{
|
||||
ScaleOverrider ovr(twod);
|
||||
IFVIRTUALPTRNAME(mScreenJobRunner, NAME_ScreenJobRunner, RunFrame)
|
||||
{
|
||||
VMValue parm[] = { mScreenJobRunner, I_GetTimeFrac() };
|
||||
VMCall(func, parm, 2, nullptr, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void DIntermissionScreenCutscene::OnDestroy()
|
||||
{
|
||||
mScreenJobRunner->Destroy();
|
||||
Super::OnDestroy();
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void DIntermissionScreenFader::Init(FIntermissionAction *desc, bool first)
|
||||
{
|
||||
Super::Init(desc, first);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue