eliminate Save on ScreenEditMenu when creating new steps
This commit is contained in:
@@ -949,6 +949,7 @@ Class=ScreenSplash
|
|||||||
Fallback=ScreenWithMenuElements
|
Fallback=ScreenWithMenuElements
|
||||||
MinimumLoadDelaySeconds=2
|
MinimumLoadDelaySeconds=2
|
||||||
AllowStartToSkip=0
|
AllowStartToSkip=0
|
||||||
|
PrepareScreen=0
|
||||||
|
|
||||||
[ScreenStage]
|
[ScreenStage]
|
||||||
Class=ScreenStage
|
Class=ScreenStage
|
||||||
@@ -4238,3 +4239,7 @@ ItemUseRateSeconds=0
|
|||||||
|
|
||||||
[OptionRowHandler]
|
[OptionRowHandler]
|
||||||
StepsTypesToHide=
|
StepsTypesToHide=
|
||||||
|
|
||||||
|
[ScreenMemcardSaveEditsAfterDeleteSteps]
|
||||||
|
|
||||||
|
[ScreenMemcardSaveEditsInEditor]
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ void SMLoader::LoadFromSMTokens(
|
|||||||
Steps &out
|
Steps &out
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
out.SetSavedToDisk( true ); // we're loading from disk, so this is by definintion already saved
|
||||||
|
|
||||||
TrimLeft(sStepsType); TrimRight(sStepsType);
|
TrimLeft(sStepsType); TrimRight(sStepsType);
|
||||||
TrimLeft(sDescription); TrimRight(sDescription);
|
TrimLeft(sDescription); TrimRight(sDescription);
|
||||||
TrimLeft(sDifficulty); TrimRight(sDifficulty);
|
TrimLeft(sDifficulty); TrimRight(sDifficulty);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include "Style.h"
|
#include "Style.h"
|
||||||
#include "ActorUtil.h"
|
#include "ActorUtil.h"
|
||||||
#include "ScreenPrompt.h"
|
#include "ScreenPrompt.h"
|
||||||
|
#include "CommonMetrics.h"
|
||||||
|
|
||||||
const float RECORD_HOLD_SECONDS = 0.3f;
|
const float RECORD_HOLD_SECONDS = 0.3f;
|
||||||
|
|
||||||
@@ -1643,7 +1644,19 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
|
|
||||||
case SM_DoExit:
|
case SM_DoExit:
|
||||||
if( ScreenPrompt::s_LastAnswer != ANSWER_CANCEL )
|
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 );
|
m_Out.StartTransitioning( SM_GoToNextScreen );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SM_GainFocus:
|
case SM_GainFocus:
|
||||||
@@ -1782,7 +1795,17 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
|
|||||||
ASSERT( pSteps );
|
ASSERT( pSteps );
|
||||||
|
|
||||||
pSteps->SetNoteData( m_NoteDataEdit );
|
pSteps->SetNoteData( m_NoteDataEdit );
|
||||||
|
pSteps->SetSavedToDisk( true );
|
||||||
|
|
||||||
|
if( HOME_EDIT_MODE )
|
||||||
|
{
|
||||||
|
SCREENMAN->AddNewScreenToTop( "ScreenMemcardSaveEditsInEditor", SM_None );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
GAMESTATE->m_pCurSong->Save();
|
GAMESTATE->m_pCurSong->Save();
|
||||||
|
SCREENMAN->ZeroNextUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
// we shouldn't say we're saving a DWI if we're on any game besides
|
// 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
|
// 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
|
// helpers for MenuStart() below
|
||||||
void DeleteCurSteps( void* pThrowAway )
|
void DeleteCurSteps( void* pThrowAway )
|
||||||
@@ -112,7 +113,16 @@ void DeleteCurSteps( void* pThrowAway )
|
|||||||
Song* pSong = GAMESTATE->m_pCurSong;
|
Song* pSong = GAMESTATE->m_pCurSong;
|
||||||
Steps* pStepsToDelete = GAMESTATE->m_pCurSteps[PLAYER_1];
|
Steps* pStepsToDelete = GAMESTATE->m_pCurSteps[PLAYER_1];
|
||||||
pSong->RemoveSteps( pStepsToDelete );
|
pSong->RemoveSteps( pStepsToDelete );
|
||||||
|
if( HOME_EDIT_MODE )
|
||||||
|
{
|
||||||
|
SCREENMAN->AddNewScreenToTop( "ScreenMemcardSaveEditsAfterDeleteSteps", SM_None );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
pSong->Save();
|
pSong->Save();
|
||||||
|
SCREENMAN->ZeroNextUpdate();
|
||||||
|
}
|
||||||
|
g_pScreenEditMenu->m_Selector.RefreshAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -157,24 +167,19 @@ void ScreenEditMenu::MenuStart( PlayerNumber pn )
|
|||||||
|
|
||||||
if( !pSong->HasMusic() )
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( action )
|
switch( action )
|
||||||
{
|
{
|
||||||
case EDIT_MENU_ACTION_EDIT:
|
case EDIT_MENU_ACTION_EDIT:
|
||||||
// Prepare prepare for ScreenEdit
|
|
||||||
ASSERT( pSteps );
|
|
||||||
SOUND->StopMusic();
|
|
||||||
SCREENMAN->PlayStartSound();
|
|
||||||
StartTransitioning( SM_GoToNextScreen );
|
|
||||||
break;
|
break;
|
||||||
case EDIT_MENU_ACTION_DELETE:
|
case EDIT_MENU_ACTION_DELETE:
|
||||||
ASSERT( pSteps );
|
ASSERT( pSteps );
|
||||||
SCREENMAN->Prompt( SM_RefreshSelector, "These steps will be lost permanently.\n\nContinue with delete?", PROMPT_YES_NO, ANSWER_NO, DeleteCurSteps );
|
SCREENMAN->Prompt( SM_RefreshSelector, "These steps will be lost permanently.\n\nContinue with delete?", PROMPT_YES_NO, ANSWER_NO, DeleteCurSteps );
|
||||||
m_Selector.RefreshAll();
|
g_pScreenEditMenu = this;
|
||||||
return;
|
break;
|
||||||
case EDIT_MENU_ACTION_COPY:
|
case EDIT_MENU_ACTION_COPY:
|
||||||
case EDIT_MENU_ACTION_AUTOGEN:
|
case EDIT_MENU_ACTION_AUTOGEN:
|
||||||
ASSERT( !pSteps );
|
ASSERT( !pSteps );
|
||||||
@@ -203,14 +208,13 @@ void ScreenEditMenu::MenuStart( PlayerNumber pn )
|
|||||||
|
|
||||||
SCREENMAN->SystemMessage( "Steps created from AutoGen." );
|
SCREENMAN->SystemMessage( "Steps created from AutoGen." );
|
||||||
SOUND->PlayOnce( THEME->GetPathS(m_sName,"create") );
|
SOUND->PlayOnce( THEME->GetPathS(m_sName,"create") );
|
||||||
pSong->Save();
|
|
||||||
|
|
||||||
GAMESTATE->m_pCurSong.Set( pSong );
|
GAMESTATE->m_pCurSong.Set( pSong );
|
||||||
GAMESTATE->m_pCurSteps[0].Set( pNewSteps );
|
GAMESTATE->m_pCurSteps[0].Set( pNewSteps );
|
||||||
|
|
||||||
m_Selector.RefreshAll();
|
m_Selector.RefreshAll();
|
||||||
}
|
}
|
||||||
return;
|
break;
|
||||||
case EDIT_MENU_ACTION_BLANK:
|
case EDIT_MENU_ACTION_BLANK:
|
||||||
ASSERT( !pSteps );
|
ASSERT( !pSteps );
|
||||||
{
|
{
|
||||||
@@ -228,14 +232,34 @@ void ScreenEditMenu::MenuStart( PlayerNumber pn )
|
|||||||
SCREENMAN->SystemMessage( "Blank Steps created." );
|
SCREENMAN->SystemMessage( "Blank Steps created." );
|
||||||
SOUND->PlayOnce( THEME->GetPathS(m_sName,"create") );
|
SOUND->PlayOnce( THEME->GetPathS(m_sName,"create") );
|
||||||
m_Selector.RefreshAll();
|
m_Selector.RefreshAll();
|
||||||
pSong->Save();
|
|
||||||
|
|
||||||
GAMESTATE->m_pCurSong.Set( pSong );
|
GAMESTATE->m_pCurSong.Set( pSong );
|
||||||
GAMESTATE->m_pCurSteps[0].Set( pNewSteps );
|
GAMESTATE->m_pCurSteps[0].Set( pNewSteps );
|
||||||
|
|
||||||
m_Selector.RefreshAll();
|
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:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
@@ -257,7 +281,7 @@ void ScreenEditMenu::RefreshExplanationText()
|
|||||||
|
|
||||||
void ScreenEditMenu::RefreshNumStepsLoadedFromProfile()
|
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;
|
int iMaxStepsLoadedFromProfile = MAX_STEPS_LOADED_FROM_PROFILE;
|
||||||
if( iMaxStepsLoadedFromProfile != -1 )
|
if( iMaxStepsLoadedFromProfile != -1 )
|
||||||
s += ssprintf( " / %d", iMaxStepsLoadedFromProfile );
|
s += ssprintf( " / %d", iMaxStepsLoadedFromProfile );
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ private:
|
|||||||
|
|
||||||
void RefreshExplanationText();
|
void RefreshExplanationText();
|
||||||
void RefreshNumStepsLoadedFromProfile();
|
void RefreshNumStepsLoadedFromProfile();
|
||||||
|
public:
|
||||||
EditMenu m_Selector;
|
EditMenu m_Selector;
|
||||||
|
private:
|
||||||
BitmapText m_textExplanation;
|
BitmapText m_textExplanation;
|
||||||
BitmapText m_textNumStepsLoadedFromProfile;
|
BitmapText m_textNumStepsLoadedFromProfile;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ const ScreenMessage SM_PrepScreen = (ScreenMessage)(SM_User+0);
|
|||||||
|
|
||||||
REGISTER_SCREEN_CLASS( ScreenSplash );
|
REGISTER_SCREEN_CLASS( ScreenSplash );
|
||||||
ScreenSplash::ScreenSplash( CString sClassName ) : ScreenWithMenuElements( sClassName ),
|
ScreenSplash::ScreenSplash( CString sClassName ) : ScreenWithMenuElements( sClassName ),
|
||||||
|
PREPARE_SCREEN (m_sName,"PrepareScreen"),
|
||||||
ALLOW_START_TO_SKIP (m_sName,"AllowStartToSkip"),
|
ALLOW_START_TO_SKIP (m_sName,"AllowStartToSkip"),
|
||||||
NEXT_SCREEN (m_sName,"NextScreen"),
|
NEXT_SCREEN (m_sName,"NextScreen"),
|
||||||
PREV_SCREEN (m_sName,"PrevScreen"),
|
PREV_SCREEN (m_sName,"PrevScreen"),
|
||||||
@@ -30,6 +31,7 @@ void ScreenSplash::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
case SM_PrepScreen:
|
case SM_PrepScreen:
|
||||||
{
|
{
|
||||||
RageTimer length;
|
RageTimer length;
|
||||||
|
if( PREPARE_SCREEN )
|
||||||
SCREENMAN->PrepareScreen( NEXT_SCREEN );
|
SCREENMAN->PrepareScreen( NEXT_SCREEN );
|
||||||
float fScreenLoadSeconds = length.GetDeltaTime();
|
float fScreenLoadSeconds = length.GetDeltaTime();
|
||||||
|
|
||||||
@@ -42,6 +44,9 @@ void ScreenSplash::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
StartTransitioning( SM_GoToNextScreen );
|
StartTransitioning( SM_GoToNextScreen );
|
||||||
break;
|
break;
|
||||||
case SM_GoToNextScreen:
|
case SM_GoToNextScreen:
|
||||||
|
if( SCREENMAN->IsStackedScreen(SCREENMAN->GetTopScreen()) )
|
||||||
|
SCREENMAN->PopTopScreen();
|
||||||
|
else
|
||||||
SCREENMAN->SetNewScreen( NEXT_SCREEN );
|
SCREENMAN->SetNewScreen( NEXT_SCREEN );
|
||||||
break;
|
break;
|
||||||
case SM_GoToPrevScreen:
|
case SM_GoToPrevScreen:
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ protected:
|
|||||||
ThemeMetric<CString> NEXT_SCREEN;
|
ThemeMetric<CString> NEXT_SCREEN;
|
||||||
ThemeMetric<CString> PREV_SCREEN;
|
ThemeMetric<CString> PREV_SCREEN;
|
||||||
ThemeMetric<float> MINIMUM_LOAD_DELAY_SECONDS;
|
ThemeMetric<float> MINIMUM_LOAD_DELAY_SECONDS;
|
||||||
|
ThemeMetric<bool> PREPARE_SCREEN;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#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;
|
/* Compress all Steps. During initial caching, this will remove cached NoteData;
|
||||||
* during cached loads, this will just remove cached SMData. */
|
* 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. */
|
/* Load the cached banners, if it's not loaded already. */
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
Steps::Steps()
|
Steps::Steps()
|
||||||
{
|
{
|
||||||
|
m_bSavedToDisk = false;
|
||||||
m_StepsType = STEPS_TYPE_INVALID;
|
m_StepsType = STEPS_TYPE_INVALID;
|
||||||
m_LoadedFromProfile = PROFILE_SLOT_INVALID;
|
m_LoadedFromProfile = PROFILE_SLOT_INVALID;
|
||||||
m_uHash = 0;
|
m_uHash = 0;
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ public:
|
|||||||
const RadarValues& GetRadarValues() const { return Real()->m_RadarValues; }
|
const RadarValues& GetRadarValues() const { return Real()->m_RadarValues; }
|
||||||
|
|
||||||
void SetFile( CString fn );
|
void SetFile( CString fn );
|
||||||
|
void SetSavedToDisk( bool b ) { m_bSavedToDisk = b; }
|
||||||
|
bool GetSavedToDisk() { return m_bSavedToDisk; }
|
||||||
void SetDescription(CString desc);
|
void SetDescription(CString desc);
|
||||||
static bool MakeValidDescription( CString &sPreferredDescription ); // return true if was modified
|
static bool MakeValidDescription( CString &sPreferredDescription ); // return true if was modified
|
||||||
|
|
||||||
@@ -77,6 +79,7 @@ protected:
|
|||||||
const Steps *Real() const;
|
const Steps *Real() const;
|
||||||
|
|
||||||
CString m_sFilename;
|
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. */
|
/* 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
|
ProfileSlot m_LoadedFromProfile; // PROFILE_SLOT_INVALID if wasn't loaded from a profile
|
||||||
|
|||||||
Reference in New Issue
Block a user