eliminate Save on ScreenEditMenu when creating new steps

This commit is contained in:
Chris Danford
2005-03-08 07:57:14 +00:00
parent b6eebd2517
commit 264dd13b45
10 changed files with 86 additions and 22 deletions
+5
View File
@@ -949,6 +949,7 @@ Class=ScreenSplash
Fallback=ScreenWithMenuElements
MinimumLoadDelaySeconds=2
AllowStartToSkip=0
PrepareScreen=0
[ScreenStage]
Class=ScreenStage
@@ -4238,3 +4239,7 @@ ItemUseRateSeconds=0
[OptionRowHandler]
StepsTypesToHide=
[ScreenMemcardSaveEditsAfterDeleteSteps]
[ScreenMemcardSaveEditsInEditor]
+2
View File
@@ -21,6 +21,8 @@ void SMLoader::LoadFromSMTokens(
Steps &out
)
{
out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved
TrimLeft(sStepsType); TrimRight(sStepsType);
TrimLeft(sDescription); TrimRight(sDescription);
TrimLeft(sDifficulty); TrimRight(sDifficulty);
+24 -1
View File
@@ -30,6 +30,7 @@
#include "Style.h"
#include "ActorUtil.h"
#include "ScreenPrompt.h"
#include "CommonMetrics.h"
const float RECORD_HOLD_SECONDS = 0.3f;
@@ -1643,7 +1644,19 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
case SM_DoExit:
if( ScreenPrompt::s_LastAnswer != ANSWER_CANCEL )
{
// If these steps have never been saved, then we should delete them.
// If the user created them in the edit menu and never bothered
// to save them, then they aren't wanted.
Steps* pSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
if( !pSteps->GetSavedToDisk() )
{
Song* pSong = GAMESTATE->m_pCurSong;
pSong->RemoveSteps( pSteps );
}
m_Out.StartTransitioning( SM_GoToNextScreen );
}
break;
case SM_GainFocus:
@@ -1782,7 +1795,17 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
ASSERT( pSteps );
pSteps->SetNoteData( m_NoteDataEdit );
GAMESTATE->m_pCurSong->Save();
pSteps->SetSavedToDisk( true );
if( HOME_EDIT_MODE )
{
SCREENMAN->AddNewScreenToTop( "ScreenMemcardSaveEditsInEditor", SM_None );
}
else
{
GAMESTATE->m_pCurSong->Save();
SCREENMAN->ZeroNextUpdate();
}
// we shouldn't say we're saving a DWI if we're on any game besides
// dance, it just looks tacky and people may be wondering where the
+38 -14
View File
@@ -105,6 +105,7 @@ void ScreenEditMenu::MenuRight( PlayerNumber pn, const InputEventType type )
}
}
ScreenEditMenu *g_pScreenEditMenu = NULL;
// helpers for MenuStart() below
void DeleteCurSteps( void* pThrowAway )
@@ -112,7 +113,16 @@ void DeleteCurSteps( void* pThrowAway )
Song* pSong = GAMESTATE->m_pCurSong;
Steps* pStepsToDelete = GAMESTATE->m_pCurSteps[PLAYER_1];
pSong->RemoveSteps( pStepsToDelete );
pSong->Save();
if( HOME_EDIT_MODE )
{
SCREENMAN->AddNewScreenToTop( "ScreenMemcardSaveEditsAfterDeleteSteps", SM_None );
}
else
{
pSong->Save();
SCREENMAN->ZeroNextUpdate();
}
g_pScreenEditMenu->m_Selector.RefreshAll();
}
@@ -157,24 +167,19 @@ void ScreenEditMenu::MenuStart( PlayerNumber pn )
if( !pSong->HasMusic() )
{
SCREENMAN->Prompt( SM_None, "This song is missing a music file\nand cannot be edited" );
SCREENMAN->Prompt( SM_None, "This song is missing a music file and cannot be edited" );
return;
}
switch( action )
{
case EDIT_MENU_ACTION_EDIT:
// Prepare prepare for ScreenEdit
ASSERT( pSteps );
SOUND->StopMusic();
SCREENMAN->PlayStartSound();
StartTransitioning( SM_GoToNextScreen );
break;
case EDIT_MENU_ACTION_DELETE:
ASSERT( pSteps );
SCREENMAN->Prompt( SM_RefreshSelector, "These steps will be lost permanently.\n\nContinue with delete?", PROMPT_YES_NO, ANSWER_NO, DeleteCurSteps );
m_Selector.RefreshAll();
return;
g_pScreenEditMenu = this;
break;
case EDIT_MENU_ACTION_COPY:
case EDIT_MENU_ACTION_AUTOGEN:
ASSERT( !pSteps );
@@ -203,14 +208,13 @@ void ScreenEditMenu::MenuStart( PlayerNumber pn )
SCREENMAN->SystemMessage( "Steps created from AutoGen." );
SOUND->PlayOnce( THEME->GetPathS(m_sName,"create") );
pSong->Save();
GAMESTATE->m_pCurSong.Set( pSong );
GAMESTATE->m_pCurSteps[0].Set( pNewSteps );
m_Selector.RefreshAll();
}
return;
break;
case EDIT_MENU_ACTION_BLANK:
ASSERT( !pSteps );
{
@@ -228,14 +232,34 @@ void ScreenEditMenu::MenuStart( PlayerNumber pn )
SCREENMAN->SystemMessage( "Blank Steps created." );
SOUND->PlayOnce( THEME->GetPathS(m_sName,"create") );
m_Selector.RefreshAll();
pSong->Save();
GAMESTATE->m_pCurSong.Set( pSong );
GAMESTATE->m_pCurSteps[0].Set( pNewSteps );
m_Selector.RefreshAll();
}
return;
break;
default:
ASSERT(0);
}
pSteps = m_Selector.GetSelectedSteps();
switch( action )
{
case EDIT_MENU_ACTION_EDIT:
case EDIT_MENU_ACTION_COPY:
case EDIT_MENU_ACTION_AUTOGEN:
case EDIT_MENU_ACTION_BLANK:
// Prepare prepare for ScreenEdit
ASSERT( pSteps );
SOUND->StopMusic();
SCREENMAN->PlayStartSound();
StartTransitioning( SM_GoToNextScreen );
break;
case EDIT_MENU_ACTION_DELETE:
break;
default:
ASSERT(0);
}
@@ -257,7 +281,7 @@ void ScreenEditMenu::RefreshExplanationText()
void ScreenEditMenu::RefreshNumStepsLoadedFromProfile()
{
CString s = ssprintf( "edits loaded: %d", SONGMAN->GetNumStepsLoadedFromProfile() );
CString s = ssprintf( "edits used: %d", SONGMAN->GetNumStepsLoadedFromProfile() );
int iMaxStepsLoadedFromProfile = MAX_STEPS_LOADED_FROM_PROFILE;
if( iMaxStepsLoadedFromProfile != -1 )
s += ssprintf( " / %d", iMaxStepsLoadedFromProfile );
+2 -2
View File
@@ -24,9 +24,9 @@ private:
void RefreshExplanationText();
void RefreshNumStepsLoadedFromProfile();
public:
EditMenu m_Selector;
private:
BitmapText m_textExplanation;
BitmapText m_textNumStepsLoadedFromProfile;
};
+7 -2
View File
@@ -8,6 +8,7 @@ const ScreenMessage SM_PrepScreen = (ScreenMessage)(SM_User+0);
REGISTER_SCREEN_CLASS( ScreenSplash );
ScreenSplash::ScreenSplash( CString sClassName ) : ScreenWithMenuElements( sClassName ),
PREPARE_SCREEN (m_sName,"PrepareScreen"),
ALLOW_START_TO_SKIP (m_sName,"AllowStartToSkip"),
NEXT_SCREEN (m_sName,"NextScreen"),
PREV_SCREEN (m_sName,"PrevScreen"),
@@ -30,7 +31,8 @@ void ScreenSplash::HandleScreenMessage( const ScreenMessage SM )
case SM_PrepScreen:
{
RageTimer length;
SCREENMAN->PrepareScreen( NEXT_SCREEN );
if( PREPARE_SCREEN )
SCREENMAN->PrepareScreen( NEXT_SCREEN );
float fScreenLoadSeconds = length.GetDeltaTime();
/* The screen load took fScreenLoadSeconds. Move on to the next screen after
@@ -42,7 +44,10 @@ void ScreenSplash::HandleScreenMessage( const ScreenMessage SM )
StartTransitioning( SM_GoToNextScreen );
break;
case SM_GoToNextScreen:
SCREENMAN->SetNewScreen( NEXT_SCREEN );
if( SCREENMAN->IsStackedScreen(SCREENMAN->GetTopScreen()) )
SCREENMAN->PopTopScreen();
else
SCREENMAN->SetNewScreen( NEXT_SCREEN );
break;
case SM_GoToPrevScreen:
SCREENMAN->DeletePreparedScreens();
+1
View File
@@ -21,6 +21,7 @@ protected:
ThemeMetric<CString> NEXT_SCREEN;
ThemeMetric<CString> PREV_SCREEN;
ThemeMetric<float> MINIMUM_LOAD_DELAY_SECONDS;
ThemeMetric<bool> PREPARE_SCREEN;
};
#endif
+3 -3
View File
@@ -265,13 +265,13 @@ bool Song::LoadFromSongDir( CString sDir )
for( unsigned i=0; i<m_vpSteps.size(); i++ )
FOREACH( Steps*, m_vpSteps, s )
{
m_vpSteps[i]->SetFile( GetCacheFilePath() );
(*s)->SetFile( GetCacheFilePath() );
/* Compress all Steps. During initial caching, this will remove cached NoteData;
* during cached loads, this will just remove cached SMData. */
m_vpSteps[i]->Compress();
(*s)->Compress();
}
/* Load the cached banners, if it's not loaded already. */
+1
View File
@@ -33,6 +33,7 @@
Steps::Steps()
{
m_bSavedToDisk = false;
m_StepsType = STEPS_TYPE_INVALID;
m_LoadedFromProfile = PROFILE_SLOT_INVALID;
m_uHash = 0;
+3
View File
@@ -41,6 +41,8 @@ public:
const RadarValues& GetRadarValues() const { return Real()->m_RadarValues; }
void SetFile( CString fn );
void SetSavedToDisk( bool b ) { m_bSavedToDisk = b; }
bool GetSavedToDisk() { return m_bSavedToDisk; }
void SetDescription(CString desc);
static bool MakeValidDescription( CString &sPreferredDescription ); // return true if was modified
@@ -77,6 +79,7 @@ protected:
const Steps *Real() const;
CString m_sFilename;
bool m_bSavedToDisk; // true if this was loaded from disk or has been saved to disk.
/* These values are pulled from the autogen source first, if there is one. */
ProfileSlot m_LoadedFromProfile; // PROFILE_SLOT_INVALID if wasn't loaded from a profile