Autosync Song + Split Timing = Happy Players! :D
The solution: use actual objects, not references. Big thanks to Edgars Klepers for the hint.
This commit is contained in:
+13
-27
@@ -43,8 +43,7 @@
|
|||||||
#include "ScreenManager.h"
|
#include "ScreenManager.h"
|
||||||
#include "Foreach.h"
|
#include "Foreach.h"
|
||||||
|
|
||||||
TimingData *AdjustSync::s_pTimingDataOriginal = NULL;
|
vector<TimingData> AdjustSync::s_vpTimingDataOriginal;
|
||||||
vector<TimingData *> AdjustSync::s_vpTimingDataOriginal;
|
|
||||||
float AdjustSync::s_fGlobalOffsetSecondsOriginal = 0.0f;
|
float AdjustSync::s_fGlobalOffsetSecondsOriginal = 0.0f;
|
||||||
int AdjustSync::s_iAutosyncOffsetSample = 0;
|
int AdjustSync::s_iAutosyncOffsetSample = 0;
|
||||||
float AdjustSync::s_fAutosyncOffset[AdjustSync::OFFSET_SAMPLE_COUNT];
|
float AdjustSync::s_fAutosyncOffset[AdjustSync::OFFSET_SAMPLE_COUNT];
|
||||||
@@ -56,34 +55,21 @@ int AdjustSync::s_iStepsFiltered = 0;
|
|||||||
|
|
||||||
void AdjustSync::ResetOriginalSyncData()
|
void AdjustSync::ResetOriginalSyncData()
|
||||||
{
|
{
|
||||||
// TODO: Reset the vector if not in a song?
|
s_vpTimingDataOriginal.clear();
|
||||||
if( s_vpTimingDataOriginal.empty() )
|
|
||||||
{
|
|
||||||
s_pTimingDataOriginal = new TimingData;
|
|
||||||
s_vpTimingDataOriginal.clear(); // sanity check for now.
|
|
||||||
s_vpTimingDataOriginal.push_back(new TimingData());
|
|
||||||
}
|
|
||||||
|
|
||||||
if( GAMESTATE->m_pCurSong )
|
if( GAMESTATE->m_pCurSong )
|
||||||
{
|
{
|
||||||
*s_pTimingDataOriginal = GAMESTATE->m_pCurSong->m_SongTiming;
|
|
||||||
// Deal with the vector code here.
|
s_vpTimingDataOriginal.push_back(GAMESTATE->m_pCurSong->m_SongTiming);
|
||||||
s_vpTimingDataOriginal.clear();
|
|
||||||
s_vpTimingDataOriginal.push_back(&GAMESTATE->m_pCurSong->m_SongTiming);
|
|
||||||
// Loop through the steps.
|
|
||||||
const vector<Steps *>& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps();
|
const vector<Steps *>& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps();
|
||||||
FOREACH( Steps*, const_cast<vector<Steps *>&>(vpSteps), s )
|
FOREACH( Steps*, const_cast<vector<Steps *>&>(vpSteps), s )
|
||||||
{
|
{
|
||||||
/* Capture each Step's timing data in the vector.
|
s_vpTimingDataOriginal.push_back((*s)->m_Timing);
|
||||||
* TODO: Make this less ugly. */
|
|
||||||
s_vpTimingDataOriginal.push_back(&(*s)->m_Timing);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s_vpTimingDataOriginal.clear();
|
s_vpTimingDataOriginal.push_back(TimingData());
|
||||||
s_vpTimingDataOriginal.push_back(new TimingData());
|
|
||||||
*s_pTimingDataOriginal = TimingData();
|
|
||||||
}
|
}
|
||||||
s_fGlobalOffsetSecondsOriginal = PREFSMAN->m_fGlobalOffsetSeconds;
|
s_fGlobalOffsetSecondsOriginal = PREFSMAN->m_fGlobalOffsetSeconds;
|
||||||
|
|
||||||
@@ -114,7 +100,7 @@ void AdjustSync::SaveSyncChanges()
|
|||||||
|
|
||||||
/* TODO: Save all of the timing data changes.
|
/* TODO: Save all of the timing data changes.
|
||||||
* Luckily, only the song timing data needs comparing here. */
|
* Luckily, only the song timing data needs comparing here. */
|
||||||
if( GAMESTATE->m_pCurSong && *s_vpTimingDataOriginal[0] != GAMESTATE->m_pCurSong->m_SongTiming )
|
if( GAMESTATE->m_pCurSong && s_vpTimingDataOriginal[0] != GAMESTATE->m_pCurSong->m_SongTiming )
|
||||||
{
|
{
|
||||||
if( GAMESTATE->IsEditing() )
|
if( GAMESTATE->IsEditing() )
|
||||||
{
|
{
|
||||||
@@ -139,13 +125,13 @@ void AdjustSync::RevertSyncChanges()
|
|||||||
PREFSMAN->m_fGlobalOffsetSeconds.Set( s_fGlobalOffsetSecondsOriginal );
|
PREFSMAN->m_fGlobalOffsetSeconds.Set( s_fGlobalOffsetSecondsOriginal );
|
||||||
|
|
||||||
// The first one is ALWAYS the song timing.
|
// The first one is ALWAYS the song timing.
|
||||||
GAMESTATE->m_pCurSong->m_SongTiming = *s_vpTimingDataOriginal[0];
|
GAMESTATE->m_pCurSong->m_SongTiming = s_vpTimingDataOriginal[0];
|
||||||
|
|
||||||
unsigned location = 1;
|
unsigned location = 1;
|
||||||
const vector<Steps *>& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps();
|
const vector<Steps *>& vpSteps = GAMESTATE->m_pCurSong->GetAllSteps();
|
||||||
FOREACH( Steps*, const_cast<vector<Steps *>&>(vpSteps), s )
|
FOREACH( Steps*, const_cast<vector<Steps *>&>(vpSteps), s )
|
||||||
{
|
{
|
||||||
(*s)->m_Timing = *s_vpTimingDataOriginal[location];
|
(*s)->m_Timing = s_vpTimingDataOriginal[location];
|
||||||
location++;
|
location++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -339,11 +325,11 @@ void AdjustSync::GetSyncChangeTextSong( vector<RString> &vsAddTo )
|
|||||||
if( GAMESTATE->m_pCurSong.Get() )
|
if( GAMESTATE->m_pCurSong.Get() )
|
||||||
{
|
{
|
||||||
unsigned int iOriginalSize = vsAddTo.size();
|
unsigned int iOriginalSize = vsAddTo.size();
|
||||||
TimingData *original = s_vpTimingDataOriginal[0];
|
TimingData original = s_vpTimingDataOriginal[0];
|
||||||
TimingData &testing = GAMESTATE->m_pCurSong->m_SongTiming;
|
TimingData &testing = GAMESTATE->m_pCurSong->m_SongTiming;
|
||||||
|
|
||||||
{
|
{
|
||||||
float fOld = Quantize( (*original).m_fBeat0OffsetInSeconds, 0.001f );
|
float fOld = Quantize( original.m_fBeat0OffsetInSeconds, 0.001f );
|
||||||
float fNew = Quantize( testing.m_fBeat0OffsetInSeconds, 0.001f );
|
float fNew = Quantize( testing.m_fBeat0OffsetInSeconds, 0.001f );
|
||||||
float fDelta = fNew - fOld;
|
float fDelta = fNew - fOld;
|
||||||
|
|
||||||
@@ -359,7 +345,7 @@ void AdjustSync::GetSyncChangeTextSong( vector<RString> &vsAddTo )
|
|||||||
|
|
||||||
for( unsigned i=0; i< testing.m_BPMSegments.size(); i++ )
|
for( unsigned i=0; i< testing.m_BPMSegments.size(); i++ )
|
||||||
{
|
{
|
||||||
float fOld = Quantize( (*original).m_BPMSegments[i].GetBPM(), 0.001f );
|
float fOld = Quantize( original.m_BPMSegments[i].GetBPM(), 0.001f );
|
||||||
float fNew = Quantize( testing.m_BPMSegments[i].GetBPM(), 0.001f );
|
float fNew = Quantize( testing.m_BPMSegments[i].GetBPM(), 0.001f );
|
||||||
float fDelta = fNew - fOld;
|
float fDelta = fNew - fOld;
|
||||||
|
|
||||||
@@ -380,7 +366,7 @@ void AdjustSync::GetSyncChangeTextSong( vector<RString> &vsAddTo )
|
|||||||
|
|
||||||
for( unsigned i=0; i< testing.m_StopSegments.size(); i++ )
|
for( unsigned i=0; i< testing.m_StopSegments.size(); i++ )
|
||||||
{
|
{
|
||||||
float fOld = Quantize( (*original).m_StopSegments[i].m_fStopSeconds, 0.001f );
|
float fOld = Quantize( original.m_StopSegments[i].m_fStopSeconds, 0.001f );
|
||||||
float fNew = Quantize( testing.m_StopSegments[i].m_fStopSeconds, 0.001f );
|
float fNew = Quantize( testing.m_StopSegments[i].m_fStopSeconds, 0.001f );
|
||||||
float fDelta = fNew - fOld;
|
float fDelta = fNew - fOld;
|
||||||
|
|
||||||
|
|||||||
+1
-4
@@ -13,14 +13,11 @@ class TimingData;
|
|||||||
class AdjustSync
|
class AdjustSync
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/** @brief The original TimingData before adjustments are made. */
|
|
||||||
static TimingData *s_pTimingDataOriginal;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The original TimingData before adjustments were made.
|
* @brief The original TimingData before adjustments were made.
|
||||||
*
|
*
|
||||||
* This is designed to work with Split Timing. */
|
* This is designed to work with Split Timing. */
|
||||||
static vector<TimingData *> s_vpTimingDataOriginal;
|
static vector<TimingData> s_vpTimingDataOriginal;
|
||||||
|
|
||||||
static float s_fGlobalOffsetSecondsOriginal;
|
static float s_fGlobalOffsetSecondsOriginal;
|
||||||
/* We only want to call the Reset methods before a song, not immediately after
|
/* We only want to call the Reset methods before a song, not immediately after
|
||||||
|
|||||||
Reference in New Issue
Block a user