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
|
// helpers for MenuStart() below
|
||||||
void DeleteCurNotes()
|
void DeleteCurNotes( void* pThrowAway )
|
||||||
{
|
{
|
||||||
Song* pSong = GAMESTATE->m_pCurSong;
|
Song* pSong = GAMESTATE->m_pCurSong;
|
||||||
Steps* pNotesToDelete = GAMESTATE->m_pCurNotes[PLAYER_1];
|
Steps* pNotesToDelete = GAMESTATE->m_pCurNotes[PLAYER_1];
|
||||||
|
|||||||
@@ -1413,43 +1413,21 @@ void ScreenGameplay::UpdateAutoPlayText()
|
|||||||
m_textAutoPlay.SetText( sText );
|
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
|
vector<Song*>& apSongsQueue = *(vector<Song*>*)papSongsQueue;
|
||||||
* playing out of a course, and use that here, so these things wouldn't need to
|
for( int i=0; i<apSongsQueue.size(); i++ )
|
||||||
* special case play modes. Need to make sure m_pCurCourse gets erased
|
apSongsQueue[i]->Save();
|
||||||
* 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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DontSaveChanges()
|
void RevertChanges( void* papSongsQueue )
|
||||||
{
|
{
|
||||||
if( GAMESTATE->IsCourseMode() )
|
vector<Song*>& apSongsQueue = *(vector<Song*>*)papSongsQueue;
|
||||||
{
|
for( int i=0; i<apSongsQueue.size(); i++ )
|
||||||
// FIXME
|
apSongsQueue[i]->RevertFromDisk();
|
||||||
// for( unsigned i=0; i<m_apSongsQueue.size(); i++ )
|
|
||||||
// {
|
|
||||||
// Song* pSong = m_apSongsQueue[i];
|
|
||||||
// ld.LoadFromSMFile( pSong->GetCacheFilePath(), *pSong );
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
GAMESTATE->m_pCurSong->RevertFromDisk();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowSavePrompt( ScreenMessage SM_SendWhenDone )
|
void ScreenGameplay::ShowSavePrompt( ScreenMessage SM_SendWhenDone )
|
||||||
{
|
{
|
||||||
CString sMessage;
|
CString sMessage;
|
||||||
switch( GAMESTATE->m_PlayMode )
|
switch( GAMESTATE->m_PlayMode )
|
||||||
@@ -1493,7 +1471,7 @@ void ShowSavePrompt( ScreenMessage SM_SendWhenDone )
|
|||||||
ASSERT(0);
|
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 )
|
void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ protected:
|
|||||||
bool IsLastSong();
|
bool IsLastSong();
|
||||||
void LoadNextSong();
|
void LoadNextSong();
|
||||||
float StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic);
|
float StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic);
|
||||||
|
void ShowSavePrompt( ScreenMessage SM_SendWhenDone );
|
||||||
|
|
||||||
bool OneIsHot();
|
bool OneIsHot();
|
||||||
bool AllAreInDanger();
|
bool AllAreInDanger();
|
||||||
|
|||||||
@@ -545,10 +545,10 @@ void ScreenManager::AddNewScreenToTop( CString sClassName )
|
|||||||
#include "ScreenTextEntry.h"
|
#include "ScreenTextEntry.h"
|
||||||
#include "ScreenMiniMenu.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
|
// 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)() )
|
void ScreenManager::TextEntry( ScreenMessage SM_SendWhenDone, CString sQuestion, CString sInitialAnswer, void(*OnOK)(CString sAnswer), void(*OnCanel)() )
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
void DeletePreppedScreen();
|
void DeletePreppedScreen();
|
||||||
void SetNewScreen( CString sClassName );
|
void SetNewScreen( CString sClassName );
|
||||||
void AddNewScreenToTop( 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 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 MiniMenu( Menu* pDef, ScreenMessage SM_SendOnOK, ScreenMessage SM_SendOnCancel = SM_None );
|
||||||
void PopTopScreen( ScreenMessage SM = SM_RegainingFocus );
|
void PopTopScreen( ScreenMessage SM = SM_RegainingFocus );
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ const float PROMPT_X = CENTER_X;
|
|||||||
const float PROMPT_Y = CENTER_Y + 120;
|
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")
|
Screen("ScreenPrompt")
|
||||||
{
|
{
|
||||||
m_bIsTransparent = true; // draw screens below us
|
m_bIsTransparent = true; // draw screens below us
|
||||||
@@ -36,7 +36,7 @@ ScreenPrompt::ScreenPrompt( ScreenMessage SM_SendWhenDone, CString sText, bool b
|
|||||||
m_bAnswer = bDefaultAnswer;
|
m_bAnswer = bDefaultAnswer;
|
||||||
m_pOnYes = OnYes;
|
m_pOnYes = OnYes;
|
||||||
m_pOnNo = OnNo;
|
m_pOnNo = OnNo;
|
||||||
|
m_pCallbackData = pCallbackData;
|
||||||
|
|
||||||
m_Background.LoadFromAniDir( THEME->GetPathToB("ScreenPrompt background") );
|
m_Background.LoadFromAniDir( THEME->GetPathToB("ScreenPrompt background") );
|
||||||
this->AddChild( &m_Background );
|
this->AddChild( &m_Background );
|
||||||
@@ -179,10 +179,10 @@ void ScreenPrompt::MenuStart( PlayerNumber pn )
|
|||||||
if( m_bAnswer )
|
if( m_bAnswer )
|
||||||
{
|
{
|
||||||
if( m_pOnYes )
|
if( m_pOnYes )
|
||||||
m_pOnYes();
|
m_pOnYes(m_pCallbackData);
|
||||||
} else {
|
} else {
|
||||||
if( m_pOnNo )
|
if( m_pOnNo )
|
||||||
m_pOnNo();
|
m_pOnNo(m_pCallbackData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class ScreenPrompt : public Screen
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ScreenPrompt();
|
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 Update( float fDeltaTime );
|
||||||
virtual void DrawPrimitives();
|
virtual void DrawPrimitives();
|
||||||
@@ -42,8 +42,9 @@ protected:
|
|||||||
bool m_bYesNoPrompt; // false = OK prompt, true = YES/NO prompt
|
bool m_bYesNoPrompt; // false = OK prompt, true = YES/NO prompt
|
||||||
bool m_bAnswer; // true = "YES", false = "NO";
|
bool m_bAnswer; // true = "YES", false = "NO";
|
||||||
ScreenMessage m_SMSendWhenDone;
|
ScreenMessage m_SMSendWhenDone;
|
||||||
void(*m_pOnYes)();
|
void(*m_pOnYes)(void*);
|
||||||
void(*m_pOnNo)();
|
void(*m_pOnNo)(void*);
|
||||||
|
void* m_pCallbackData;
|
||||||
Transition m_In;
|
Transition m_In;
|
||||||
Transition m_Out;
|
Transition m_Out;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user