diff --git a/src/AdjustSync.cpp b/src/AdjustSync.cpp index b7ef64bab6..b375928a25 100644 --- a/src/AdjustSync.cpp +++ b/src/AdjustSync.cpp @@ -35,7 +35,6 @@ #include "global.h" #include "Song.h" -#include "Steps.h" #include "AdjustSync.h" #include "GameState.h" #include "LocalizedString.h" @@ -43,7 +42,7 @@ #include "ScreenManager.h" #include "Foreach.h" -vector AdjustSync::s_vTimingDataOriginal; +TimingData *AdjustSync::s_pTimingDataOriginal = NULL; float AdjustSync::s_fGlobalOffsetSecondsOriginal = 0.0f; int AdjustSync::s_iAutosyncOffsetSample = 0; float AdjustSync::s_fAutosyncOffset[AdjustSync::OFFSET_SAMPLE_COUNT]; @@ -55,31 +54,13 @@ int AdjustSync::s_iStepsFiltered = 0; void AdjustSync::ResetOriginalSyncData() { - if( s_vTimingDataOriginal.empty() ) - { - s_vTimingDataOriginal.push_back(new TimingData); - s_vTimingDataOriginal.resize(1); - } - else if( s_vTimingDataOriginal[0] == NULL ) - { - s_vTimingDataOriginal[0] = new TimingData; - s_vTimingDataOriginal.resize(1); - } + if( s_pTimingDataOriginal == NULL ) + s_pTimingDataOriginal = new TimingData; - const vector& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps(); if( GAMESTATE->m_pCurSong ) - { - s_vTimingDataOriginal.push_back(&GAMESTATE->m_pCurSong->m_SongTiming); - FOREACH( Steps*, const_cast&>(vpSteps), s ) - { - s_vTimingDataOriginal.push_back(&(*s)->m_Timing); - } - } + *s_pTimingDataOriginal = GAMESTATE->m_pCurSong->m_SongTiming; else - { - s_vTimingDataOriginal.push_back(new TimingData); - // No Steps here to even grab. - } + *s_pTimingDataOriginal = TimingData(); s_fGlobalOffsetSecondsOriginal = PREFSMAN->m_fGlobalOffsetSeconds; ResetAutosync(); @@ -89,7 +70,6 @@ void AdjustSync::ResetAutosync() { s_iAutosyncOffsetSample = 0; s_vAutosyncTempoData.clear(); - // TODO: Add a call to s_vTimingDataOriginal? } bool AdjustSync::IsSyncDataChanged() @@ -107,7 +87,7 @@ void AdjustSync::SaveSyncChanges() { if( GAMESTATE->IsCourseMode() ) return; - if( GAMESTATE->m_pCurSong && *s_vTimingDataOriginal[0] != GAMESTATE->m_pCurSong->m_SongTiming ) + if( GAMESTATE->m_pCurSong && *s_pTimingDataOriginal != GAMESTATE->m_pCurSong->m_SongTiming ) { if( GAMESTATE->IsEditing() ) { @@ -130,15 +110,7 @@ void AdjustSync::RevertSyncChanges() if( GAMESTATE->IsCourseMode() ) return; PREFSMAN->m_fGlobalOffsetSeconds.Set( s_fGlobalOffsetSecondsOriginal ); - GAMESTATE->m_pCurSong->m_SongTiming = *s_vTimingDataOriginal[0]; - const vector& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps(); - - unsigned index = 1; - FOREACH( Steps*, const_cast&>(vpSteps), s ) - { - (*s)->m_Timing = *s_vTimingDataOriginal[index]; - index++; - } + GAMESTATE->m_pCurSong->m_SongTiming = *s_pTimingDataOriginal; ResetOriginalSyncData(); s_fStandardDeviation = 0.0f; s_fAverageError = 0.0f; @@ -214,15 +186,8 @@ void AdjustSync::AutosyncOffset() switch( GAMESTATE->m_SongOptions.GetCurrent().m_AutosyncType ) { case SongOptions::AUTOSYNC_SONG: - { GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds += mean; - const vector& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps(); - FOREACH( Steps*, const_cast&>(vpSteps), s ) - { - (*s)->m_Timing.m_fBeat0OffsetInSeconds += mean; - } break; - } case SongOptions::AUTOSYNC_MACHINE: PREFSMAN->m_fGlobalOffsetSeconds.Set( PREFSMAN->m_fGlobalOffsetSeconds + mean ); break; @@ -250,8 +215,6 @@ void AdjustSync::AutosyncTempo() s_vAutosyncTempoData.clear(); return; } - - // TODO: Make this work with Steps timing. if( s_fAverageError < ERROR_TOO_HIGH ) { @@ -279,23 +242,6 @@ void AdjustSync::AutosyncTempo() // change to the stops. FOREACH( StopSegment, GAMESTATE->m_pCurSong->m_SongTiming.m_StopSegments, i ) i->m_fStopSeconds *= 1.0f - fSlope; - - // Now the fun part: doing the same as above, but for each step. - const vector& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps(); - FOREACH( Steps*, const_cast&>(vpSteps), s ) - { - TimingData &timing = (*s)->m_Timing; - timing.m_fBeat0OffsetInSeconds += fIntercept; - - FOREACH( BPMSegment, timing.m_BPMSegments, i ) - { - i->SetBPM( i->GetBPM() * fScaleBPM ); - } - FOREACH( StopSegment, timing.m_StopSegments, i ) - { - i->m_fStopSeconds *= 1.0f - fSlope; - } - } SCREENMAN->SystemMessage( AUTOSYNC_CORRECTION_APPLIED.GetValue() ); } @@ -349,7 +295,7 @@ void AdjustSync::GetSyncChangeTextSong( vector &vsAddTo ) unsigned int iOriginalSize = vsAddTo.size(); { - float fOld = Quantize( AdjustSync::s_vTimingDataOriginal[0]->m_fBeat0OffsetInSeconds, 0.001f ); + float fOld = Quantize( AdjustSync::s_pTimingDataOriginal->m_fBeat0OffsetInSeconds, 0.001f ); float fNew = Quantize( GAMESTATE->m_pCurSong->m_SongTiming.m_fBeat0OffsetInSeconds, 0.001f ); float fDelta = fNew - fOld; @@ -365,7 +311,7 @@ void AdjustSync::GetSyncChangeTextSong( vector &vsAddTo ) for( unsigned i=0; im_pCurSong->m_SongTiming.m_BPMSegments.size(); i++ ) { - float fOld = Quantize( AdjustSync::s_vTimingDataOriginal[0]->m_BPMSegments[i].GetBPM(), 0.001f ); + float fOld = Quantize( AdjustSync::s_pTimingDataOriginal->m_BPMSegments[i].GetBPM(), 0.001f ); float fNew = Quantize( GAMESTATE->m_pCurSong->m_SongTiming.m_BPMSegments[i].GetBPM(), 0.001f ); float fDelta = fNew - fOld; @@ -386,7 +332,7 @@ void AdjustSync::GetSyncChangeTextSong( vector &vsAddTo ) for( unsigned i=0; im_pCurSong->m_SongTiming.m_StopSegments.size(); i++ ) { - float fOld = Quantize( AdjustSync::s_vTimingDataOriginal[0]->m_StopSegments[i].m_fStopSeconds, 0.001f ); + float fOld = Quantize( AdjustSync::s_pTimingDataOriginal->m_StopSegments[i].m_fStopSeconds, 0.001f ); float fNew = Quantize( GAMESTATE->m_pCurSong->m_SongTiming.m_StopSegments[i].m_fStopSeconds, 0.001f ); float fDelta = fNew - fOld; diff --git a/src/AdjustSync.h b/src/AdjustSync.h index 7ec03dd13f..10a0810bd3 100644 --- a/src/AdjustSync.h +++ b/src/AdjustSync.h @@ -13,8 +13,7 @@ class TimingData; class AdjustSync { public: - /** @brief The original timing data for the Song and Steps. */ - static vector s_vTimingDataOriginal; + static TimingData *s_pTimingDataOriginal; static float s_fGlobalOffsetSecondsOriginal; /* We only want to call the Reset methods before a song, not immediately after * a song. If we reset it at the end of a song, we have to carefully check