Split the given composite NoteData into it's constituent parts. If the given NoteData is not composite, just copy it.

This commit is contained in:
Steve Checkoway
2006-06-20 14:32:09 +00:00
parent fff087a76b
commit 96e3f211b8
2 changed files with 46 additions and 1 deletions
+45 -1
View File
@@ -263,10 +263,28 @@ void NoteDataUtil::LoadFromSMNoteDataString( NoteData &out, const RString &sSMNo
/* Clear notes, but keep the same number of tracks. */
int iNumTracks = out.GetNumTracks();
bool bComposite = out.IsComposite();
out.Init();
out.SetNumTracks( iNumTracks );
out.SetComposite( bComposite );
LoadFromSMNoteDataStringWithPlayer( out, sSMNoteData, 0, sSMNoteData.size(), PLAYER_INVALID, iNumTracks );
if( !bComposite )
{
LoadFromSMNoteDataStringWithPlayer( out, sSMNoteData, 0, sSMNoteData.size(),
PLAYER_INVALID, iNumTracks );
return;
}
int start = 0, size = -1;
FOREACH_PlayerNumber( pn )
{
// Split in place.
split( sSMNoteData, "&", start, size, false );
if( unsigned(start) == sSMNoteData.size() )
break;
LoadFromSMNoteDataStringWithPlayer( out, sSMNoteData, start, size, pn, iNumTracks );
}
}
void NoteDataUtil::InsertHoldTails( NoteData &inout )
@@ -369,6 +387,32 @@ void NoteDataUtil::GetSMNoteDataString( const NoteData &in_, RString &notes_out
}
}
void NoteDataUtil::SplitCompositeNoteData( const NoteData &in, vector<NoteData> &out )
{
if( !in.IsComposite() )
{
out.push_back( in );
return;
}
for( int t = 0; t < in.GetNumTracks(); ++t )
{
for( NoteData::const_iterator iter = in.begin(t); iter != in.end(t); ++iter )
{
int row = iter->first;
TapNote tn = iter->second;
unsigned index = int( tn.pn );
DEBUG_ASSERT( index < NUM_PlayerNumber );
if( out.size() <= index )
out.resize( index + 1 );
tn.pn = PLAYER_INVALID;
out[index].SetTapNote( t, row, tn );
}
}
}
void NoteDataUtil::LoadTransformedSlidingWindow( const NoteData &in, NoteData &out, int iNewNumTracks )
{
// reset all notes