Apply RemoveSimultaneousNotes to each part of a composite NoteData.
This commit is contained in:
@@ -818,6 +818,18 @@ void NoteDataUtil::RemoveSimultaneousNotes( NoteData &in, int iMaxSimultaneous,
|
|||||||
// given time. Never touch data outside of the range given; if many hold notes are overlapping
|
// given time. Never touch data outside of the range given; if many hold notes are overlapping
|
||||||
// iStartIndex, and we'd have to change those holds to obey iMaxSimultaneous, just do the best
|
// iStartIndex, and we'd have to change those holds to obey iMaxSimultaneous, just do the best
|
||||||
// we can without doing so.
|
// we can without doing so.
|
||||||
|
if( in.IsComposite() )
|
||||||
|
{
|
||||||
|
// Do this per part.
|
||||||
|
vector<NoteData> vParts;
|
||||||
|
|
||||||
|
SplitCompositeNoteData( in, vParts );
|
||||||
|
FOREACH( NoteData, vParts, nd )
|
||||||
|
RemoveSimultaneousNotes( *nd, iMaxSimultaneous, iStartIndex, iEndIndex );
|
||||||
|
in.Init();
|
||||||
|
in.SetNumTracks( vParts.front().GetNumTracks() );
|
||||||
|
CombineCompositeNoteData( in, vParts );
|
||||||
|
}
|
||||||
FOREACH_NONEMPTY_ROW_ALL_TRACKS_RANGE( in, r, iStartIndex, iEndIndex )
|
FOREACH_NONEMPTY_ROW_ALL_TRACKS_RANGE( in, r, iStartIndex, iEndIndex )
|
||||||
{
|
{
|
||||||
set<int> viTracksHeld;
|
set<int> viTracksHeld;
|
||||||
@@ -891,12 +903,13 @@ static void GetTrackMapping( StepsType st, NoteDataUtil::TrackMapping tt, int Nu
|
|||||||
{
|
{
|
||||||
case NoteDataUtil::left:
|
case NoteDataUtil::left:
|
||||||
case NoteDataUtil::right:
|
case NoteDataUtil::right:
|
||||||
// Is there a way to do this withoutn handling each StepsType? -Chris
|
// Is there a way to do this without handling each StepsType? -Chris
|
||||||
switch( st )
|
switch( st )
|
||||||
{
|
{
|
||||||
case STEPS_TYPE_DANCE_SINGLE:
|
case STEPS_TYPE_DANCE_SINGLE:
|
||||||
case STEPS_TYPE_DANCE_DOUBLE:
|
case STEPS_TYPE_DANCE_DOUBLE:
|
||||||
case STEPS_TYPE_DANCE_COUPLE:
|
case STEPS_TYPE_DANCE_COUPLE:
|
||||||
|
case STEPS_TYPE_DANCE_ROUTINE:
|
||||||
iTakeFromTrack[0] = 2;
|
iTakeFromTrack[0] = 2;
|
||||||
iTakeFromTrack[1] = 0;
|
iTakeFromTrack[1] = 0;
|
||||||
iTakeFromTrack[2] = 3;
|
iTakeFromTrack[2] = 3;
|
||||||
@@ -999,6 +1012,7 @@ static void GetTrackMapping( StepsType st, NoteDataUtil::TrackMapping tt, int Nu
|
|||||||
iTakeFromTrack[7] = 4;
|
iTakeFromTrack[7] = 4;
|
||||||
break;
|
break;
|
||||||
case STEPS_TYPE_DANCE_DOUBLE:
|
case STEPS_TYPE_DANCE_DOUBLE:
|
||||||
|
case STEPS_TYPE_DANCE_ROUTINE:
|
||||||
iTakeFromTrack[0] = 1;
|
iTakeFromTrack[0] = 1;
|
||||||
iTakeFromTrack[1] = 0;
|
iTakeFromTrack[1] = 0;
|
||||||
iTakeFromTrack[2] = 3;
|
iTakeFromTrack[2] = 3;
|
||||||
@@ -1046,7 +1060,7 @@ static void SuperShuffleTaps( NoteData &inout, int iStartIndex, int iEndIndex )
|
|||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if _DEBUG
|
#if DEBUG
|
||||||
ASSERT_M( !inout.IsHoldNoteAtRow(t1,r), ssprintf("There is a tap.type = %d inside of a hold at row %d", tn1.type, r) );
|
ASSERT_M( !inout.IsHoldNoteAtRow(t1,r), ssprintf("There is a tap.type = %d inside of a hold at row %d", tn1.type, r) );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user