From 26e311a49e90ae0a03d8736fe85e480947638dc8 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Thu, 14 Jul 2011 13:00:03 -0400 Subject: [PATCH] [timing] More conversion. --- src/Background.cpp | 34 ++++++++++++++++++++-------------- src/NotesWriterSM.cpp | 37 ++++++++++++++++++++----------------- src/ScreenEdit.cpp | 15 ++++++++------- 3 files changed, 48 insertions(+), 38 deletions(-) diff --git a/src/Background.cpp b/src/Background.cpp index d5b14b308b..c987102faa 100644 --- a/src/Background.cpp +++ b/src/Background.cpp @@ -421,35 +421,41 @@ void BackgroundImpl::LoadFromRandom( float fFirstBeat, float fEndBeat, const Bac const TimingData &timing = m_pSong->m_SongTiming; // change BG every time signature change or 4 measures - FOREACH_CONST( TimeSignatureSegment, timing.m_vTimeSignatureSegments, iter ) + const vector &tSigs = timing.allTimingSegments[SEGMENT_TIME_SIG]; + + for (unsigned i = 0; i < tSigs.size(); i++) { - vector::const_iterator next = iter; - next++; - int iSegmentEndRow = (next == timing.m_vTimeSignatureSegments.end()) ? iEndRow : next->GetRow(); + TimeSignatureSegment *ts = static_cast(tSigs[i]); + int iSegmentEndRow = (i + 1 == tSigs.size()) ? iEndRow : tSigs[i+1]->GetRow(); - for( int i=max(iter->GetRow(),iStartRow); iGetNoteRowsPerMeasure() ) + + for(int j=max(ts->GetRow(),iStartRow); + jGetNoteRowsPerMeasure()) { // Don't fade. It causes frame rate dip, especially on slower machines. - BackgroundDef bd = m_Layer[0].CreateRandomBGA( m_pSong, change.m_def.m_sEffect, m_RandomBGAnimations, this ); + BackgroundDef bd = m_Layer[0].CreateRandomBGA(m_pSong, + change.m_def.m_sEffect, + m_RandomBGAnimations, this); if( !bd.IsEmpty() ) { BackgroundChange c = change; c.m_def = bd; - c.m_fStartBeat = NoteRowToBeat(i); + c.m_fStartBeat = NoteRowToBeat(j); m_Layer[0].m_aBGChanges.push_back( c ); } } } // change BG every BPM change that is at the beginning of a measure - for( unsigned i=0; i &bpms = timing.allTimingSegments[SEGMENT_BPM]; + for( unsigned i=0; iGetRow()) % iter->GetNoteRowsPerMeasure() == 0 ) + TimeSignatureSegment *ts = static_cast(tSigs[j]); + if ((bpms[i]->GetRow() - ts->GetRow()) % ts->GetNoteRowsPerMeasure() == 0) { bAtBeginningOfMeasure = true; break; @@ -460,7 +466,7 @@ void BackgroundImpl::LoadFromRandom( float fFirstBeat, float fEndBeat, const Bac continue; // skip // start so that we don't create a BGChange right on top of fEndBeat - bool bInRange = bpmseg.GetRow() >= iStartRow && bpmseg.GetRow() < iEndRow; + bool bInRange = bpms[i]->GetRow() >= iStartRow && bpms[i]->GetRow() < iEndRow; if( !bInRange ) continue; // skip @@ -470,7 +476,7 @@ void BackgroundImpl::LoadFromRandom( float fFirstBeat, float fEndBeat, const Bac BackgroundChange c = change; c.m_def.m_sFile1 = bd.m_sFile1; c.m_def.m_sFile2 = bd.m_sFile2; - c.m_fStartBeat = bpmseg.GetBeat(); + c.m_fStartBeat = bpms[i]->GetBeat(); m_Layer[0].m_aBGChanges.push_back( c ); } } diff --git a/src/NotesWriterSM.cpp b/src/NotesWriterSM.cpp index cbcea62ef0..43b0279f90 100644 --- a/src/NotesWriterSM.cpp +++ b/src/NotesWriterSM.cpp @@ -50,6 +50,7 @@ static RString BackgroundChangeToString( const BackgroundChange &bgc ) * @param out the Song in question. */ static void WriteGlobalTags( RageFile &f, Song &out ) { + TimingData &timing = out.m_SongTiming; f.PutLine( ssprintf( "#TITLE:%s;", SmEscape(out.m_sMainTitle).c_str() ) ); f.PutLine( ssprintf( "#SUBTITLE:%s;", SmEscape(out.m_sSubTitle).c_str() ) ); f.PutLine( ssprintf( "#ARTIST:%s;", SmEscape(out.m_sArtist).c_str() ) ); @@ -99,44 +100,46 @@ static void WriteGlobalTags( RageFile &f, Song &out ) f.Write( "#BPMS:" ); - for( unsigned i=0; i &bpms = timing.allTimingSegments[SEGMENT_BPM]; + for( unsigned i=0; i(bpms[i]); - f.PutLine( ssprintf( "%.3f=%.3f", bs.GetBeat(), bs.GetBPM() ) ); - if( i != out.m_SongTiming.m_BPMSegments.size()-1 ) + f.PutLine( ssprintf( "%.3f=%.3f", bs->GetBeat(), bs->GetBPM() ) ); + if( i != bpms.size()-1 ) f.Write( "," ); } f.PutLine( ";" ); - unsigned wSize = out.m_SongTiming.m_WarpSegments.size(); + vector &warps = timing.allTimingSegments[SEGMENT_WARP]; + unsigned wSize = warps.size(); if( wSize > 0 ) { for( unsigned i=0; i < wSize; i++ ) { - int iRow = out.m_SongTiming.m_WarpSegments[i].GetRow(); + const WarpSegment *ws = static_cast(warps[i]); + int iRow = ws->GetRow(); float fBPS = 60 / out.m_SongTiming.GetBPMAtRow(iRow); - float fSkip = fBPS * out.m_SongTiming.m_WarpSegments[i].GetLength(); + float fSkip = fBPS * ws->GetLength(); StopSegment ss(iRow, -fSkip, false); out.m_SongTiming.AddStopSegment( ss ); } } f.Write( "#STOPS:" ); - for( unsigned i=0; i &stops = timing.allTimingSegments[SEGMENT_STOP_DELAY]; + for( unsigned i=0; i(stops[i]); + float fBeat = fs->GetBeat(); + if (fs->GetDelay()) fBeat--; - f.PutLine( ssprintf( "%.3f=%.3f", fBeat, fs.GetPause() ) ); - if( i != out.m_SongTiming.m_StopSegments.size()-1 ) + f.PutLine( ssprintf( "%.3f=%.3f", fBeat, fs->GetPause() ) ); + if( i != stops.size()-1 ) f.Write( "," ); - if( fs.GetPause() < 0 ) + if( fs->GetPause() < 0 ) { - out.m_SongTiming.m_StopSegments.erase( - out.m_SongTiming.m_StopSegments.begin()+i, - out.m_SongTiming.m_StopSegments.begin()+i+1 ); + stops.erase(stops.begin()+i,stops.begin()+i+1 ); i--; } } diff --git a/src/ScreenEdit.cpp b/src/ScreenEdit.cpp index f0dacde5c0..d4d84b4a69 100644 --- a/src/ScreenEdit.cpp +++ b/src/ScreenEdit.cpp @@ -1972,13 +1972,14 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) fDelta *= 40; } unsigned i; - for( i=0; i &stops = GetAppropriateTiming().allTimingSegments[SEGMENT_STOP_DELAY]; + for( i=0; iGetRow() == GetRow() ) break; } - if( i == GetAppropriateTiming().m_StopSegments.size() ) // there is no StopSegment at the current beat + if( i == stops.size() ) // there is no StopSegment at the current beat { // create a new StopSegment if( fDelta > 0 ) @@ -1986,10 +1987,10 @@ void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) } else // StopSegment being modified is m_SongTiming.m_StopSegments[i] { - vector &s = GetAppropriateTiming().m_StopSegments; - s[i].SetPause(s[i].GetPause() + fDelta); - if( s[i].GetPause() <= 0 ) - s.erase( s.begin()+i, s.begin()+i+1); + StopSegment *s = static_cast(stops[i]); + s->SetPause(s->GetPause() + fDelta); + if( s->GetPause() <= 0 ) + stops.erase( stops.begin()+i, stops.begin()+i+1); } (fDelta>0 ? m_soundValueIncrease : m_soundValueDecrease).Play(); SetDirty( true );