Alternate fix for some of the bugs that exist when choose a different

stepchart in edit mode.
This commit is contained in:
John Bauer
2006-11-12 06:30:14 +00:00
parent 29961e9101
commit 4b21ed256c
2 changed files with 27 additions and 13 deletions
+23 -11
View File
@@ -770,7 +770,7 @@ void ScreenEdit::Init()
ScreenEdit::~ScreenEdit() ScreenEdit::~ScreenEdit()
{ {
// UGLY: Don't delete the Song's steps. // UGLY: Don't delete the Song's steps.
m_songLastSave.DetachSteps(); m_SongLastSave.DetachSteps();
LOG->Trace( "ScreenEdit::~ScreenEdit()" ); LOG->Trace( "ScreenEdit::~ScreenEdit()" );
m_soundMusic.StopPlaying(); m_soundMusic.StopPlaying();
@@ -1442,7 +1442,6 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB )
GAMESTATE->m_pCurSteps[PLAYER_1].Set( pSteps ); GAMESTATE->m_pCurSteps[PLAYER_1].Set( pSteps );
m_pSteps = pSteps; m_pSteps = pSteps;
pSteps->GetNoteData( m_NoteDataEdit ); pSteps->GetNoteData( m_NoteDataEdit );
CopyToLastSave();
RString s = ssprintf( RString s = ssprintf(
SWITCHED_TO.GetValue() + " %s %s '%s' (%d of %d)", SWITCHED_TO.GetValue() + " %s %s '%s' (%d of %d)",
@@ -3430,16 +3429,31 @@ void ScreenEdit::SetupCourseAttacks()
void ScreenEdit::CopyToLastSave() void ScreenEdit::CopyToLastSave()
{ {
m_songLastSave = *GAMESTATE->m_pCurSong; ASSERT( GAMESTATE->m_pCurSong );
if( GAMESTATE->m_pCurSteps[PLAYER_1] ) ASSERT( GAMESTATE->m_pCurSteps[PLAYER_1] );
m_stepsLastSave = *GAMESTATE->m_pCurSteps[PLAYER_1]; m_SongLastSave = *GAMESTATE->m_pCurSong;
m_mStepsLastSave.clear();
const vector<Steps*> &vSteps = GAMESTATE->m_pCurSong->GetStepsByStepsType( GAMESTATE->m_pCurSteps[PLAYER_1]->m_StepsType );
for( vector<Steps*>::const_iterator it = vSteps.begin(); it != vSteps.end(); ++it )
{
m_mStepsLastSave[(*it)->GetDifficulty()] = **it;
}
} }
void ScreenEdit::CopyFromLastSave() void ScreenEdit::CopyFromLastSave()
{ {
*GAMESTATE->m_pCurSong = m_songLastSave; // We are assuming two things here:
if( GAMESTATE->m_pCurSteps[PLAYER_1] ) // 1) No steps can be created by ScreenEdit
*GAMESTATE->m_pCurSteps[PLAYER_1] = m_stepsLastSave; // 2) No steps can be deleted by ScreenEdit (except possibly when we exit)
*GAMESTATE->m_pCurSong = m_SongLastSave;
const vector<Steps*> &vSteps = GAMESTATE->m_pCurSong->GetStepsByStepsType( GAMESTATE->m_pCurSteps[PLAYER_1]->m_StepsType );
ASSERT( vSteps.size() == m_mStepsLastSave.size() );
for( vector<Steps*>::const_iterator it = vSteps.begin(); it != vSteps.end(); ++it )
{
map< Difficulty, Steps >::const_iterator itOldSteps = m_mStepsLastSave.find( (*it)->GetDifficulty() );
ASSERT( itOldSteps != m_mStepsLastSave.end() );
**it = itOldSteps->second;
}
} }
void ScreenEdit::RevertFromDisk() void ScreenEdit::RevertFromDisk()
@@ -3457,9 +3471,7 @@ void ScreenEdit::RevertFromDisk()
if( id.IsValid() ) if( id.IsValid() )
GAMESTATE->m_pCurSteps[PLAYER_1].Set( id.ToSteps( GAMESTATE->m_pCurSong, false ) ); GAMESTATE->m_pCurSteps[PLAYER_1].Set( id.ToSteps( GAMESTATE->m_pCurSong, false ) );
m_songLastSave = *GAMESTATE->m_pCurSong; CopyToLastSave();
if( GAMESTATE->m_pCurSteps[PLAYER_1] )
m_stepsLastSave = *GAMESTATE->m_pCurSteps[PLAYER_1];
SetDirty(false); SetDirty(false);
} }
+4 -2
View File
@@ -17,6 +17,8 @@
#include "PlayerState.h" #include "PlayerState.h"
#include "MenuInput.h" #include "MenuInput.h"
#include <map>
const int NUM_EDIT_BUTTON_COLUMNS = 10; const int NUM_EDIT_BUTTON_COLUMNS = 10;
struct MenuDef; struct MenuDef;
@@ -253,8 +255,8 @@ protected:
void CopyFromLastSave(); void CopyFromLastSave();
void RevertFromDisk(); void RevertFromDisk();
Song m_songLastSave; Song m_SongLastSave;
Steps m_stepsLastSave; map< Difficulty, Steps > m_mStepsLastSave;
// for MODE_RECORD // for MODE_RECORD