[splittiming] load split timing from ssc files

This commit is contained in:
Thai Pangsakulyanont
2011-05-10 17:44:12 +07:00
parent d0e9e58030
commit ce91d1a431
5 changed files with 41 additions and 35 deletions
+6 -1
View File
@@ -103,7 +103,7 @@ bool SMLoader::LoadTimingFromFile( const RString &fn, TimingData &out )
return true; return true;
} }
void SMLoader::ProcessBPMs( TimingData &out, const RString sParam ) bool SMLoader::ProcessBPMs( TimingData &out, const RString sParam )
{ {
vector<RString> arrayBPMChangeExpressions; vector<RString> arrayBPMChangeExpressions;
split( sParam, ",", arrayBPMChangeExpressions ); split( sParam, ",", arrayBPMChangeExpressions );
@@ -112,6 +112,7 @@ void SMLoader::ProcessBPMs( TimingData &out, const RString sParam )
float negBeat = -1; float negBeat = -1;
float negBPM = 1; float negBPM = 1;
float highspeedBeat = -1; float highspeedBeat = -1;
bool bNotEmpty = false;
for( unsigned b=0; b<arrayBPMChangeExpressions.size(); b++ ) for( unsigned b=0; b<arrayBPMChangeExpressions.size(); b++ )
{ {
@@ -125,6 +126,8 @@ void SMLoader::ProcessBPMs( TimingData &out, const RString sParam )
continue; continue;
} }
bNotEmpty = true;
const float fBeat = StringToFloat( arrayBPMChangeValues[0] ); const float fBeat = StringToFloat( arrayBPMChangeValues[0] );
const float fNewBPM = StringToFloat( arrayBPMChangeValues[1] ); const float fNewBPM = StringToFloat( arrayBPMChangeValues[1] );
@@ -169,6 +172,8 @@ void SMLoader::ProcessBPMs( TimingData &out, const RString sParam )
} }
} }
} }
return bNotEmpty;
} }
void SMLoader::ProcessStops( TimingData &out, const RString sParam ) void SMLoader::ProcessStops( TimingData &out, const RString sParam )
+1 -1
View File
@@ -27,7 +27,7 @@ namespace SMLoader
bool LoadFromBGChangesString( BackgroundChange &change, const RString &sBGChangeExpression ); bool LoadFromBGChangesString( BackgroundChange &change, const RString &sBGChangeExpression );
void ProcessBPMs( TimingData &, const RString ); bool ProcessBPMs( TimingData &, const RString );
void ProcessStops( TimingData &, const RString ); void ProcessStops( TimingData &, const RString );
void ProcessDelays( TimingData &, const RString ); void ProcessDelays( TimingData &, const RString );
void ProcessTimeSignatures( TimingData &, const RString ); void ProcessTimeSignatures( TimingData &, const RString );
+27 -30
View File
@@ -142,6 +142,8 @@ bool SSCLoader::LoadFromSSCFile( const RString &sPath, Song &out, bool bFromCach
int state = GETTING_SONG_INFO; int state = GETTING_SONG_INFO;
const unsigned values = msd.GetNumValues(); const unsigned values = msd.GetNumValues();
Steps* pNewNotes = NULL; Steps* pNewNotes = NULL;
TimingData stepsTiming;
bool bHasOwnTiming = false;
for( unsigned i = 0; i < values; i++ ) for( unsigned i = 0; i < values; i++ )
{ {
@@ -478,6 +480,8 @@ bool SSCLoader::LoadFromSSCFile( const RString &sPath, Song &out, bool bFromCach
{ {
state = GETTING_STEP_INFO; state = GETTING_STEP_INFO;
pNewNotes = out.CreateSteps(); pNewNotes = out.CreateSteps();
stepsTiming = TimingData( out.m_SongTiming.m_fBeat0OffsetInSeconds );
bHasOwnTiming = false;
} }
break; break;
} }
@@ -541,53 +545,54 @@ bool SSCLoader::LoadFromSSCFile( const RString &sPath, Song &out, bool bFromCach
else if( sValueName=="NOTES" || sValueName=="NOTES2" ) else if( sValueName=="NOTES" || sValueName=="NOTES2" )
{ {
state = GETTING_SONG_INFO; state = GETTING_SONG_INFO;
//pNewNotes->m_Timing = out.m_Timing; if( bHasOwnTiming )
pNewNotes->m_Timing = stepsTiming;
pNewNotes->SetSMNoteData( sParams[1] ); pNewNotes->SetSMNoteData( sParams[1] );
pNewNotes->TidyUpData(); pNewNotes->TidyUpData();
out.AddSteps( pNewNotes ); out.AddSteps( pNewNotes );
} }
else if( sValueName=="BPMS" ) // This must ALWAYS be here in Split Timing. else if( sValueName=="BPMS" )
{ {
state = GETTING_STEP_TIMING_INFO; if( SMLoader::ProcessBPMs(stepsTiming, sParams[1]) )
/* bHasOwnTiming = true;
pNewNotes->m_Timing = TimingData(out.m_SongTiming.m_fBeat0OffsetInSeconds); }
SMLoader::ProcessBPMs(pNewNotes->m_Timing, sParams[1]);
*/
} else if( sValueName=="STOPS" )
break;
}
case GETTING_STEP_TIMING_INFO:
{ {
if( sValueName=="STOPS" ) SMLoader::ProcessStops(stepsTiming, sParams[1]);
{
// SMLoader::ProcessStops(pNewNotes->m_Timing, sParams[1]);
} }
else if( sValueName=="DELAYS" ) else if( sValueName=="DELAYS" )
{ {
// SMLoader::ProcessDelays(pNewNotes->m_Timing, sParams[1]); SMLoader::ProcessDelays(stepsTiming, sParams[1]);
} }
else if( sValueName=="TIMESIGNATURES" ) else if( sValueName=="TIMESIGNATURES" )
{ {
// SMLoader::ProcessTimeSignatures(pNewNotes->m_Timing, sParams[1]); SMLoader::ProcessTimeSignatures(stepsTiming, sParams[1]);
} }
else if( sValueName=="TICKCOUNTS" ) else if( sValueName=="TICKCOUNTS" )
{ {
// SMLoader::ProcessTickcounts(pNewNotes->m_Timing, sParams[1]); SMLoader::ProcessTickcounts(stepsTiming, sParams[1]);
} }
else if( sValueName=="COMBOS" ) else if( sValueName=="COMBOS" )
{ {
// ProcessCombos(pNewNotes->m_Timing, sParams[1]); ProcessCombos(stepsTiming, sParams[1]);
} }
else if( sValueName=="WARPS" ) else if( sValueName=="WARPS" )
{ {
// ProcessWarps(pNewNotes->m_Timing, sParams[1]); ProcessWarps(stepsTiming, sParams[1]);
} }
else if( sValueName=="LABELS" ) else if( sValueName=="LABELS" )
{ {
// ProcessLabels(pNewNotes->m_Timing, sParams[1]); ProcessLabels(stepsTiming, sParams[1]);
} }
else if( sValueName=="ATTACKS" ) else if( sValueName=="ATTACKS" )
{ {
// TODO: Look into Step attacks vs Song Attacks. -Wolfman2000 // TODO: Look into Step attacks vs Song Attacks. -Wolfman2000
@@ -635,18 +640,10 @@ bool SSCLoader::LoadFromSSCFile( const RString &sPath, Song &out, bool bFromCach
} }
*/ */
} }
else if( sValueName=="OFFSET" )
{/*
pNewNotes->m_Timing.m_fBeat0OffsetInSeconds = StringToFloat( sParams[1] );
*/
}
else if( sValueName=="NOTES" || sValueName=="NOTES2" ) else if( sValueName=="OFFSET" )
{ {
state = GETTING_SONG_INFO; stepsTiming.m_fBeat0OffsetInSeconds = StringToFloat( sParams[1] );
pNewNotes->SetSMNoteData( sParams[1] );
pNewNotes->TidyUpData();
out.AddSteps( pNewNotes );
} }
break; break;
} }
-2
View File
@@ -16,8 +16,6 @@ enum SSCLoadingStates
{ {
GETTING_SONG_INFO, /**< Retrieving song information. */ GETTING_SONG_INFO, /**< Retrieving song information. */
GETTING_STEP_INFO, /**< Retrieving step information. */ GETTING_STEP_INFO, /**< Retrieving step information. */
GETTING_STEP_TIMING_INFO, /**< Retrieving a step's individual timing information. */
GETTING_NOTE_INFO, /**< Retrieving the specific notes. This state may be deprecated. */
NUM_SSCLoadingStates /**< The number of states used. */ NUM_SSCLoadingStates /**< The number of states used. */
}; };
+6
View File
@@ -864,6 +864,12 @@ void Song::Save()
ReCalculateRadarValuesAndLastBeat(); ReCalculateRadarValuesAndLastBeat();
TranslateTitles(); TranslateTitles();
// TODO: Figure out a better way to save to Song's timing data.
if( m_vpSteps.size() == 1 )
{
m_SongTiming = m_vpSteps[0]->m_Timing;
}
// Save the new files. These calls make backups on their own. // Save the new files. These calls make backups on their own.
if( !SaveToSSCFile(GetSongFilePath(), false) ) if( !SaveToSSCFile(GetSongFilePath(), false) )
return; return;