Only write step timing/attack tags when needed.
This commit is contained in:
@@ -630,51 +630,61 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach
|
||||
else if( sValueName=="STOPS" )
|
||||
{
|
||||
SMLoader::ProcessStops(stepsTiming, sParams[1]);
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="DELAYS" )
|
||||
{
|
||||
SMLoader::ProcessDelays(stepsTiming, sParams[1]);
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="TIMESIGNATURES" )
|
||||
{
|
||||
SMLoader::ProcessTimeSignatures(stepsTiming, sParams[1]);
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="TICKCOUNTS" )
|
||||
{
|
||||
SMLoader::ProcessTickcounts(stepsTiming, sParams[1]);
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="COMBOS" )
|
||||
{
|
||||
ProcessCombos(stepsTiming, sParams[1]);
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="WARPS" )
|
||||
{
|
||||
ProcessWarps(stepsTiming, sParams[1], out.m_fVersion);
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="SPEEDS" )
|
||||
{
|
||||
ProcessSpeeds( stepsTiming, sParams[1] );
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="SCROLLS" )
|
||||
{
|
||||
ProcessScrolls( stepsTiming, sParams[1] );
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="FAKES" )
|
||||
{
|
||||
ProcessFakes( stepsTiming, sParams[1] );
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="LABELS" )
|
||||
{
|
||||
ProcessLabels(stepsTiming, sParams[1]);
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
/* If this is called, the chart does not use the same attacks
|
||||
* as the Song's timing. No other changes are required. */
|
||||
@@ -687,6 +697,7 @@ bool SSCLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCach
|
||||
else if( sValueName=="OFFSET" )
|
||||
{
|
||||
stepsTiming.m_fBeat0OffsetInSeconds = StringToFloat( sParams[1] );
|
||||
bHasOwnTiming = true;
|
||||
}
|
||||
|
||||
else if( sValueName=="DISPLAYBPM" )
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@
|
||||
* @brief The internal version of the cache for StepMania.
|
||||
*
|
||||
* Increment this value to invalidate the current cache. */
|
||||
const int FILE_CACHE_VERSION = 200;
|
||||
const int FILE_CACHE_VERSION = 201;
|
||||
|
||||
/** @brief How long does a song sample last by default? */
|
||||
const float DEFAULT_MUSIC_SAMPLE_LENGTH = 12.f;
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ void FixupPath( RString &path, const RString &sSongPath );
|
||||
RString GetSongAssetPath( RString sPath, const RString &sSongPath );
|
||||
|
||||
/** @brief The version of the .ssc file format. */
|
||||
const static float STEPFILE_VERSION_NUMBER = 0.77f;
|
||||
const static float STEPFILE_VERSION_NUMBER = 0.78f;
|
||||
|
||||
/** @brief How many edits for this song can each profile have? */
|
||||
const int MAX_EDITS_PER_SONG_PER_PROFILE = 15;
|
||||
|
||||
+73
-18
@@ -738,6 +738,9 @@ public:
|
||||
bool HasScrollChanges() const;
|
||||
/**
|
||||
* @brief Compare two sets of timing data to see if they are equal.
|
||||
*
|
||||
* TODO: Make doubly sure that we're using the operator== on the proper segments,
|
||||
* not the generic TimingSegment.
|
||||
* @param other the other TimingData.
|
||||
* @return the equality or lack thereof of the two TimingData.
|
||||
*/
|
||||
@@ -745,80 +748,132 @@ public:
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
#define COMPARE_SEGMENT(kind, tst, i) \
|
||||
if (static_cast<kind *>(this->allTimingSegments[tst][i]) != \
|
||||
static_cast<kind *>(other.allTimingSegments[tst][i])) \
|
||||
return false
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_BPM].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_BPM].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(BPMSegment, SEGMENT_BPM, i);
|
||||
BPMSegment * segT =
|
||||
static_cast<BPMSegment *>(this->allTimingSegments[SEGMENT_BPM][i]);
|
||||
BPMSegment * segO =
|
||||
static_cast<BPMSegment *>(other.allTimingSegments[SEGMENT_BPM][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetBPS() != segO->GetBPS()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_STOP].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_STOP].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(StopSegment, SEGMENT_STOP, i);
|
||||
StopSegment * segT =
|
||||
static_cast<StopSegment *>(this->allTimingSegments[SEGMENT_STOP][i]);
|
||||
StopSegment * segO =
|
||||
static_cast<StopSegment *>(other.allTimingSegments[SEGMENT_STOP][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetPause() != segO->GetPause()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_DELAY].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_DELAY].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(DelaySegment, SEGMENT_DELAY, i);
|
||||
DelaySegment * segT =
|
||||
static_cast<DelaySegment *>(this->allTimingSegments[SEGMENT_DELAY][i]);
|
||||
DelaySegment * segO =
|
||||
static_cast<DelaySegment *>(other.allTimingSegments[SEGMENT_DELAY][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetPause() != segO->GetPause()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_WARP].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_WARP].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(WarpSegment, SEGMENT_WARP, i);
|
||||
WarpSegment * segT =
|
||||
static_cast<WarpSegment *>(this->allTimingSegments[SEGMENT_WARP][i]);
|
||||
WarpSegment * segO =
|
||||
static_cast<WarpSegment *>(other.allTimingSegments[SEGMENT_WARP][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetLength() != segO->GetLength()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_TIME_SIG].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_TIME_SIG].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(TimeSignatureSegment, SEGMENT_TIME_SIG, i);
|
||||
TimeSignatureSegment * segT =
|
||||
static_cast<TimeSignatureSegment *>(this->allTimingSegments[SEGMENT_TIME_SIG][i]);
|
||||
TimeSignatureSegment * segO =
|
||||
static_cast<TimeSignatureSegment *>(other.allTimingSegments[SEGMENT_TIME_SIG][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetNum() != segO->GetNum()) return false;
|
||||
if (segT->GetDen() != segO->GetDen()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_TICKCOUNT].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_TICKCOUNT].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(TickcountSegment, SEGMENT_TICKCOUNT, i);
|
||||
TickcountSegment * segT =
|
||||
static_cast<TickcountSegment *>(this->allTimingSegments[SEGMENT_TICKCOUNT][i]);
|
||||
TickcountSegment * segO =
|
||||
static_cast<TickcountSegment *>(other.allTimingSegments[SEGMENT_TICKCOUNT][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetTicks() != segO->GetTicks()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_COMBO].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_COMBO].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(ComboSegment, SEGMENT_COMBO, i);
|
||||
ComboSegment * segT =
|
||||
static_cast<ComboSegment *>(this->allTimingSegments[SEGMENT_COMBO][i]);
|
||||
ComboSegment * segO =
|
||||
static_cast<ComboSegment *>(other.allTimingSegments[SEGMENT_COMBO][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetCombo() != segO->GetCombo()) return false;
|
||||
if (segT->GetMissCombo() != segO->GetMissCombo()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_SPEED].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_SPEED].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(SpeedSegment, SEGMENT_SPEED, i);
|
||||
SpeedSegment * segT =
|
||||
static_cast<SpeedSegment *>(this->allTimingSegments[SEGMENT_SPEED][i]);
|
||||
SpeedSegment * segO =
|
||||
static_cast<SpeedSegment *>(other.allTimingSegments[SEGMENT_SPEED][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetRatio() != segO->GetRatio()) return false;
|
||||
if (segT->GetLength() != segO->GetLength()) return false;
|
||||
if (segT->GetUnit() != segO->GetUnit()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_SCROLL].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_SCROLL].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(ScrollSegment, SEGMENT_SCROLL, i);
|
||||
ScrollSegment * segT =
|
||||
static_cast<ScrollSegment *>(this->allTimingSegments[SEGMENT_SCROLL][i]);
|
||||
ScrollSegment * segO =
|
||||
static_cast<ScrollSegment *>(other.allTimingSegments[SEGMENT_SCROLL][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetRatio() != segO->GetRatio()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_LABEL].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_LABEL].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(LabelSegment, SEGMENT_LABEL, i);
|
||||
LabelSegment * segT =
|
||||
static_cast<LabelSegment *>(this->allTimingSegments[SEGMENT_LABEL][i]);
|
||||
LabelSegment * segO =
|
||||
static_cast<LabelSegment *>(other.allTimingSegments[SEGMENT_LABEL][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetLabel() != segO->GetLabel()) return false;
|
||||
}
|
||||
|
||||
COMPARE(allTimingSegments[SEGMENT_FAKE].size());
|
||||
for (i = 0; i < allTimingSegments[SEGMENT_FAKE].size(); i++)
|
||||
{
|
||||
COMPARE_SEGMENT(FakeSegment, SEGMENT_FAKE, i);
|
||||
FakeSegment * segT =
|
||||
static_cast<FakeSegment *>(this->allTimingSegments[SEGMENT_FAKE][i]);
|
||||
FakeSegment * segO =
|
||||
static_cast<FakeSegment *>(other.allTimingSegments[SEGMENT_FAKE][i]);
|
||||
if (segT->GetRow() != segO->GetRow()) return false;
|
||||
if (segT->GetLength() != segO->GetLength()) return false;
|
||||
}
|
||||
|
||||
COMPARE( m_fBeat0OffsetInSeconds );
|
||||
|
||||
#undef COMPARE_SEGMENT
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user