Switch to separate note patterns for couples. Add loader support.

This will break saving couples to DWI and probably the editor, too.
Getting to that.
This commit is contained in:
Glenn Maynard
2002-09-07 05:04:04 +00:00
parent a0cba0afa4
commit 33a0e450e4
10 changed files with 111 additions and 42 deletions
+44 -10
View File
@@ -61,10 +61,13 @@ bool DWILoader::LoadFromDWITokens(
CString sNumFeet,
CString sStepData1,
CString sStepData2,
Notes &out)
Notes &out, Notes &out2)
{
LOG->Trace( "Notes::LoadFromDWITokens()" );
out.m_NotesType = NOTES_TYPE_INVALID;
out2.m_NotesType = NOTES_TYPE_INVALID;
sStepData1.Replace( "\n", "" );
sStepData1.Replace( " ", "" );
sStepData2.Replace( "\n", "" );
@@ -72,7 +75,7 @@ bool DWILoader::LoadFromDWITokens(
if( sMode == "SINGLE" ) out.m_NotesType = NOTES_TYPE_DANCE_SINGLE;
else if( sMode == "DOUBLE" ) out.m_NotesType = NOTES_TYPE_DANCE_DOUBLE;
else if( sMode == "COUPLE" ) out.m_NotesType = NOTES_TYPE_DANCE_COUPLE;
else if( sMode == "COUPLE" ) out.m_NotesType = NOTES_TYPE_DANCE_COUPLE_1;
else if( sMode == "SOLO" ) out.m_NotesType = NOTES_TYPE_DANCE_SOLO;
else
{
@@ -91,7 +94,7 @@ bool DWILoader::LoadFromDWITokens(
mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_RIGHT] = 3;
break;
case NOTES_TYPE_DANCE_DOUBLE:
case NOTES_TYPE_DANCE_COUPLE:
case NOTES_TYPE_DANCE_COUPLE_1:
mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_LEFT] = 0;
mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_DOWN] = 1;
mapDanceNoteToNoteDataColumn[DANCE_NOTE_PAD1_UP] = 2;
@@ -227,18 +230,39 @@ bool DWILoader::LoadFromDWITokens(
ASSERT( pNoteData->m_iNumTracks > 0 );
out.m_sSMNoteData = pNoteData->GetSMNoteDataString();
if(out.m_NotesType == NOTES_TYPE_DANCE_COUPLE_1) {
int iTransformNewToOld[MAX_NOTE_TRACKS];
/* Couples. Set up a second note pattern for the 2p side. */
out2 = out;
out2.m_NotesType = NOTES_TYPE_DANCE_COUPLE_2;
for( int i = 0; i < MAX_NOTE_TRACKS; ++i)
iTransformNewToOld[i] = -1;
iTransformNewToOld[0] = 4;
iTransformNewToOld[1] = 5;
iTransformNewToOld[2] = 6;
iTransformNewToOld[3] = 7;
NoteData* pNoteData2 = new NoteData;
pNoteData2->m_iNumTracks = 4;
pNoteData2->LoadTransformed( pNoteData, 4, iTransformNewToOld );
out2.SetNoteData(pNoteData2);
delete pNoteData2;
out2.TidyUpData();
pNoteData->m_iNumTracks = 4;
}
out.SetNoteData(pNoteData);
delete pNoteData;
out.TidyUpData();
return true;
}
bool DWILoader::LoadFromDWIFile( CString sPath, Song &out )
{
LOG->Trace( "Song::LoadFromDWIFile(%s)", sPath );
@@ -322,15 +346,25 @@ bool DWILoader::LoadFromDWIFile( CString sPath, Song &out )
0==stricmp(sValueName,"SOLO"))
{
Notes* pNewNotes = new Notes;
Notes* pNewNotes2 = new Notes;
LoadFromDWITokens(
sParams[0],
sParams[1],
sParams[2],
sParams[3],
(iNumParams==5) ? sParams[4] : "",
*pNewNotes
*pNewNotes,
*pNewNotes2
);
out.m_apNotes.Add( pNewNotes );
/* Add either note pattern that actually loaded. */
if(pNewNotes->m_NotesType != NOTES_TYPE_INVALID)
out.m_apNotes.Add( pNewNotes );
else
delete pNewNotes;
if(pNewNotes2->m_NotesType != NOTES_TYPE_INVALID)
out.m_apNotes.Add( pNewNotes2 );
else
delete pNewNotes2;
}
else
// do nothing. We don't care about this value name