From 422b1defb77d1e046876621b4258f783e2bd3f94 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Mon, 8 Nov 2004 22:24:18 +0000 Subject: [PATCH] TimingData::MultiplyBPMInBeatRange --- stepmania/src/TimingData.cpp | 17 +++++++++++++++++ stepmania/src/TimingData.h | 1 + 2 files changed, 18 insertions(+) diff --git a/stepmania/src/TimingData.cpp b/stepmania/src/TimingData.cpp index 6f63875eca..a5373ca5bc 100644 --- a/stepmania/src/TimingData.cpp +++ b/stepmania/src/TimingData.cpp @@ -76,6 +76,23 @@ void TimingData::SetBPMAtBeat( float fBeat, float fBPM ) } } +/* Multiply the BPM in the range [fStartBeat,fEndBeat) by fFactor. */ +void TimingData::MultiplyBPMInBeatRange( float fStartBeat, float fEndBeat, float fFactor ) +{ + /* Record the BPM at fEndBeat, so we can make sure it doesn't change. */ + float fEndBPM = GetBPMAtBeat( fEndBeat ); + + /* Set the first beat. */ + SetBPMAtBeat( fStartBeat, GetBPMAtBeat(fStartBeat) * fFactor ); + + /* Change all other BPM segments in this range. */ + for( unsigned i=0; i fStartBeat && m_BPMSegments[i].m_fStartBeat < fEndBeat ) + m_BPMSegments[i].m_fBPM *= fFactor; + + /* Don't change the BPM at the end of the range. */ + SetBPMAtBeat( fEndBeat, fEndBPM ); +} float TimingData::GetBPMAtBeat( float fBeat ) const { diff --git a/stepmania/src/TimingData.h b/stepmania/src/TimingData.h index cf689ca34c..edc0849971 100644 --- a/stepmania/src/TimingData.h +++ b/stepmania/src/TimingData.h @@ -27,6 +27,7 @@ public: void GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut ) const; float GetBPMAtBeat( float fBeat ) const; void SetBPMAtBeat( float fBeat, float fBPM ); + void MultiplyBPMInBeatRange( float fStartBeat, float fEndBeat, float fFactor ); void AddBPMSegment( const BPMSegment &seg ); void AddStopSegment( const StopSegment &seg ); BPMSegment& GetBPMSegmentAtBeat( float fBeat );