Temp branch [timing] for conversion process.
May need some help with Notes*Json.
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user