Add ScreenExit.
This commit is contained in:
@@ -298,6 +298,7 @@ void Screen::ClearMessageQueue( const ScreenMessage SM )
|
|||||||
#include "ScreenSelectMaster.h"
|
#include "ScreenSelectMaster.h"
|
||||||
#include "ScreenEditCoursesMenu.h"
|
#include "ScreenEditCoursesMenu.h"
|
||||||
#include "ScreenProfileOptions.h"
|
#include "ScreenProfileOptions.h"
|
||||||
|
#include "ScreenExit.h"
|
||||||
|
|
||||||
Screen* Screen::Create( CString sClassName )
|
Screen* Screen::Create( CString sClassName )
|
||||||
{
|
{
|
||||||
@@ -366,6 +367,7 @@ Screen* Screen::Create( CString sClassName )
|
|||||||
IF_RETURN( ScreenSelectMaster );
|
IF_RETURN( ScreenSelectMaster );
|
||||||
IF_RETURN( ScreenEditCoursesMenu );
|
IF_RETURN( ScreenEditCoursesMenu );
|
||||||
IF_RETURN( ScreenProfileOptions );
|
IF_RETURN( ScreenProfileOptions );
|
||||||
|
IF_RETURN( ScreenExit );
|
||||||
|
|
||||||
RageException::Throw( "Invalid Screen class name '%s'", sClassName.c_str() );
|
RageException::Throw( "Invalid Screen class name '%s'", sClassName.c_str() );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
#include "global.h"
|
||||||
|
|
||||||
|
#include "ScreenExit.h"
|
||||||
|
#include "RageUtil.h"
|
||||||
|
#include "RageSoundManager.h"
|
||||||
|
#include "RageSounds.h"
|
||||||
|
#include "RageSound.h"
|
||||||
|
#include "RageLog.h"
|
||||||
|
#include "StepMania.h"
|
||||||
|
|
||||||
|
ScreenExit::ScreenExit(): Screen("ScreenExit")
|
||||||
|
{
|
||||||
|
m_Exited = false;
|
||||||
|
|
||||||
|
/* It'd be better for any previous screen playing music to fade it out as it fades
|
||||||
|
* out the screen. XXX: Check to see if it's fading out; if it'll stop playing in
|
||||||
|
* reasonable time, let it. */
|
||||||
|
SOUND->StopMusic();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenExit::Update( float fDelta )
|
||||||
|
{
|
||||||
|
if( m_Exited )
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Grab the list of playing sounds, and see if it's empty. */
|
||||||
|
const set<RageSound *> &PlayingSounds = SOUNDMAN->GetPlayingSounds();
|
||||||
|
bool DoQuit = PlayingSounds.empty();
|
||||||
|
|
||||||
|
/* As a safety precaution, don't wait indefinitely, in case some sound was
|
||||||
|
* inadvertently set to play too long. */
|
||||||
|
if( !DoQuit && m_ShutdownTimer.PeekDeltaTime() > 3 )
|
||||||
|
{
|
||||||
|
DoQuit = true;
|
||||||
|
CString warn = ssprintf("ScreenExit: %i sound%s failed to finish playing quickly: ",
|
||||||
|
PlayingSounds.size() );
|
||||||
|
for( set<RageSound *>::const_iterator i = PlayingSounds.begin();
|
||||||
|
i != PlayingSounds.end(); ++i )
|
||||||
|
{
|
||||||
|
warn += (*i)->GetLoadedFilePath() + "; ";
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG->Warn("%s", warn.c_str() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( DoQuit )
|
||||||
|
{
|
||||||
|
m_Exited = true;
|
||||||
|
LOG->Trace("ScreenExit: shutting down");
|
||||||
|
ExitGame();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef SCREEN_EXIT_H
|
||||||
|
#define SCREEN_EXIT_H
|
||||||
|
|
||||||
|
#include "Screen.h"
|
||||||
|
#include "RageTimer.h"
|
||||||
|
|
||||||
|
class ScreenExit: public Screen
|
||||||
|
{
|
||||||
|
bool m_Exited;
|
||||||
|
RageTimer m_ShutdownTimer;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ScreenExit();
|
||||||
|
void Update( float fDelta );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -247,6 +247,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\
|
|||||||
<File
|
<File
|
||||||
RelativePath="ScreenEvaluation.h">
|
RelativePath="ScreenEvaluation.h">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="ScreenExit.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="ScreenExit.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="ScreenEz2SelectMusic.cpp">
|
RelativePath="ScreenEz2SelectMusic.cpp">
|
||||||
</File>
|
</File>
|
||||||
|
|||||||
Reference in New Issue
Block a user