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)
{
JsonUtil::DeserializeVectorObjects( td.m_BPMSegments, Deserialize, root["BpmSegments"] );
JsonUtil::DeserializeVectorObjects( td.m_StopSegments, Deserialize, root["StopSegments"] );
vector<TimingSegment *> &bpms = td.allTimingSegments[SEGMENT_BPM];
// 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)
+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.
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 );
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. */
f.PutLine( ssprintf("#TITLE:%s;", DwiEscape(out.GetTranslitFullTitle()).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("#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("#SAMPLESTART:%.3f;", out.m_fMusicSampleStartSeconds) );
f.PutLine( ssprintf("#SAMPLELENGTH:%.3f;", out.m_fMusicSampleLengthSeconds) );
@@ -376,29 +380,30 @@ bool NotesWriterDWI::Write( RString sPath, const Song &out )
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:" );
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];
f.Write( ssprintf("%.3f=%.3f", fs.GetRow() * 4.0f / ROWS_PER_BEAT,
roundf(fs.GetPause()*1000)) );
if( i != out.m_SongTiming.m_StopSegments.size()-1 )
const StopSegment *fs = static_cast<StopSegment *>(stops[i]);
f.Write( ssprintf("%.3f=%.3f", fs->GetRow() * 4.0f / ROWS_PER_BEAT,
roundf(fs->GetPause()*1000)) );
if( i != stops.size()-1 )
f.Write( "," );
}
f.PutLine( ";" );
}
if( out.m_SongTiming.m_BPMSegments.size() > 1)
if( bpms.size() > 1)
{
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];
f.Write( ssprintf("%.3f=%.3f", bs.GetRow() * 4.0f / ROWS_PER_BEAT, bs.GetBPM() ) );
if( i != out.m_SongTiming.m_BPMSegments.size()-1 )
const BPMSegment *bs = static_cast<BPMSegment *>(bpms[i]);
f.Write( ssprintf("%.3f=%.3f", bs->GetRow() * 4.0f / ROWS_PER_BEAT, bs->GetBPM() ) );
if( i != bpms.size()-1 )
f.Write( "," );
}
f.PutLine( ";" );
+2 -6
View File
@@ -8,14 +8,10 @@
#include <float.h>
TimingData::TimingData() :
m_fBeat0OffsetInSeconds(0)
{
}
TimingData::TimingData(float fOffset) :
m_fBeat0OffsetInSeconds(fOffset)
{
{
// allTimingSegments[SEGMENT_BPM] = new vector<BPMSegment>();
}
void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highest ) const
+12 -69
View File
@@ -16,14 +16,10 @@ struct lua_State;
class TimingData
{
public:
/**
* @brief Sets up initial timing data.
*/
TimingData();
/**
* @brief Sets up initial timing data with a defined offset.
* @param fOffset the offset from the 0th beat. */
TimingData(float fOffset);
TimingData(float fOffset = 0);
/**
* @brief Gets the actual BPM of the song,
* while respecting a limit.
@@ -1303,36 +1299,14 @@ public:
*/
bool operator==( const TimingData &other )
{
COMPARE( m_BPMSegments.size() );
for( unsigned i=0; i<m_BPMSegments.size(); i++ )
COMPARE( m_BPMSegments[i] );
COMPARE( m_StopSegments.size() );
for( unsigned i=0; i<m_StopSegments.size(); i++ )
COMPARE( m_StopSegments[i] );
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] );
for (int i = 0; i < NUM_TimingSegmentTypes; i++)
{
COMPARE(allTimingSegments[i].size());
for (unsigned j=0; j < allTimingSegments[i].size(); j++)
{
COMPARE(allTimingSegments[i][j]);
}
}
COMPARE( m_fBeat0OffsetInSeconds );
return true;
}
@@ -1361,40 +1335,9 @@ public:
*/
RString m_sFile;
// All of the following vectors must be sorted before gameplay.
/**
* @brief The collection of BPMSegments.
*/
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;
vector<TimingSegment *> allTimingSegments[NUM_TimingSegmentTypes];
/**
* @brief The initial offset of a song.