fix Save/Revert prompt when playing a course
This commit is contained in:
@@ -115,7 +115,7 @@ void ScreenEditMenu::MenuRight( PlayerNumber pn, const InputEventType type )
|
||||
|
||||
|
||||
// helpers for MenuStart() below
|
||||
void DeleteCurNotes()
|
||||
void DeleteCurNotes( void* pThrowAway )
|
||||
{
|
||||
Song* pSong = GAMESTATE->m_pCurSong;
|
||||
Steps* pNotesToDelete = GAMESTATE->m_pCurNotes[PLAYER_1];
|
||||
|
||||
@@ -1413,43 +1413,21 @@ void ScreenGameplay::UpdateAutoPlayText()
|
||||
m_textAutoPlay.SetText( sText );
|
||||
}
|
||||
|
||||
void SaveChanges()
|
||||
void SaveChanges( void* papSongsQueue )
|
||||
{
|
||||
/* XXX: Hmm. Better would be to make sure m_pCurCourse is only set when we're
|
||||
* playing out of a course, and use that here, so these things wouldn't need to
|
||||
* special case play modes. Need to make sure m_pCurCourse gets erased
|
||||
* correctly, though. -glenn */
|
||||
/* That's a very clever idea! I should look into this. -Chris */
|
||||
if( GAMESTATE->IsCourseMode() )
|
||||
{
|
||||
// FIXME!!!
|
||||
//for( int i=0; i<m_apSongsQueue.size(); i++ )
|
||||
// m_apSongsQueue[i]->Save();
|
||||
}
|
||||
else
|
||||
{
|
||||
GAMESTATE->m_pCurSong->Save();
|
||||
}
|
||||
vector<Song*>& apSongsQueue = *(vector<Song*>*)papSongsQueue;
|
||||
for( int i=0; i<apSongsQueue.size(); i++ )
|
||||
apSongsQueue[i]->Save();
|
||||
}
|
||||
|
||||
void DontSaveChanges()
|
||||
void RevertChanges( void* papSongsQueue )
|
||||
{
|
||||
if( GAMESTATE->IsCourseMode() )
|
||||
{
|
||||
// FIXME
|
||||
// for( unsigned i=0; i<m_apSongsQueue.size(); i++ )
|
||||
// {
|
||||
// Song* pSong = m_apSongsQueue[i];
|
||||
// ld.LoadFromSMFile( pSong->GetCacheFilePath(), *pSong );
|
||||
// }
|
||||
}
|
||||
else
|
||||
{
|
||||
GAMESTATE->m_pCurSong->RevertFromDisk();
|
||||
}
|
||||
vector<Song*>& apSongsQueue = *(vector<Song*>*)papSongsQueue;
|
||||
for( int i=0; i<apSongsQueue.size(); i++ )
|
||||
apSongsQueue[i]->RevertFromDisk();
|
||||
}
|
||||
|
||||
void ShowSavePrompt( ScreenMessage SM_SendWhenDone )
|
||||
void ScreenGameplay::ShowSavePrompt( ScreenMessage SM_SendWhenDone )
|
||||
{
|
||||
CString sMessage;
|
||||
switch( GAMESTATE->m_PlayMode )
|
||||
@@ -1493,7 +1471,7 @@ void ShowSavePrompt( ScreenMessage SM_SendWhenDone )
|
||||
ASSERT(0);
|
||||
}
|
||||
|
||||
SCREENMAN->Prompt( SM_SendWhenDone, sMessage, true, false, SaveChanges, DontSaveChanges );
|
||||
SCREENMAN->Prompt( SM_SendWhenDone, sMessage, true, false, SaveChanges, RevertChanges, &m_apSongsQueue );
|
||||
}
|
||||
|
||||
void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
||||
|
||||
@@ -71,6 +71,7 @@ protected:
|
||||
bool IsLastSong();
|
||||
void LoadNextSong();
|
||||
float StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic);
|
||||
void ShowSavePrompt( ScreenMessage SM_SendWhenDone );
|
||||
|
||||
bool OneIsHot();
|
||||
bool AllAreInDanger();
|
||||
|
||||
@@ -545,10 +545,10 @@ void ScreenManager::AddNewScreenToTop( CString sClassName )
|
||||
#include "ScreenTextEntry.h"
|
||||
#include "ScreenMiniMenu.h"
|
||||
|
||||
void ScreenManager::Prompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNo, bool bDefaultAnswer, void(*OnYes)(), void(*OnNo)() )
|
||||
void ScreenManager::Prompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNo, bool bDefaultAnswer, void(*OnYes)(void*), void(*OnNo)(void*), void* pCallbackData )
|
||||
{
|
||||
// add the new state onto the back of the array
|
||||
m_ScreenStack.push_back( new ScreenPrompt(SM_SendWhenDone, sText, bYesNo, bDefaultAnswer, OnYes, OnNo) );
|
||||
m_ScreenStack.push_back( new ScreenPrompt(SM_SendWhenDone, sText, bYesNo, bDefaultAnswer, OnYes, OnNo, pCallbackData) );
|
||||
}
|
||||
|
||||
void ScreenManager::TextEntry( ScreenMessage SM_SendWhenDone, CString sQuestion, CString sInitialAnswer, void(*OnOK)(CString sAnswer), void(*OnCanel)() )
|
||||
|
||||
@@ -40,7 +40,7 @@ public:
|
||||
void DeletePreppedScreen();
|
||||
void SetNewScreen( CString sClassName );
|
||||
void AddNewScreenToTop( CString sClassName );
|
||||
void Prompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNo = false, bool bDefaultAnswer = false, void(*OnYes)() = NULL, void(*OnNo)() = NULL );
|
||||
void Prompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNo = false, bool bDefaultAnswer = false, void(*OnYes)(void*) = NULL, void(*OnNo)(void*) = NULL, void* pCallbackData = NULL );
|
||||
void TextEntry( ScreenMessage SM_SendWhenDone, CString sQuestion, CString sInitialAnswer, void(*OnOK)(CString sAnswer) = NULL, void(*OnCanel)() = NULL );
|
||||
void MiniMenu( Menu* pDef, ScreenMessage SM_SendOnOK, ScreenMessage SM_SendOnCancel = SM_None );
|
||||
void PopTopScreen( ScreenMessage SM = SM_RegainingFocus );
|
||||
|
||||
@@ -26,7 +26,7 @@ const float PROMPT_X = CENTER_X;
|
||||
const float PROMPT_Y = CENTER_Y + 120;
|
||||
|
||||
|
||||
ScreenPrompt::ScreenPrompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNoPrompt, bool bDefaultAnswer, void(*OnYes)(), void(*OnNo)() ) :
|
||||
ScreenPrompt::ScreenPrompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNoPrompt, bool bDefaultAnswer, void(*OnYes)(void*), void(*OnNo)(void*), void* pCallbackData ) :
|
||||
Screen("ScreenPrompt")
|
||||
{
|
||||
m_bIsTransparent = true; // draw screens below us
|
||||
@@ -36,7 +36,7 @@ ScreenPrompt::ScreenPrompt( ScreenMessage SM_SendWhenDone, CString sText, bool b
|
||||
m_bAnswer = bDefaultAnswer;
|
||||
m_pOnYes = OnYes;
|
||||
m_pOnNo = OnNo;
|
||||
|
||||
m_pCallbackData = pCallbackData;
|
||||
|
||||
m_Background.LoadFromAniDir( THEME->GetPathToB("ScreenPrompt background") );
|
||||
this->AddChild( &m_Background );
|
||||
@@ -179,10 +179,10 @@ void ScreenPrompt::MenuStart( PlayerNumber pn )
|
||||
if( m_bAnswer )
|
||||
{
|
||||
if( m_pOnYes )
|
||||
m_pOnYes();
|
||||
m_pOnYes(m_pCallbackData);
|
||||
} else {
|
||||
if( m_pOnNo )
|
||||
m_pOnNo();
|
||||
m_pOnNo(m_pCallbackData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ class ScreenPrompt : public Screen
|
||||
{
|
||||
public:
|
||||
ScreenPrompt();
|
||||
ScreenPrompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNoPrompt=false, bool bDefaultAnswer = false, void(*OnYes)() = NULL, void(*OnNo)() = NULL );
|
||||
ScreenPrompt( ScreenMessage SM_SendWhenDone, CString sText, bool bYesNoPrompt=false, bool bDefaultAnswer = false, void(*OnYes)(void*) = NULL, void(*OnNo)(void*) = NULL, void* pCallbackData = NULL );
|
||||
|
||||
virtual void Update( float fDeltaTime );
|
||||
virtual void DrawPrimitives();
|
||||
@@ -42,8 +42,9 @@ protected:
|
||||
bool m_bYesNoPrompt; // false = OK prompt, true = YES/NO prompt
|
||||
bool m_bAnswer; // true = "YES", false = "NO";
|
||||
ScreenMessage m_SMSendWhenDone;
|
||||
void(*m_pOnYes)();
|
||||
void(*m_pOnNo)();
|
||||
void(*m_pOnYes)(void*);
|
||||
void(*m_pOnNo)(void*);
|
||||
void* m_pCallbackData;
|
||||
Transition m_In;
|
||||
Transition m_Out;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user