Add ScreenExit.
This commit is contained in:
@@ -298,6 +298,7 @@ void Screen::ClearMessageQueue( const ScreenMessage SM )
|
||||
#include "ScreenSelectMaster.h"
|
||||
#include "ScreenEditCoursesMenu.h"
|
||||
#include "ScreenProfileOptions.h"
|
||||
#include "ScreenExit.h"
|
||||
|
||||
Screen* Screen::Create( CString sClassName )
|
||||
{
|
||||
@@ -366,6 +367,7 @@ Screen* Screen::Create( CString sClassName )
|
||||
IF_RETURN( ScreenSelectMaster );
|
||||
IF_RETURN( ScreenEditCoursesMenu );
|
||||
IF_RETURN( ScreenProfileOptions );
|
||||
IF_RETURN( ScreenExit );
|
||||
|
||||
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
|
||||
RelativePath="ScreenEvaluation.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="ScreenExit.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="ScreenExit.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="ScreenEz2SelectMusic.cpp">
|
||||
</File>
|
||||
|
||||
Reference in New Issue
Block a user