eliminate Save on ScreenEditMenu when creating new steps
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -24,9 +24,9 @@ private:
|
||||
|
||||
void RefreshExplanationText();
|
||||
void RefreshNumStepsLoadedFromProfile();
|
||||
|
||||
public:
|
||||
EditMenu m_Selector;
|
||||
|
||||
private:
|
||||
BitmapText m_textExplanation;
|
||||
BitmapText m_textNumStepsLoadedFromProfile;
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -21,6 +21,7 @@ protected:
|
||||
ThemeMetric<CString> NEXT_SCREEN;
|
||||
ThemeMetric<CString> PREV_SCREEN;
|
||||
ThemeMetric<float> MINIMUM_LOAD_DELAY_SECONDS;
|
||||
ThemeMetric<bool> PREPARE_SCREEN;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
Steps::Steps()
|
||||
{
|
||||
m_bSavedToDisk = false;
|
||||
m_StepsType = STEPS_TYPE_INVALID;
|
||||
m_LoadedFromProfile = PROFILE_SLOT_INVALID;
|
||||
m_uHash = 0;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user