add "Reload from disk"
sort F5/F6
This commit is contained in:
@@ -94,6 +94,7 @@ const ScreenMessage SM_BackFromSongOptions = (ScreenMessage)(SM_User+8);
|
|||||||
const ScreenMessage SM_BackFromInsertAttack = (ScreenMessage)(SM_User+9);
|
const ScreenMessage SM_BackFromInsertAttack = (ScreenMessage)(SM_User+9);
|
||||||
const ScreenMessage SM_BackFromInsertAttackModifiers= (ScreenMessage)(SM_User+10);
|
const ScreenMessage SM_BackFromInsertAttackModifiers= (ScreenMessage)(SM_User+10);
|
||||||
const ScreenMessage SM_BackFromPrefs = (ScreenMessage)(SM_User+11);
|
const ScreenMessage SM_BackFromPrefs = (ScreenMessage)(SM_User+11);
|
||||||
|
const ScreenMessage SM_DoReloadFromDisk = (ScreenMessage)(SM_User+12);
|
||||||
|
|
||||||
const CString HELP_TEXT =
|
const CString HELP_TEXT =
|
||||||
"Up/Down:\n change beat\n"
|
"Up/Down:\n change beat\n"
|
||||||
@@ -142,6 +143,7 @@ static const MenuRow g_MainMenuItems[] =
|
|||||||
{ "Play Whole Song", true, 0, { NULL } },
|
{ "Play Whole Song", true, 0, { NULL } },
|
||||||
{ "Play Current Beat To End", true, 0, { NULL } },
|
{ "Play Current Beat To End", true, 0, { NULL } },
|
||||||
{ "Save", true, 0, { NULL } },
|
{ "Save", true, 0, { NULL } },
|
||||||
|
{ "Reload from disk", true, 0, { NULL } },
|
||||||
{ "Player Options", true, 0, { NULL } },
|
{ "Player Options", true, 0, { NULL } },
|
||||||
{ "Song Options", true, 0, { NULL } },
|
{ "Song Options", true, 0, { NULL } },
|
||||||
{ "Edit Song Info", true, 0, { NULL } },
|
{ "Edit Song Info", true, 0, { NULL } },
|
||||||
@@ -311,6 +313,8 @@ ScreenEdit::ScreenEdit( CString sName ) : Screen( sName )
|
|||||||
GAMESTATE->m_PlayerOptions[PLAYER_1].m_sNoteSkin = "note";
|
GAMESTATE->m_PlayerOptions[PLAYER_1].m_sNoteSkin = "note";
|
||||||
GAMESTATE->ResetNoteSkins();
|
GAMESTATE->ResetNoteSkins();
|
||||||
|
|
||||||
|
/* XXX: Do we actually have to send real note data here, and to m_NoteFieldRecord?
|
||||||
|
* (We load again on play/record.) */
|
||||||
m_Player.Load( PLAYER_1, ¬eData, NULL, NULL, NULL, NULL, NULL, NULL, NULL );
|
m_Player.Load( PLAYER_1, ¬eData, NULL, NULL, NULL, NULL, NULL, NULL, NULL );
|
||||||
GAMESTATE->m_PlayerController[PLAYER_1] = PC_HUMAN;
|
GAMESTATE->m_PlayerController[PLAYER_1] = PC_HUMAN;
|
||||||
m_Player.SetX( PLAYER_X );
|
m_Player.SetX( PLAYER_X );
|
||||||
@@ -931,6 +935,9 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
|||||||
vector<Steps*> vSteps;
|
vector<Steps*> vSteps;
|
||||||
GAMESTATE->m_pCurSong->GetSteps( vSteps, st );
|
GAMESTATE->m_pCurSong->GetSteps( vSteps, st );
|
||||||
|
|
||||||
|
// Sort them by difficulty.
|
||||||
|
SortStepsByTypeAndDifficulty( vSteps );
|
||||||
|
|
||||||
// Find out what index the current Steps are
|
// Find out what index the current Steps are
|
||||||
vector<Steps*>::iterator it = find( vSteps.begin(), vSteps.end(), pNotes );
|
vector<Steps*>::iterator it = find( vSteps.begin(), vSteps.end(), pNotes );
|
||||||
ASSERT( it != vSteps.end() );
|
ASSERT( it != vSteps.end() );
|
||||||
@@ -957,7 +964,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ
|
|||||||
}
|
}
|
||||||
|
|
||||||
pNotes = *it;
|
pNotes = *it;
|
||||||
GAMESTATE->m_pCurNotes[PLAYER_1] = pNotes;
|
GAMESTATE->m_pCurNotes[PLAYER_1] = m_pNotes = pNotes;
|
||||||
pNotes->GetNoteData( &m_NoteFieldEdit );
|
pNotes->GetNoteData( &m_NoteFieldEdit );
|
||||||
SCREENMAN->SystemMessage( ssprintf(
|
SCREENMAN->SystemMessage( ssprintf(
|
||||||
"Switched to %s %s '%s'",
|
"Switched to %s %s '%s'",
|
||||||
@@ -1264,6 +1271,12 @@ void ScreenEdit::TransitionFromRecordToEdit()
|
|||||||
m_NoteFieldEdit.CopyRange( &m_NoteFieldRecord, iNoteIndexBegin, iNoteIndexEnd, iNoteIndexBegin );
|
m_NoteFieldEdit.CopyRange( &m_NoteFieldRecord, iNoteIndexBegin, iNoteIndexEnd, iNoteIndexBegin );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helper for SM_DoReloadFromDisk */
|
||||||
|
static bool g_DoReload;
|
||||||
|
void ReloadFromDisk( void *p )
|
||||||
|
{
|
||||||
|
g_DoReload = true;
|
||||||
|
}
|
||||||
|
|
||||||
void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
|
void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
|
||||||
{
|
{
|
||||||
@@ -1324,6 +1337,43 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
GAMESTATE->RestoreSelectedOptions(); // restore the edit and playback options
|
GAMESTATE->RestoreSelectedOptions(); // restore the edit and playback options
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SM_DoReloadFromDisk:
|
||||||
|
{
|
||||||
|
if( !g_DoReload )
|
||||||
|
return;
|
||||||
|
|
||||||
|
const StepsType st = m_pNotes->m_StepsType;
|
||||||
|
const Difficulty dc = m_pNotes->GetDifficulty();
|
||||||
|
|
||||||
|
GAMESTATE->m_pCurNotes[PLAYER_1] = NULL; /* make RevertFromDisk not try to reset it */
|
||||||
|
GAMESTATE->m_pCurSong->RevertFromDisk();
|
||||||
|
|
||||||
|
CString sMessage = "Reloaded from disk.";
|
||||||
|
Steps *pSteps = GAMESTATE->m_pCurSong->GetStepsByDifficulty( st, dc, false );
|
||||||
|
|
||||||
|
/* If we couldn't find the steps we were on before, warn and use the first available. */
|
||||||
|
if( pSteps == NULL )
|
||||||
|
{
|
||||||
|
pSteps = GAMESTATE->m_pCurSong->GetStepsByDifficulty( st, DIFFICULTY_INVALID, false );
|
||||||
|
|
||||||
|
if( pSteps )
|
||||||
|
sMessage = ssprintf( "%s steps not found; changed to %s.",
|
||||||
|
Capitalize(DifficultyToString(dc)).c_str(),
|
||||||
|
DifficultyToString(pSteps->GetDifficulty()).c_str() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we still couldn't find any steps, then all steps of the current StepsType
|
||||||
|
* were removed. Don't create them; only do that in EditMenu. */
|
||||||
|
if( pSteps == NULL )
|
||||||
|
FAIL_M("!!!"); // XXX
|
||||||
|
|
||||||
|
SCREENMAN->SystemMessage( sMessage );
|
||||||
|
|
||||||
|
m_pNotes = GAMESTATE->m_pCurNotes[PLAYER_1] = pSteps;
|
||||||
|
m_pNotes->GetNoteData( &m_NoteFieldEdit );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
case SM_GainFocus:
|
case SM_GainFocus:
|
||||||
/* We do this ourself. */
|
/* We do this ourself. */
|
||||||
SOUND->HandleSongTimer( false );
|
SOUND->HandleSongTimer( false );
|
||||||
@@ -1400,7 +1450,6 @@ void ChangeArtistTranslit( CString sNew )
|
|||||||
|
|
||||||
// End helper functions
|
// End helper functions
|
||||||
|
|
||||||
|
|
||||||
void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
|
void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
|
||||||
{
|
{
|
||||||
switch( c )
|
switch( c )
|
||||||
@@ -1452,6 +1501,12 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, int* iAnswers )
|
|||||||
SOUND->PlayOnce( THEME->GetPathToS("ScreenEdit save") );
|
SOUND->PlayOnce( THEME->GetPathToS("ScreenEdit save") );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case reload:
|
||||||
|
g_DoReload = false;
|
||||||
|
SCREENMAN->Prompt( SM_DoReloadFromDisk,
|
||||||
|
"Do you want to reload from disk?\n\nThis will destroy all changes.",
|
||||||
|
true, false, ReloadFromDisk, NULL, NULL );
|
||||||
|
break;
|
||||||
case player_options:
|
case player_options:
|
||||||
SCREENMAN->AddNewScreenToTop( "ScreenPlayerOptions", SM_BackFromPlayerOptions );
|
SCREENMAN->AddNewScreenToTop( "ScreenPlayerOptions", SM_BackFromPlayerOptions );
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ public:
|
|||||||
play_whole_song,
|
play_whole_song,
|
||||||
play_current_beat_to_end,
|
play_current_beat_to_end,
|
||||||
save,
|
save,
|
||||||
|
reload,
|
||||||
player_options,
|
player_options,
|
||||||
song_options,
|
song_options,
|
||||||
edit_song_info,
|
edit_song_info,
|
||||||
|
|||||||
Reference in New Issue
Block a user