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:
@@ -263,10 +263,28 @@ void NoteDataUtil::LoadFromSMNoteDataString( NoteData &out, const RString &sSMNo
|
|||||||
|
|
||||||
/* Clear notes, but keep the same number of tracks. */
|
/* Clear notes, but keep the same number of tracks. */
|
||||||
int iNumTracks = out.GetNumTracks();
|
int iNumTracks = out.GetNumTracks();
|
||||||
|
bool bComposite = out.IsComposite();
|
||||||
out.Init();
|
out.Init();
|
||||||
out.SetNumTracks( iNumTracks );
|
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 )
|
void NoteDataUtil::InsertHoldTails( NoteData &inout )
|
||||||
@@ -369,6 +387,32 @@ void NoteDataUtil::GetSMNoteDataString( const NoteData &in_, RString ¬es_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 )
|
void NoteDataUtil::LoadTransformedSlidingWindow( const NoteData &in, NoteData &out, int iNewNumTracks )
|
||||||
{
|
{
|
||||||
// reset all notes
|
// reset all notes
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ namespace NoteDataUtil
|
|||||||
NoteType GetSmallestNoteTypeForMeasure( const NoteData &n, int iMeasureIndex );
|
NoteType GetSmallestNoteTypeForMeasure( const NoteData &n, int iMeasureIndex );
|
||||||
void LoadFromSMNoteDataString( NoteData &out, const RString &sSMNoteData );
|
void LoadFromSMNoteDataString( NoteData &out, const RString &sSMNoteData );
|
||||||
void GetSMNoteDataString( const NoteData &in, RString ¬es_out );
|
void GetSMNoteDataString( const NoteData &in, RString ¬es_out );
|
||||||
|
void SplitCompositeNoteData( const NoteData &in, vector<NoteData> &out );
|
||||||
void LoadTransformedSlidingWindow( const NoteData &in, NoteData &out, int iNewNumTracks );
|
void LoadTransformedSlidingWindow( const NoteData &in, NoteData &out, int iNewNumTracks );
|
||||||
void LoadOverlapped( const NoteData &in, NoteData &out, int iNewNumTracks );
|
void LoadOverlapped( const NoteData &in, NoteData &out, int iNewNumTracks );
|
||||||
void LoadTransformedLights( const NoteData &in, NoteData &out, int iNewNumTracks );
|
void LoadTransformedLights( const NoteData &in, NoteData &out, int iNewNumTracks );
|
||||||
|
|||||||
Reference in New Issue
Block a user