From 1e718a80a5a3367570488d423c7c9ce961c4a73e Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sat, 23 Aug 2003 18:33:49 +0000 Subject: [PATCH] fix Save/Revert prompt when playing a course --- stepmania/src/ScreenEditMenu.cpp | 2 +- stepmania/src/ScreenGameplay.cpp | 42 ++++++++------------------------ stepmania/src/ScreenGameplay.h | 1 + stepmania/src/ScreenManager.cpp | 4 +-- stepmania/src/ScreenManager.h | 2 +- stepmania/src/ScreenPrompt.cpp | 8 +++--- stepmania/src/ScreenPrompt.h | 7 +++--- 7 files changed, 23 insertions(+), 43 deletions(-) diff --git a/stepmania/src/ScreenEditMenu.cpp b/stepmania/src/ScreenEditMenu.cpp index e810bf29e8..8ce1a03bc9 100644 --- a/stepmania/src/ScreenEditMenu.cpp +++ b/stepmania/src/ScreenEditMenu.cpp @@ -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]; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index b48d51a948..124643df63 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -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; iSave(); - } - else - { - GAMESTATE->m_pCurSong->Save(); - } + vector& apSongsQueue = *(vector*)papSongsQueue; + for( int i=0; iSave(); } -void DontSaveChanges() +void RevertChanges( void* papSongsQueue ) { - if( GAMESTATE->IsCourseMode() ) - { - // FIXME -// for( unsigned i=0; iGetCacheFilePath(), *pSong ); -// } - } - else - { - GAMESTATE->m_pCurSong->RevertFromDisk(); - } + vector& apSongsQueue = *(vector*)papSongsQueue; + for( int i=0; iRevertFromDisk(); } -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 ) diff --git a/stepmania/src/ScreenGameplay.h b/stepmania/src/ScreenGameplay.h index 77b3ceb3ca..b32c1c1a85 100644 --- a/stepmania/src/ScreenGameplay.h +++ b/stepmania/src/ScreenGameplay.h @@ -71,6 +71,7 @@ protected: bool IsLastSong(); void LoadNextSong(); float StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic); + void ShowSavePrompt( ScreenMessage SM_SendWhenDone ); bool OneIsHot(); bool AllAreInDanger(); diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index f281ada400..d738d8b52b 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -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)() ) diff --git a/stepmania/src/ScreenManager.h b/stepmania/src/ScreenManager.h index 112633b9fb..b53fed0672 100644 --- a/stepmania/src/ScreenManager.h +++ b/stepmania/src/ScreenManager.h @@ -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 ); diff --git a/stepmania/src/ScreenPrompt.cpp b/stepmania/src/ScreenPrompt.cpp index 604a93e0e6..ecc2381b47 100644 --- a/stepmania/src/ScreenPrompt.cpp +++ b/stepmania/src/ScreenPrompt.cpp @@ -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); } } diff --git a/stepmania/src/ScreenPrompt.h b/stepmania/src/ScreenPrompt.h index b1c23548fc..ae21e1065c 100644 --- a/stepmania/src/ScreenPrompt.h +++ b/stepmania/src/ScreenPrompt.h @@ -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; };