@@ -627,84 +627,59 @@ void FindDisplayedBeats(const PlayerState* pPlayerState, float &firstBeat, float
627
627
{
628
628
float fFirstBeatToDraw = pPlayerState->GetDisplayedPosition ().m_fSongBeatVisible ;
629
629
float fLastBeatToDraw = fFirstBeatToDraw ;
630
+ float fSpeedMultiplier = pPlayerState->GetDisplayedTiming ().GetDisplayedSpeedPercent (pPlayerState->GetDisplayedPosition ().m_fSongBeatVisible , pPlayerState->GetDisplayedPosition ().m_fMusicSecondsVisible );
630
631
631
632
bool bBoomerang;
632
633
{
633
634
const float * fAccels = pPlayerState->m_PlayerOptions .GetCurrent ().m_fAccels ;
634
635
bBoomerang = (fAccels [PlayerOptions::ACCEL_BOOMERANG] != 0 );
635
636
}
636
-
637
637
638
- // TODO: Account for M Mods...
639
- static float lastKnownBPS = 0 ;
640
- static float lastKnownRate = 0 ;
641
- static float lastKnownXSpeed = 0 ;
642
- static float lastKnownCSpeed = 0 ;
643
- static float pixelsPerBeat = 0 ;
644
-
645
- float currentBPS = pPlayerState->GetDisplayedPosition ().m_fCurBPS ;
646
- float currentRate = GAMESTATE->m_SongOptions .GetCurrent ().m_fMusicRate ;
647
- float currentXSpace = pPlayerState->m_PlayerOptions .GetCurrent ().m_fScrollSpeed ;
648
- float currentCSpace = pPlayerState->m_PlayerOptions .GetCurrent ().m_fScrollBPM ;
649
-
650
- // If anything changed which modifys the distance between arrows, update the pixels per beat.
651
- if (lastKnownBPS != currentBPS || lastKnownRate != currentRate
652
- || lastKnownCSpeed != currentCSpace || lastKnownXSpeed != currentXSpace)
638
+ // Search for the draw distance pixels
639
+ float fSearchDistance = 10 ;
640
+ const int NUM_ITERATIONS = 20 ;
641
+
642
+ for (int i = 0 ; i<NUM_ITERATIONS; i++)
653
643
{
654
644
bool bIsPastPeakYOffset;
655
645
float fPeakYOffset ;
646
+ float fYOffset = ArrowEffects::GetYOffset (pPlayerState, 0 , fLastBeatToDraw , fPeakYOffset , bIsPastPeakYOffset, true );
656
647
657
- lastKnownBPS = currentBPS;
658
- lastKnownRate = currentRate;
659
- lastKnownXSpeed = currentXSpace;
660
- lastKnownCSpeed = currentCSpace;
661
-
662
- float lastBeatElapsedTime = pPlayerState->GetDisplayedTiming ().ElapsedTimesAtAllRows .at (pPlayerState->GetDisplayedTiming ().ElapsedTimesAtAllRows .size () - 1 );
663
-
664
- TimingData::GetBeatArgs lastBeatArgs;
665
- lastBeatArgs.elapsed_time = lastBeatElapsedTime;
666
- pPlayerState->GetDisplayedTiming ().GetBeatAndBPSFromElapsedTime (lastBeatArgs);
648
+ if (bBoomerang && !bIsPastPeakYOffset)
649
+ fLastBeatToDraw += fSearchDistance ;
650
+ else if (fYOffset > iDrawDistanceBeforeTargetsPixels) // off screen
651
+ fLastBeatToDraw -= fSearchDistance ;
652
+ else // on screen
653
+ fLastBeatToDraw += fSearchDistance ;
667
654
668
- float endOffset = ArrowEffects::GetYOffset (pPlayerState, 0 , lastBeatArgs.beat , fPeakYOffset , bIsPastPeakYOffset, true );
669
-
670
- pixelsPerBeat = ((lastBeatArgs.beat / endOffset) * (lastKnownBPS / lastBeatArgs.bps_out )) * lastKnownRate;
655
+ fSearchDistance /= 2 ;
671
656
}
672
657
673
- firstBeat = fFirstBeatToDraw + iDrawDistanceAfterTargetsPixels * pixelsPerBeat;
674
-
675
- if ( !bBoomerang )
676
- {
677
- lastBeat = fLastBeatToDraw + iDrawDistanceBeforeTargetsPixels * pixelsPerBeat;
678
- }
679
- else
658
+ fSearchDistance = 10 ;
659
+ for (int i = 0 ; i<NUM_ITERATIONS; i++)
680
660
{
681
- // Probe for last note to draw. Worst case is 0.25x + boost.
682
- // Adjust search distance so that notes don't pop onto the screen.
683
- float fSearchDistance = 10 ;
684
- float fSpeedMultiplier = pPlayerState->GetDisplayedTiming ().GetDisplayedSpeedPercent (pPlayerState->GetDisplayedPosition ().m_fSongBeatVisible , pPlayerState->GetDisplayedPosition ().m_fMusicSecondsVisible );
685
- const int NUM_ITERATIONS = 20 ;
661
+ bool bIsPastPeakYOffset;
662
+ float fPeakYOffset ;
663
+ float fYOffset = ArrowEffects::GetYOffset (pPlayerState, 0 , fFirstBeatToDraw , fPeakYOffset , bIsPastPeakYOffset, true );
686
664
687
- for (int i = 0 ; i<NUM_ITERATIONS; i++)
688
- {
689
- bool bIsPastPeakYOffset;
690
- float fPeakYOffset ;
691
- float fYOffset = ArrowEffects::GetYOffset (pPlayerState, 0 , fLastBeatToDraw , fPeakYOffset , bIsPastPeakYOffset, true );
692
-
693
- if (bBoomerang && !bIsPastPeakYOffset)
694
- fLastBeatToDraw += fSearchDistance ;
695
- else if (fYOffset > iDrawDistanceBeforeTargetsPixels) // off screen
696
- fLastBeatToDraw -= fSearchDistance ;
697
- else // on screen
698
- fLastBeatToDraw += fSearchDistance ;
699
-
700
- fSearchDistance /= 2 ;
701
- }
665
+ if (bBoomerang && !bIsPastPeakYOffset)
666
+ fFirstBeatToDraw -= fSearchDistance ;
667
+ else if (fYOffset < iDrawDistanceAfterTargetsPixels) // off screen
668
+ fFirstBeatToDraw += fSearchDistance ;
669
+ else // on screen
670
+ fFirstBeatToDraw -= fSearchDistance ;
702
671
703
- if ( fSpeedMultiplier < 0 . 75f )
704
- fLastBeatToDraw = min ( fLastBeatToDraw , pPlayerState-> GetDisplayedPosition (). m_fSongBeat + 16 );
672
+ fSearchDistance /= 2 ;
673
+ }
705
674
706
- lastBeat = fLastBeatToDraw ;
675
+ if (fSpeedMultiplier < 0 .75f )
676
+ {
677
+ fFirstBeatToDraw = min (fFirstBeatToDraw , pPlayerState->GetDisplayedPosition ().m_fSongBeat + 16 );
678
+ fLastBeatToDraw = min (fLastBeatToDraw , pPlayerState->GetDisplayedPosition ().m_fSongBeat + 16 );
707
679
}
680
+
681
+ firstBeat = fFirstBeatToDraw ;
682
+ lastBeat = fLastBeatToDraw ;
708
683
}
709
684
710
685
void NoteField::CalcPixelsBeforeAndAfterTargets ()
0 commit comments