[timing] Down to about 130 errors.

Need a break, maybe some help.
This commit is contained in:
Jason Felds
2011-07-14 15:22:32 -04:00
parent 88fca505a8
commit 312498be94
+82 -282
View File
@@ -18,8 +18,10 @@ void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highe
{ {
fMinBPMOut = FLT_MAX; fMinBPMOut = FLT_MAX;
fMaxBPMOut = 0; fMaxBPMOut = 0;
FOREACH_CONST( BPMSegment, m_BPMSegments, seg ) const vector<TimingSegment *> &bpms = this->allTimingSegments[SEGMENT_BPM];
for (unsigned i = 0; i < bpms.size(); i++)
{ {
BPMSegment *seg = static_cast<BPMSegment *>(bpms[i]);
const float fBPM = seg->GetBPM(); const float fBPM = seg->GetBPM();
fMaxBPMOut = clamp(max( fBPM, fMaxBPMOut ), 0, highest); fMaxBPMOut = clamp(max( fBPM, fMaxBPMOut ), 0, highest);
fMinBPMOut = min( fBPM, fMinBPMOut ); fMinBPMOut = min( fBPM, fMinBPMOut );
@@ -29,7 +31,8 @@ void TimingData::GetActualBPM( float &fMinBPMOut, float &fMaxBPMOut, float highe
void TimingData::AddBPMSegment( const BPMSegment &seg ) void TimingData::AddBPMSegment( const BPMSegment &seg )
{ {
m_BPMSegments.insert( upper_bound(m_BPMSegments.begin(), m_BPMSegments.end(), seg), seg ); const vector<TimingSegment *> &segs = this->allTimingSegments[SEGMENT_BPM];
segs.insert( upper_bound(segs.begin(), segs.end(), seg), seg );
} }
void TimingData::AddStopSegment( const StopSegment &seg ) void TimingData::AddStopSegment( const StopSegment &seg )
@@ -81,11 +84,13 @@ void TimingData::AddFakeSegment( const FakeSegment &seg )
void TimingData::SetBPMAtRow( int iNoteRow, float fBPM ) void TimingData::SetBPMAtRow( int iNoteRow, float fBPM )
{ {
unsigned i; unsigned i;
for( i=0; i<m_BPMSegments.size(); i++ ) vector<TimingSegment *> &bpms = this->allTimingSegments[SEGMENT_BPM];
if( m_BPMSegments[i].GetRow() >= iNoteRow ) for( i=0; i<bpms.size(); i++ )
if( bpms[i]->GetRow() >= iNoteRow )
break; break;
if( i == m_BPMSegments.size() || m_BPMSegments[i].GetRow() != iNoteRow ) BPMSegment *bs = static_cast<BPMSegment *>(bpms[i]);
if( i == bpms.size() || bs->GetRow() != iNoteRow )
{ {
// There is no BPMSegment at the specified beat. If the BPM being set differs // There is no BPMSegment at the specified beat. If the BPM being set differs
// from the last BPMSegment's BPM, create a new BPMSegment. // from the last BPMSegment's BPM, create a new BPMSegment.
@@ -1389,91 +1394,25 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool
void TimingData::InsertRows( int iStartRow, int iRowsToAdd ) void TimingData::InsertRows( int iStartRow, int iRowsToAdd )
{ {
for( unsigned i = 0; i < m_BPMSegments.size(); i++ ) for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++)
{ {
BPMSegment &bpm = m_BPMSegments[i]; vector<TimingSegment *> &segs = this->allTimingSegments[i];
if( bpm.GetRow() < iStartRow ) for (unsigned j = 0; j < segs.size(); j++)
continue; {
bpm.SetRow( bpm.GetRow() + iRowsToAdd ); TimingSegment *seg = segs[j];
} if (seg->GetRow() < iStartRow)
continue;
for( unsigned i = 0; i < m_StopSegments.size(); i++ ) seg->SetRow(seg->GetRow() + iRowsToAdd);
{ }
StopSegment &stop = m_StopSegments[i];
if( stop.GetRow() < iStartRow )
continue;
stop.SetRow(stop.GetRow() + iRowsToAdd);
}
for( unsigned i = 0; i < m_WarpSegments.size(); i++ )
{
WarpSegment &warp = m_WarpSegments[i];
if( warp.GetRow() < iStartRow )
continue;
warp.SetRow(warp.GetRow() + iRowsToAdd);
}
for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ )
{
TimeSignatureSegment &time = m_vTimeSignatureSegments[i];
if( time.GetRow() < iStartRow )
continue;
time.SetRow(time.GetRow() + iRowsToAdd);
}
for( unsigned i = 0; i < m_TickcountSegments.size(); i++ )
{
TickcountSegment &tick = m_TickcountSegments[i];
if( tick.GetRow() < iStartRow )
continue;
tick.SetRow(tick.GetRow() + iRowsToAdd);
}
for( unsigned i = 0; i < m_ComboSegments.size(); i++ )
{
ComboSegment &comb = m_ComboSegments[i];
if( comb.GetRow() < iStartRow )
continue;
comb.SetRow(comb.GetRow() + iRowsToAdd);
}
for( unsigned i = 0; i < m_LabelSegments.size(); i++ )
{
LabelSegment &labl = m_LabelSegments[i];
if( labl.GetRow() < iStartRow )
continue;
labl.SetRow(labl.GetRow() + iRowsToAdd);
}
for( unsigned i = 0; i < m_SpeedSegments.size(); i++ )
{
SpeedSegment &sped = m_SpeedSegments[i];
if( sped.GetRow() < iStartRow )
continue;
sped.SetRow(sped.GetRow() + iRowsToAdd);
}
for( unsigned i = 0; i < m_FakeSegments.size(); i++ )
{
FakeSegment &fake = m_FakeSegments[i];
if( fake.GetRow() < iStartRow )
continue;
fake.SetRow(fake.GetRow() + iRowsToAdd);
}
for( unsigned i = 0; i < m_ScrollSegments.size(); i++ )
{
ScrollSegment &scrl = m_ScrollSegments[i];
if( scrl.GetRow() < iStartRow )
continue;
scrl.SetRow(scrl.GetRow() + iRowsToAdd);
} }
if( iStartRow == 0 ) if( iStartRow == 0 )
{ {
/* If we're shifting up at the beginning, we just shifted up the first /* If we're shifting up at the beginning, we just shifted up the first
* BPMSegment. That segment must always begin at 0. */ * BPMSegment. That segment must always begin at 0. */
ASSERT( m_BPMSegments.size() > 0 ); vector<TimingSegment *> &bpms = this->allTimingSegments[SEGMENT_BPM];
m_BPMSegments[0].SetRow(0); ASSERT_M( bpms.size() > 0, "There must be at least one BPM Segment in the chart!" );
bpms[0]->SetRow(0);
} }
} }
@@ -1485,190 +1424,27 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete )
/* We're moving rows up. Delete any BPM changes and stops in the region /* We're moving rows up. Delete any BPM changes and stops in the region
* being deleted. */ * being deleted. */
for( unsigned i = 0; i < m_BPMSegments.size(); i++ ) for (unsigned i = 0; i < NUM_TimingSegmentTypes; i++)
{ {
BPMSegment &bpm = m_BPMSegments[i]; vector<TimingSegment *> &segs = this->allTimingSegments[i];
for (unsigned j = 0; j < segs.size(); j++)
// Before deleted region:
if( bpm.GetRow() < iStartRow )
continue;
// Inside deleted region:
if( bpm.GetRow() < iStartRow+iRowsToDelete )
{ {
m_BPMSegments.erase( m_BPMSegments.begin()+i, m_BPMSegments.begin()+i+1 ); TimingSegment *seg = segs[j];
--i; // Before deleted region:
continue; if (seg->GetRow() < iStartRow)
continue;
// Inside deleted region:
if (seg->GetRow() < iStartRow + iRowsToDelete)
{
segs.erase(segs.begin()+j, segs.begin()+j+1);
--j;
continue;
}
// After deleted regions:
seg->SetRow(seg->GetRow() - iRowsToDelete);
} }
// After deleted region:
bpm.SetRow( bpm.GetRow() - iRowsToDelete );
}
for( unsigned i = 0; i < m_StopSegments.size(); i++ )
{
StopSegment &stop = m_StopSegments[i];
int keyRow = stop.GetRow();
// Before deleted region:
if( keyRow < iStartRow )
continue;
// Inside deleted region:
if( keyRow < iStartRow+iRowsToDelete )
{
m_StopSegments.erase( m_StopSegments.begin()+i, m_StopSegments.begin()+i+1 );
--i;
continue;
}
// After deleted region:
stop.SetRow(keyRow - iRowsToDelete);
}
for( unsigned i = 0; i < m_WarpSegments.size(); i++ )
{
WarpSegment &warp = m_WarpSegments[i];
int keyRow = warp.GetRow();
if( keyRow < iStartRow )
continue;
if( keyRow < iStartRow+iRowsToDelete )
{
m_WarpSegments.erase( m_WarpSegments.begin()+i, m_WarpSegments.begin()+i+1 );
--i;
continue;
}
warp.SetRow(keyRow - iRowsToDelete);
}
for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ )
{
TimeSignatureSegment &time = m_vTimeSignatureSegments[i];
int keyRow = time.GetRow();
// Before deleted region:
if( keyRow < iStartRow )
continue;
// Inside deleted region:
if( keyRow < iStartRow+iRowsToDelete )
{
m_vTimeSignatureSegments.erase(
m_vTimeSignatureSegments.begin()+i,
m_vTimeSignatureSegments.begin()+i+1 );
--i;
continue;
}
// After deleted region:
time.SetRow(keyRow - iRowsToDelete);
}
for( unsigned i = 0; i < m_TickcountSegments.size(); i++ )
{
TickcountSegment &tick = m_TickcountSegments[i];
int keyRow = tick.GetRow();
// Before deleted region:
if( keyRow < iStartRow )
continue;
// Inside deleted region:
if( keyRow < iStartRow+iRowsToDelete )
{
m_TickcountSegments.erase( m_TickcountSegments.begin()+i, m_TickcountSegments.begin()+i+1 );
--i;
continue;
}
// After deleted region:
tick.SetRow(keyRow - iRowsToDelete);
}
for( unsigned i = 0; i < m_ComboSegments.size(); i++ )
{
ComboSegment &comb = m_ComboSegments[i];
int keyRow = comb.GetRow();
// Before deleted region:
if( keyRow < iStartRow )
continue;
// Inside deleted region:
if( keyRow < iStartRow+iRowsToDelete )
{
m_ComboSegments.erase( m_ComboSegments.begin()+i, m_ComboSegments.begin()+i+1 );
--i;
continue;
}
// After deleted region:
comb.SetRow(keyRow - iRowsToDelete);
}
for( unsigned i = 0; i < m_LabelSegments.size(); i++ )
{
LabelSegment &labl = m_LabelSegments[i];
int keyRow = labl.GetRow();
if( keyRow < iStartRow )
continue;
if( keyRow < iStartRow+iRowsToDelete )
{
m_LabelSegments.erase( m_LabelSegments.begin()+i, m_LabelSegments.begin()+i+1 );
--i;
continue;
}
labl.SetRow(keyRow - iRowsToDelete);
}
for( unsigned i = 0; i < m_SpeedSegments.size(); i++ )
{
SpeedSegment &sped = m_SpeedSegments[i];
int keyRow = sped.GetRow();
if( keyRow < iStartRow )
continue;
if( keyRow < iStartRow+iRowsToDelete )
{
m_SpeedSegments.erase( m_SpeedSegments.begin()+i, m_SpeedSegments.begin()+i+1 );
--i;
continue;
}
sped.SetRow(keyRow - iRowsToDelete);
}
for( unsigned i = 0; i < m_FakeSegments.size(); i++ )
{
FakeSegment &fake = m_FakeSegments[i];
int keyRow = fake.GetRow();
if( keyRow < iStartRow )
continue;
if( keyRow < iStartRow+iRowsToDelete )
{
m_FakeSegments.erase( m_FakeSegments.begin()+i, m_FakeSegments.begin()+i+1 );
--i;
continue;
}
fake.SetRow(keyRow - iRowsToDelete);
}
for( unsigned i = 0; i < m_ScrollSegments.size(); i++ )
{
ScrollSegment &scrl = m_ScrollSegments[i];
int keyRow = scrl.GetRow();
if( keyRow < iStartRow )
continue;
if( keyRow < iStartRow+iRowsToDelete )
{
m_ScrollSegments.erase( m_ScrollSegments.begin()+i, m_ScrollSegments.begin()+i+1 );
--i;
continue;
}
scrl.SetRow(keyRow - iRowsToDelete);
} }
this->SetBPMAtRow( iStartRow, fNewBPM ); this->SetBPMAtRow( iStartRow, fNewBPM );
@@ -1789,22 +1565,22 @@ void TimingData::TidyUpData()
bool TimingData::HasBpmChanges() const bool TimingData::HasBpmChanges() const
{ {
return m_BPMSegments.size()>1; return this->allTimingSegments[SEGMENT_BPM].size()>1;
} }
bool TimingData::HasStops() const bool TimingData::HasStops() const
{ {
return m_StopSegments.size()>0; return this->allTimingSegments[SEGMENT_STOP_DELAY].size()>0;
} }
bool TimingData::HasWarps() const bool TimingData::HasWarps() const
{ {
return m_WarpSegments.size()>0; return this->allTimingSegments[SEGMENT_WARP].size()>0;
} }
bool TimingData::HasFakes() const bool TimingData::HasFakes() const
{ {
return m_FakeSegments.size()>0; return this->allTimingSegments[SEGMENT_FAKE].size()>0;
} }
bool TimingData::HasSpeedChanges() const bool TimingData::HasSpeedChanges() const
@@ -1869,8 +1645,10 @@ public:
static int GetWarps( T* p, lua_State *L ) static int GetWarps( T* p, lua_State *L )
{ {
vector<RString> vWarps; vector<RString> vWarps;
FOREACH_CONST( WarpSegment, p->m_WarpSegments, seg ) vector<TimingSegment *> &warps = p->allTimingSegments[SEGMENT_WARP];
for (unsigned i = 0; i < warps.size(); i++)
{ {
WarpSegment *seg = static_cast<WarpSegment *>(warps[i]);
const float length = seg->GetLength(); const float length = seg->GetLength();
const float beat = seg->GetBeat(); const float beat = seg->GetBeat();
vWarps.push_back( ssprintf("%f=%f", beat, length) ); vWarps.push_back( ssprintf("%f=%f", beat, length) );
@@ -1881,8 +1659,10 @@ public:
static int GetFakes( T* p, lua_State *L ) static int GetFakes( T* p, lua_State *L )
{ {
vector<RString> vFakes; vector<RString> vFakes;
FOREACH_CONST( FakeSegment, p->m_FakeSegments, seg ) vector<TimingSegment *> &fakes = p->allTimingSegments[SEGMENT_FAKE];
for (unsigned i = 0; i < fakes.size(); i++)
{ {
FakeSegment *seg = static_cast<FakeSegment *>(fakes[i]);
const float length = seg->GetLength(); const float length = seg->GetLength();
const float beat = seg->GetBeat(); const float beat = seg->GetBeat();
vFakes.push_back( ssprintf("%f=%f", beat, length) ); vFakes.push_back( ssprintf("%f=%f", beat, length) );
@@ -1893,8 +1673,10 @@ public:
static int GetScrolls( T* p, lua_State *L ) static int GetScrolls( T* p, lua_State *L )
{ {
vector<RString> vScrolls; vector<RString> vScrolls;
FOREACH_CONST( ScrollSegment, p->m_ScrollSegments, seg ) vector<TimingSegment *> &scrolls = p->allTimingSegments[SEGMENT_SCROLL];
for (unsigned i = 0; i < scrolls.size(); i++)
{ {
ScrollSegment *seg = static_cast<ScrollSegment *>(scrolls[i]);
const float ratio = seg->GetRatio(); const float ratio = seg->GetRatio();
const float beat = seg->GetBeat(); const float beat = seg->GetBeat();
vScrolls.push_back( ssprintf("%f=%f", beat, ratio) ); vScrolls.push_back( ssprintf("%f=%f", beat, ratio) );
@@ -1905,8 +1687,10 @@ public:
static int GetSpeeds( T* p, lua_State *L ) static int GetSpeeds( T* p, lua_State *L )
{ {
vector<RString> vSpeeds; vector<RString> vSpeeds;
FOREACH_CONST( SpeedSegment, p->m_SpeedSegments, seg ) vector<TimingSegment *> &speeds = p->allTimingSegments[SEGMENT_SPEED];
for (unsigned i = 0; i < speeds.size(); i++)
{ {
SpeedSegment *seg = static_cast<SpeedSegment *>(speeds[i]);
const float length = seg->GetLength(); const float length = seg->GetLength();
const float ratio = seg->GetRatio(); const float ratio = seg->GetRatio();
const unsigned short unit = seg->GetUnit(); const unsigned short unit = seg->GetUnit();
@@ -1919,8 +1703,10 @@ public:
static int GetTimeSignatures( T* p, lua_State *L ) static int GetTimeSignatures( T* p, lua_State *L )
{ {
vector<RString> vTimes; vector<RString> vTimes;
FOREACH_CONST( TimeSignatureSegment, p->m_vTimeSignatureSegments, seg ) vector<TimingSegment *> &tSigs = p->allTimingSegments[SEGMENT_TIME_SIG];
for (unsigned i = 0; i < tSigs.size(); i++)
{ {
TimeSignatureSegment *seg = static_cast<TimeSignatureSegment *>(tSigs[i]);
const int numerator = seg->GetNum(); const int numerator = seg->GetNum();
const int denominator = seg->GetDen(); const int denominator = seg->GetDen();
const float beat = seg->GetBeat(); const float beat = seg->GetBeat();
@@ -1932,8 +1718,10 @@ public:
static int GetCombos( T* p, lua_State *L ) static int GetCombos( T* p, lua_State *L )
{ {
vector<RString> vCombos; vector<RString> vCombos;
FOREACH_CONST( ComboSegment, p->m_ComboSegments, seg ) vector<TimingSegment *> &combos = p->allTimingSegments[SEGMENT_COMBO];
for (unsigned i = 0; i < combos.size(); i++)
{ {
ComboSegment *seg = static_cast<ComboSegment *>(combos[i]);
const int combo = seg->GetCombo(); const int combo = seg->GetCombo();
const int miss = seg->GetMissCombo(); const int miss = seg->GetMissCombo();
const float beat = seg->GetBeat(); const float beat = seg->GetBeat();
@@ -1945,11 +1733,13 @@ public:
static int GetTickcounts( T* p, lua_State *L ) static int GetTickcounts( T* p, lua_State *L )
{ {
vector<RString> vTicks; vector<RString> vTicks;
FOREACH_CONST( TickcountSegment, p->m_TickcountSegments, seg ) vector<TimingSegment *> &ticks = p->allTimingSegments[SEGMENT_TICKCOUNT];
for (unsigned i = 0; i < ticks.size(); i++)
{ {
const int ticks = seg->GetTicks(); TickcountSegment *seg = static_cast<TickcountSegment *>(ticks[i]);
const int tick = seg->GetTicks();
const float beat = seg->GetBeat(); const float beat = seg->GetBeat();
vTicks.push_back( ssprintf("%f=%d", beat, ticks) ); vTicks.push_back( ssprintf("%f=%d", beat, tick) );
} }
LuaHelpers::CreateTableFromArray(vTicks, L); LuaHelpers::CreateTableFromArray(vTicks, L);
return 1; return 1;
@@ -1957,8 +1747,10 @@ public:
static int GetStops( T* p, lua_State *L ) static int GetStops( T* p, lua_State *L )
{ {
vector<RString> vStops; vector<RString> vStops;
FOREACH_CONST( StopSegment, p->m_StopSegments, seg ) vector<TimingSegment *> &stops = p->allTimingSegments[SEGMENT_STOP_DELAY];
for (unsigned i = 0; i < stops.size(); i++)
{ {
StopSegment *seg = static_cast<StopSegment *>(stops[i]);
const float fStartBeat = seg->GetBeat(); const float fStartBeat = seg->GetBeat();
const float fStopLength = seg->GetPause(); const float fStopLength = seg->GetPause();
if(!seg->GetDelay()) if(!seg->GetDelay())
@@ -1971,8 +1763,10 @@ public:
static int GetDelays( T* p, lua_State *L ) static int GetDelays( T* p, lua_State *L )
{ {
vector<RString> vDelays; vector<RString> vDelays;
FOREACH_CONST( StopSegment, p->m_StopSegments, seg ) vector<TimingSegment *> &stops = p->allTimingSegments[SEGMENT_STOP_DELAY];
for (unsigned i = 0; i < stops.size(); i++)
{ {
StopSegment *seg = static_cast<StopSegment *>(stops[i]);
const float fStartBeat = seg->GetBeat(); const float fStartBeat = seg->GetBeat();
const float fStopLength = seg->GetPause(); const float fStopLength = seg->GetPause();
if(seg->GetDelay()) if(seg->GetDelay())
@@ -1985,8 +1779,10 @@ public:
static int GetBPMs( T* p, lua_State *L ) static int GetBPMs( T* p, lua_State *L )
{ {
vector<float> vBPMs; vector<float> vBPMs;
FOREACH_CONST( BPMSegment, p->m_BPMSegments, seg ) vector<TimingSegment *> &bpms = p->allTimingSegments[SEGMENT_BPM];
for (unsigned i = 0; i < bpms.size(); i++)
{ {
BPMSegment *seg = static_cast<BPMSegment *>(bpms[i]);
const float fBPM = seg->GetBPM(); const float fBPM = seg->GetBPM();
vBPMs.push_back( fBPM ); vBPMs.push_back( fBPM );
} }
@@ -1997,8 +1793,10 @@ public:
static int GetLabels( T* p, lua_State *L ) static int GetLabels( T* p, lua_State *L )
{ {
vector<RString> vLabels; vector<RString> vLabels;
FOREACH_CONST( LabelSegment, p->m_LabelSegments, seg ) vector<TimingSegment *> &labels = p->allTimingSegments[SEGMENT_LABEL];
for (unsigned i = 0; i < labels.size(); i++)
{ {
LabelSegment *seg = static_cast<LabelSegment *>(labels[i]);
const float fStartRow = seg->GetBeat(); const float fStartRow = seg->GetBeat();
const RString sLabel = seg->GetLabel(); const RString sLabel = seg->GetLabel();
vLabels.push_back( ssprintf("%f=%s", fStartRow, sLabel.c_str()) ); vLabels.push_back( ssprintf("%f=%s", fStartRow, sLabel.c_str()) );
@@ -2009,8 +1807,10 @@ public:
static int GetBPMsAndTimes( T* p, lua_State *L ) static int GetBPMsAndTimes( T* p, lua_State *L )
{ {
vector<RString> vBPMs; vector<RString> vBPMs;
FOREACH_CONST( BPMSegment, p->m_BPMSegments, seg ) vector<TimingSegment *> &bpms = p->allTimingSegments[SEGMENT_BPM];
for (unsigned i = 0; i < bpms.size(); i++)
{ {
BPMSegment *seg = static_cast<BPMSegment *>(bpms[i]);
const float fStartRow = seg->GetBeat(); const float fStartRow = seg->GetBeat();
const float fBPM = seg->GetBPM(); const float fBPM = seg->GetBPM();
vBPMs.push_back( ssprintf("%f=%f", fStartRow, fBPM) ); vBPMs.push_back( ssprintf("%f=%f", fStartRow, fBPM) );