[timing] Set*AtRow error free.

This commit is contained in:
Jason Felds
2011-07-14 21:25:17 -04:00
parent 4f490c3d3b
commit 48a8113336
+64 -45
View File
@@ -206,25 +206,30 @@ void TimingData::SetTickcountAtRow( int iRow, int iTicks )
void TimingData::SetComboAtRow( int iRow, int iCombo, int iMiss ) void TimingData::SetComboAtRow( int iRow, int iCombo, int iMiss )
{ {
unsigned i; unsigned i;
for( i=0; i<m_ComboSegments.size(); i++ ) vector<TimingSegment *> &combos = this->allTimingSegments[SEGMENT_COMBO];
if( m_ComboSegments[i].GetRow() >= iRow ) for( i=0; i<combos.size(); i++ )
if( combos[i]->GetRow() >= iRow )
break; break;
if( i == m_ComboSegments.size() || m_ComboSegments[i].GetRow() != iRow ) ComboSegment *cs = static_cast<ComboSegment *>(combos[i]);
if( i == combos.size() || cs->GetRow() != iRow )
{ {
if(i == 0 || m_ComboSegments[i-1].GetCombo() != iCombo || if (i == 0 ||
m_ComboSegments[i-1].GetMissCombo() != iMiss) static_cast<ComboSegment *>(combos[i-1])->GetCombo() != iCombo ||
AddComboSegment( ComboSegment(iRow, iCombo ) ); static_cast<ComboSegment *>(combos[i-1])->GetMissCombo() != iMiss)
AddSegment( SEGMENT_COMBO, new ComboSegment(iRow, iCombo, iMiss ) );
} }
else else
{ {
if(i > 0 && m_ComboSegments[i-1].GetCombo() == iCombo && if (i > 0 &&
m_ComboSegments[i-1].GetMissCombo() == iMiss) static_cast<ComboSegment *>(combos[i-1])->GetCombo() == iCombo &&
m_ComboSegments.erase( m_ComboSegments.begin()+i, m_ComboSegments.begin()+i+1 ); static_cast<ComboSegment *>(combos[i-1])->GetMissCombo() == iMiss)
combos.erase( combos.begin()+i, combos.begin()+i+1 );
else else
{ {
m_ComboSegments[i].SetCombo(iCombo); cs->SetCombo(iCombo);
m_ComboSegments[i].SetMissCombo(iMiss); cs->SetMissCombo(iMiss);
} }
} }
} }
@@ -246,50 +251,60 @@ void TimingData::SetMissComboAtRow(int iRow, int iMiss)
void TimingData::SetLabelAtRow( int iRow, const RString sLabel ) void TimingData::SetLabelAtRow( int iRow, const RString sLabel )
{ {
unsigned i; unsigned i;
for( i=0; i<m_LabelSegments.size(); i++ ) vector<TimingSegment *> &labels = this->allTimingSegments[SEGMENT_LABEL];
if( m_LabelSegments[i].GetRow() >= iRow ) for( i=0; i<labels.size(); i++ )
if( labels[i]->GetRow() >= iRow )
break; break;
if( i == m_LabelSegments.size() || m_LabelSegments[i].GetRow() != iRow ) LabelSegment *ls = static_cast<LabelSegment *>(labels[i]);
if( i == labels.size() || ls->GetRow() != iRow )
{ {
if( i == 0 || m_LabelSegments[i-1].GetLabel() != sLabel ) if (i == 0 ||
AddLabelSegment( LabelSegment(iRow, sLabel ) ); static_cast<LabelSegment *>(labels[i-1])->GetLabel() != sLabel )
AddSegment( SEGMENT_LABEL, new LabelSegment(iRow, sLabel ) );
} }
else else
{ {
if( i > 0 && ( m_LabelSegments[i-1].GetLabel() == sLabel || sLabel == "" ) ) if (i > 0 &&
m_LabelSegments.erase( m_LabelSegments.begin()+i, m_LabelSegments.begin()+i+1 ); ( static_cast<LabelSegment *>(labels[i-1])->GetLabel() == sLabel ||
sLabel == "" ) )
labels.erase( labels.begin()+i, labels.begin()+i+1 );
else else
m_LabelSegments[i].SetLabel(sLabel); ls->SetLabel(sLabel);
} }
} }
void TimingData::SetSpeedAtRow( int iRow, float fPercent, float fWait, unsigned short usMode ) void TimingData::SetSpeedAtRow( int iRow, float fPercent, float fWait, unsigned short usMode )
{ {
unsigned i; unsigned i;
for( i = 0; i < m_SpeedSegments.size(); i++ ) vector<TimingSegment *> &speeds = this->allTimingSegments[SEGMENT_SPEED];
for( i = 0; i < speeds.size(); i++ )
{ {
if( m_SpeedSegments[i].GetRow() >= iRow) if( speeds[i]->GetRow() >= iRow)
break; break;
} }
if ( i == m_SpeedSegments.size() || m_SpeedSegments[i].GetRow() != iRow ) SpeedSegment *ss = static_cast<SpeedSegment *>(speeds[i]);
if ( i == speeds.size() || ss->GetRow() != iRow )
{ {
// the core mod itself matters the most for comparisons. // the core mod itself matters the most for comparisons.
if( i == 0 || m_SpeedSegments[i-1].GetRatio() != fPercent ) if (i == 0 ||
AddSpeedSegment( SpeedSegment(iRow, fPercent, fWait, usMode) ); static_cast<SpeedSegment *>(speeds[i-1])->GetRatio() != fPercent )
AddSegment( SEGMENT_SPEED, new SpeedSegment(iRow, fPercent, fWait, usMode) );
} }
else else
{ {
// The others aren't compared: only the mod itself matters. // The others aren't compared: only the mod itself matters.
if( i > 0 && m_SpeedSegments[i-1].GetRatio() == fPercent ) if (i > 0 &&
m_SpeedSegments.erase( m_SpeedSegments.begin()+i, static_cast<SpeedSegment *>(speeds[i-1])->GetRatio() == fPercent )
m_SpeedSegments.begin()+i+1 ); speeds.erase( speeds.begin()+i, speeds.begin()+i+1 );
else else
{ {
m_SpeedSegments[i].SetRatio(fPercent); ss->SetRatio(fPercent);
m_SpeedSegments[i].SetLength(fWait); ss->SetLength(fWait);
m_SpeedSegments[i].SetUnit(usMode); ss->SetUnit(usMode);
} }
} }
} }
@@ -297,27 +312,30 @@ void TimingData::SetSpeedAtRow( int iRow, float fPercent, float fWait, unsigned
void TimingData::SetScrollAtRow( int iRow, float fPercent ) void TimingData::SetScrollAtRow( int iRow, float fPercent )
{ {
unsigned i; unsigned i;
for( i = 0; i < m_ScrollSegments.size(); i++ ) vector<TimingSegment *> &scrolls = this->allTimingSegments[SEGMENT_SCROLL];
for( i = 0; i < scrolls.size(); i++ )
{ {
if( m_ScrollSegments[i].GetRow() >= iRow) if( scrolls[i]->GetRow() >= iRow)
break; break;
} }
if ( i == m_ScrollSegments.size() || m_ScrollSegments[i].GetRow() != iRow ) ScrollSegment *ss = static_cast<ScrollSegment *>(scrolls[i]);
if ( i == scrolls.size() || ss->GetRow() != iRow )
{ {
// the core mod itself matters the most for comparisons. // the core mod itself matters the most for comparisons.
if( i == 0 || m_ScrollSegments[i-1].GetRatio() != fPercent ) if (i == 0 ||
AddScrollSegment( ScrollSegment(iRow, fPercent) ); static_cast<ScrollSegment *>(scrolls[i-1])->GetRatio() != fPercent )
AddSegment( SEGMENT_SCROLL, new ScrollSegment(iRow, fPercent) );
} }
else else
{ {
// The others aren't compared: only the mod itself matters. // The others aren't compared: only the mod itself matters.
if( i > 0 && m_ScrollSegments[i-1].GetRatio() == fPercent ) if (i > 0 &&
m_ScrollSegments.erase( m_ScrollSegments.begin()+i, static_cast<ScrollSegment *>(scrolls[i-1])->GetRatio() == fPercent )
m_ScrollSegments.begin()+i+1 ); scrolls.erase( scrolls.begin()+i, scrolls.begin()+i+1 );
else else
{ {
m_ScrollSegments[i].SetRatio(fPercent); ss->SetRatio(fPercent);
} }
} }
} }
@@ -325,25 +343,26 @@ void TimingData::SetScrollAtRow( int iRow, float fPercent )
void TimingData::SetFakeAtRow( int iRow, float fNew ) void TimingData::SetFakeAtRow( int iRow, float fNew )
{ {
unsigned i; unsigned i;
for( i=0; i<m_FakeSegments.size(); i++ ) vector<TimingSegment *> &fakes = this->allTimingSegments[SEGMENT_FAKE];
if( m_FakeSegments[i].GetRow() == iRow ) for( i=0; i<fakes.size(); i++ )
if( fakes[i]->GetRow() == iRow )
break; break;
bool valid = iRow > 0 && fNew > 0; bool valid = iRow > 0 && fNew > 0;
if( i == m_FakeSegments.size() ) if( i == fakes.size() )
{ {
if( valid ) if( valid )
{ {
AddFakeSegment( FakeSegment(iRow, fNew) ); AddSegment( SEGMENT_FAKE, new FakeSegment(iRow, fNew) );
} }
} }
else else
{ {
if( valid ) if( valid )
{ {
m_FakeSegments[i].SetLength(fNew); static_cast<FakeSegment *>(fakes[i])->SetLength(fNew);
} }
else else
m_FakeSegments.erase( m_FakeSegments.begin()+i, m_FakeSegments.begin()+i+1 ); fakes.erase( fakes.begin()+i, fakes.begin()+i+1 );
} }
} }