fix Save/Revert prompt when playing a course

This commit is contained in:
Chris Danford
2003-08-23 18:33:49 +00:00
parent 8955c0cdfc
commit 1e718a80a5
7 changed files with 23 additions and 43 deletions
+1 -1
View File
@@ -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];
+10 -32
View File
@@ -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 )
+1
View File
@@ -71,6 +71,7 @@ protected:
bool IsLastSong();
void LoadNextSong();
float StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic);
void ShowSavePrompt( ScreenMessage SM_SendWhenDone );
bool OneIsHot();
bool AllAreInDanger();
+2 -2
View File
@@ -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)() )
+1 -1
View File
@@ -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 );
+4 -4
View File
@@ -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);
}
}
+4 -3
View File
@@ -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;
};