@@ -428,10 +428,22 @@ bool AddGem(MidiNote e)
428
428
return false ;
429
429
}
430
430
431
- if ( diff == 3 && rolls . Count > 0 && rolls [ rolls . Count - 1 ] . EndTick > e . StartTicks && lane != 0 /* MT: don't emit kick lanes */ )
431
+ if ( diff == 3 && rolls . Count > 0 && rolls [ rolls . Count - 1 ] . EndTick > e . StartTicks && lane != 0 /* don't emit kick lanes */ )
432
432
{
433
433
var tmp = rolls [ rolls . Count - 1 ] ;
434
- tmp . Lanes |= 1 << lane ;
434
+ // see if any more colors need to be added to this lane
435
+ int CurrentLaneCount = 0 ;
436
+ int n = tmp . Lanes ;
437
+ // count set bits in tmp.Lanes (by MAK, https://stackoverflow.com/a/2709482)
438
+ while ( n != 0 )
439
+ {
440
+ n &= ( n - 1 ) ;
441
+ CurrentLaneCount ++ ;
442
+ }
443
+ if ( CurrentLaneCount < tmp . MidiLaneCount )
444
+ {
445
+ tmp . Lanes |= 1 << lane ;
446
+ }
435
447
rolls [ rolls . Count - 1 ] = tmp ;
436
448
}
437
449
if ( gem_tracks [ diff ] == null ) gem_tracks [ diff ] = new List < RBMid . GEMTRACK . GEM > ( ) ;
@@ -523,7 +535,8 @@ bool AddGem(MidiNote e)
523
535
{
524
536
StartTick = e . StartTicks ,
525
537
EndTick = e . StartTicks + e . LengthTicks ,
526
- Lanes = 0
538
+ Lanes = 0 ,
539
+ MidiLaneCount = ( e . Key == Roll1 ? 1 : 2 )
527
540
} ) ;
528
541
}
529
542
else if ( e . Key == 105 || e . Key == 106 || e . Key == 12 || e . Key == 13 || e . Key == 14 || e . Key == 15 )
@@ -579,7 +592,7 @@ bool AddGem(MidiNote e)
579
592
{
580
593
new RBMid . LANEMARKER . MARKER [ 0 ] ,
581
594
new RBMid . LANEMARKER . MARKER [ 0 ] ,
582
- new RBMid . LANEMARKER . MARKER [ 0 ] ,
595
+ new RBMid . LANEMARKER . MARKER [ 0 ] , // TODO rb3 midi lanes can be applied to hard if velocity is low enough
583
596
rolls . ToArray ( )
584
597
}
585
598
} ) ;
0 commit comments