Temp branch [timing] for conversion process.

May need some help with Notes*Json.
This commit is contained in:
Jason Felds
2011-07-14 12:31:42 -04:00
parent 4f91b5ddbe
commit da291c2097
5 changed files with 37 additions and 91 deletions
+3 -2
View File
@@ -31,8 +31,9 @@ static void Deserialize(StopSegment &seg, const Json::Value &root)
static void Deserialize(TimingData &td, const Json::Value &root) static void Deserialize(TimingData &td, const Json::Value &root)
{ {
JsonUtil::DeserializeVectorObjects( td.m_BPMSegments, Deserialize, root["BpmSegments"] ); vector<TimingSegment *> &bpms = td.allTimingSegments[SEGMENT_BPM];
JsonUtil::DeserializeVectorObjects( td.m_StopSegments, Deserialize, root["StopSegments"] ); // JsonUtil::DeserializeVectorObjects( &bpms, Deserialize, root["BpmSegments"] );
// JsonUtil::DeserializeVectorObjects( *(td).allTimingSegments[SEGMENT_STOP_DELAY], Deserialize, root["StopSegments"] );
} }
static void Deserialize(LyricSegment &o, const Json::Value &root) static void Deserialize(LyricSegment &o, const Json::Value &root)
+2 -1
View File
@@ -932,7 +932,8 @@ bool SMLoader::LoadFromSimfile( const RString &sPath, Song &out, bool bFromCache
} }
// Ensure all warps from negative time changes are in order. // Ensure all warps from negative time changes are in order.
sort(out.m_SongTiming.m_WarpSegments.begin(), out.m_SongTiming.m_WarpSegments.end()); vector<TimingSegment *> &warps = out.m_SongTiming.allTimingSegments[SEGMENT_WARP];
sort(warps.begin(), warps.end());
TidyUpData( out, bFromCache ); TidyUpData( out, bFromCache );
return true; return true;
} }
+18 -13
View File
@@ -352,9 +352,13 @@ bool NotesWriterDWI::Write( RString sPath, const Song &out )
/* Write transliterations, if we have them, since DWI doesn't support UTF-8. */ /* Write transliterations, if we have them, since DWI doesn't support UTF-8. */
f.PutLine( ssprintf("#TITLE:%s;", DwiEscape(out.GetTranslitFullTitle()).c_str()) ); f.PutLine( ssprintf("#TITLE:%s;", DwiEscape(out.GetTranslitFullTitle()).c_str()) );
f.PutLine( ssprintf("#ARTIST:%s;", DwiEscape(out.GetTranslitArtist()).c_str()) ); f.PutLine( ssprintf("#ARTIST:%s;", DwiEscape(out.GetTranslitArtist()).c_str()) );
ASSERT( out.m_SongTiming.m_BPMSegments[0].GetRow() == 0 );
const vector<TimingSegment *> &bpms = out.m_SongTiming.allTimingSegments[SEGMENT_BPM];
ASSERT_M(bpms[0]->GetRow() == 0,
ssprintf("The first BPM Segment must be defined at row 0, not %d!", bpms[0]->GetRow()) );
f.PutLine( ssprintf("#FILE:%s;", DwiEscape(out.m_sMusicFile).c_str()) ); f.PutLine( ssprintf("#FILE:%s;", DwiEscape(out.m_sMusicFile).c_str()) );
f.PutLine( ssprintf("#BPM:%.3f;", out.m_SongTiming.m_BPMSegments[0].GetBPM()) ); f.PutLine( ssprintf("#BPM:%.3f;", static_cast<BPMSegment *>(bpms[0])->GetBPM()) );
f.PutLine( ssprintf("#GAP:%ld;", -lrintf( out.m_SongTiming.m_fBeat0OffsetInSeconds*1000 )) ); f.PutLine( ssprintf("#GAP:%ld;", -lrintf( out.m_SongTiming.m_fBeat0OffsetInSeconds*1000 )) );
f.PutLine( ssprintf("#SAMPLESTART:%.3f;", out.m_fMusicSampleStartSeconds) ); f.PutLine( ssprintf("#SAMPLESTART:%.3f;", out.m_fMusicSampleStartSeconds) );
f.PutLine( ssprintf("#SAMPLELENGTH:%.3f;", out.m_fMusicSampleLengthSeconds) ); f.PutLine( ssprintf("#SAMPLELENGTH:%.3f;", out.m_fMusicSampleLengthSeconds) );
@@ -376,29 +380,30 @@ bool NotesWriterDWI::Write( RString sPath, const Song &out )
break; break;
} }
if( !out.m_SongTiming.m_StopSegments.empty() ) const vector<TimingSegment *> &stops = out.m_SongTiming.allTimingSegments[SEGMENT_STOP_DELAY];
if( !stops.empty() )
{ {
f.Write( "#FREEZE:" ); f.Write( "#FREEZE:" );
for( unsigned i=0; i<out.m_SongTiming.m_StopSegments.size(); i++ ) for( unsigned i=0; i<stops.size(); i++ )
{ {
const StopSegment &fs = out.m_SongTiming.m_StopSegments[i]; const StopSegment *fs = static_cast<StopSegment *>(stops[i]);
f.Write( ssprintf("%.3f=%.3f", fs.GetRow() * 4.0f / ROWS_PER_BEAT, f.Write( ssprintf("%.3f=%.3f", fs->GetRow() * 4.0f / ROWS_PER_BEAT,
roundf(fs.GetPause()*1000)) ); roundf(fs->GetPause()*1000)) );
if( i != out.m_SongTiming.m_StopSegments.size()-1 ) if( i != stops.size()-1 )
f.Write( "," ); f.Write( "," );
} }
f.PutLine( ";" ); f.PutLine( ";" );
} }
if( out.m_SongTiming.m_BPMSegments.size() > 1) if( bpms.size() > 1)
{ {
f.Write( "#CHANGEBPM:" ); f.Write( "#CHANGEBPM:" );
for( unsigned i=1; i<out.m_SongTiming.m_BPMSegments.size(); i++ ) for( unsigned i=1; i<bpms.size(); i++ )
{ {
const BPMSegment &bs = out.m_SongTiming.m_BPMSegments[i]; const BPMSegment *bs = static_cast<BPMSegment *>(bpms[i]);
f.Write( ssprintf("%.3f=%.3f", bs.GetRow() * 4.0f / ROWS_PER_BEAT, bs.GetBPM() ) ); f.Write( ssprintf("%.3f=%.3f", bs->GetRow() * 4.0f / ROWS_PER_BEAT, bs->GetBPM() ) );
if( i != out.m_SongTiming.m_BPMSegments.size()-1 ) if( i != bpms.size()-1 )
f.Write( "," ); f.Write( "," );
} }
f.PutLine( ";" ); f.PutLine( ";" );
+1 -5
View File
@@ -8,14 +8,10 @@
#include <float.h> #include <float.h>
TimingData::TimingData() :
m_fBeat0OffsetInSeconds(0)
{
}
TimingData::TimingData(float fOffset) : TimingData::TimingData(float fOffset) :
m_fBeat0OffsetInSeconds(fOffset) m_fBeat0OffsetInSeconds(fOffset)
{ {
// allTimingSegments[SEGMENT_BPM] = new vector<BPMSegment>();
} }
void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highest ) const void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highest ) const
+12 -69
View File
@@ -16,14 +16,10 @@ struct lua_State;
class TimingData class TimingData
{ {
public: public:
/**
* @brief Sets up initial timing data.
*/
TimingData();
/** /**
* @brief Sets up initial timing data with a defined offset. * @brief Sets up initial timing data with a defined offset.
* @param fOffset the offset from the 0th beat. */ * @param fOffset the offset from the 0th beat. */
TimingData(float fOffset); TimingData(float fOffset = 0);
/** /**
* @brief Gets the actual BPM of the song, * @brief Gets the actual BPM of the song,
* while respecting a limit. * while respecting a limit.
@@ -1303,36 +1299,14 @@ public:
*/ */
bool operator==( const TimingData &other ) bool operator==( const TimingData &other )
{ {
COMPARE( m_BPMSegments.size() ); for (int i = 0; i < NUM_TimingSegmentTypes; i++)
for( unsigned i=0; i<m_BPMSegments.size(); i++ ) {
COMPARE( m_BPMSegments[i] ); COMPARE(allTimingSegments[i].size());
COMPARE( m_StopSegments.size() ); for (unsigned j=0; j < allTimingSegments[i].size(); j++)
for( unsigned i=0; i<m_StopSegments.size(); i++ ) {
COMPARE( m_StopSegments[i] ); COMPARE(allTimingSegments[i][j]);
COMPARE( m_WarpSegments.size() ); }
for( unsigned i=0; i<m_WarpSegments.size(); i++ ) }
COMPARE( m_WarpSegments[i] );
COMPARE( m_vTimeSignatureSegments.size() );
for( unsigned i=0; i<m_vTimeSignatureSegments.size(); i++)
COMPARE( m_vTimeSignatureSegments[i] );
COMPARE( m_TickcountSegments.size() );
for( unsigned i=0; i<m_TickcountSegments.size(); i++ )
COMPARE( m_TickcountSegments[i] );
COMPARE( m_ComboSegments.size() );
for( unsigned i=0; i<m_ComboSegments.size(); i++ )
COMPARE( m_ComboSegments[i] );
COMPARE( m_LabelSegments.size() );
for( unsigned i=0; i<m_LabelSegments.size(); i++ )
COMPARE( m_LabelSegments[i] );
COMPARE( m_SpeedSegments.size() );
for( unsigned i=0; i<m_SpeedSegments.size(); i++ )
COMPARE( m_SpeedSegments[i] );
COMPARE( m_ScrollSegments.size() );
for( unsigned i=0; i<m_ScrollSegments.size(); i++ )
COMPARE( m_ScrollSegments[i] );
COMPARE( m_FakeSegments.size() );
for( unsigned i=0; i<m_FakeSegments.size(); i++ )
COMPARE( m_FakeSegments[i] );
COMPARE( m_fBeat0OffsetInSeconds ); COMPARE( m_fBeat0OffsetInSeconds );
return true; return true;
} }
@@ -1361,40 +1335,9 @@ public:
*/ */
RString m_sFile; RString m_sFile;
// All of the following vectors must be sorted before gameplay. // All of the following vectors must be sorted before gameplay.
/**
* @brief The collection of BPMSegments.
*/ vector<TimingSegment *> allTimingSegments[NUM_TimingSegmentTypes];
vector<BPMSegment> m_BPMSegments;
/**
* @brief The collection of StopSegments & DelaySegments.
*/
vector<StopSegment> m_StopSegments;
/**
* @brief The collection of TimeSignatureSegments.
*/
vector<TimeSignatureSegment> m_vTimeSignatureSegments;
/**
* @brief The collection of WarpSegments.
*/
vector<WarpSegment> m_WarpSegments;
/**
* @brief The collection of TickcountSegments.
*/
vector<TickcountSegment> m_TickcountSegments;
/**
* @brief The collection of ComboSegments.
*/
vector<ComboSegment> m_ComboSegments;
/**
* @brief The collection of LabelSegments.
*/
vector<LabelSegment> m_LabelSegments;
/** @brief The collection of SpeedSegments. */
vector<SpeedSegment> m_SpeedSegments;
/** @brief The collection of ScrollSegments. */
vector<ScrollSegment> m_ScrollSegments;
/** @brief The collection of FakeSegments. */
vector<FakeSegment> m_FakeSegments;
/** /**
* @brief The initial offset of a song. * @brief The initial offset of a song.