From 1524e0a38ff046507a12b2f021dd1d7aba860bb2 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 8 Jan 2005 13:57:48 +0000 Subject: [PATCH] fix TimingData::SetBPMAtBeat adding redundant BPM segments --- stepmania/src/TimingData.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/stepmania/src/TimingData.cpp b/stepmania/src/TimingData.cpp index a5373ca5bc..c71a2ef43d 100644 --- a/stepmania/src/TimingData.cpp +++ b/stepmania/src/TimingData.cpp @@ -54,17 +54,21 @@ void TimingData::AddStopSegment( const StopSegment &seg ) SortStopSegmentsArray( m_StopSegments ); } +/* Change an existing BPM segment, merge identical segments together or insert a new one. */ void TimingData::SetBPMAtBeat( float fBeat, float fBPM ) { unsigned i; for( i=0; i= fBeat ) break; - if( i == m_BPMSegments.size() ) // there is no BPMSegment at the current beat + if( i == m_BPMSegments.size() || + fabsf(m_BPMSegments[i].m_fStartBeat-fBeat) > 0.001f ) { - // create a new BPMSegment - AddBPMSegment( BPMSegment(fBeat, fBPM) ); + // There is no BPMSegment at the specified beat. If the BPM being set differs + // from the last BPMSegment's BPM, create a new BPMSegment. + if( i == 0 || fabsf(m_BPMSegments[i-1].m_fBPM - fBPM) > 0.009f ) + AddBPMSegment( BPMSegment(fBeat, fBPM) ); } else // BPMSegment being modified is m_BPMSegments[i] {