[timing] All that's left is the big one.

Hopefully.

...right, the JSON stuff. GAH.
This commit is contained in:
Jason Felds
2011-07-14 14:33:07 -04:00
parent 000421c18b
commit 88fca505a8
+51 -41
View File
@@ -849,27 +849,26 @@ void NoteField::DrawPrimitives()
} }
const TimingData *pTiming = GetDisplayedTiming(m_pPlayerState); const TimingData *pTiming = GetDisplayedTiming(m_pPlayerState);
const vector<TimingSegment *> *segs = pTiming->allTimingSegments;
unsigned i = 0;
// Draw beat bars // Draw beat bars
if( ( GAMESTATE->IsEditing() || SHOW_BEAT_BARS ) && pTiming != NULL ) if( ( GAMESTATE->IsEditing() || SHOW_BEAT_BARS ) && pTiming != NULL )
{ {
const TimingData &timing = *pTiming; const vector<TimingSegment *> &tSigs = segs[SEGMENT_TIME_SIG];
const vector<TimeSignatureSegment> &vTimeSignatureSegments = timing.m_vTimeSignatureSegments;
int iMeasureIndex = 0; int iMeasureIndex = 0;
FOREACH_CONST( TimeSignatureSegment, vTimeSignatureSegments, iter ) for (i = 0; i < tSigs.size(); i++)
{ {
vector<TimeSignatureSegment>::const_iterator next = iter; TimeSignatureSegment *ts = static_cast<TimeSignatureSegment *>(tSigs[i]);
next++; int iSegmentEndRow = (i + 1 == tSigs.size()) ? iLastRowToDraw : tSigs[i+1]->GetRow();
int iSegmentEndRow = (next == vTimeSignatureSegments.end()) ? iLastRowToDraw : next->GetRow();
// beat bars every 16th note // beat bars every 16th note
int iDrawBeatBarsEveryRows = BeatToNoteRow( ((float)iter->GetDen()) / 4 ) / 4; int iDrawBeatBarsEveryRows = BeatToNoteRow( ((float)ts->GetDen()) / 4 ) / 4;
// In 4/4, every 16th beat bar is a measure // In 4/4, every 16th beat bar is a measure
int iMeasureBarFrequency = iter->GetNum() * 4; int iMeasureBarFrequency = ts->GetNum() * 4;
int iBeatBarsDrawn = 0; int iBeatBarsDrawn = 0;
for( int i=iter->GetRow(); i < iSegmentEndRow; i += iDrawBeatBarsEveryRows ) for( int j=ts->GetRow(); j < iSegmentEndRow; j += iDrawBeatBarsEveryRows )
{ {
bool bMeasureBar = iBeatBarsDrawn % iMeasureBarFrequency == 0; bool bMeasureBar = iBeatBarsDrawn % iMeasureBarFrequency == 0;
BeatBarType type = quarter_beat; BeatBarType type = quarter_beat;
@@ -879,7 +878,7 @@ void NoteField::DrawPrimitives()
type = beat; type = beat;
else if( iBeatBarsDrawn % 2 == 0 ) else if( iBeatBarsDrawn % 2 == 0 )
type = half_beat; type = half_beat;
float fBeat = NoteRowToBeat(i); float fBeat = NoteRowToBeat(j);
if( IS_ON_SCREEN(fBeat) ) if( IS_ON_SCREEN(fBeat) )
{ {
@@ -902,8 +901,9 @@ void NoteField::DrawPrimitives()
// Scroll text // Scroll text
if( GAMESTATE->m_bIsUsingStepTiming ) if( GAMESTATE->m_bIsUsingStepTiming )
{ {
FOREACH_CONST( ScrollSegment, timing.m_ScrollSegments, seg ) for (i = 0; i < segs[SEGMENT_SCROLL].size(); i++)
{ {
ScrollSegment *seg = static_cast<ScrollSegment *>(segs[SEGMENT_SCROLL][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -914,8 +914,9 @@ void NoteField::DrawPrimitives()
} }
// BPM text // BPM text
FOREACH_CONST( BPMSegment, timing.m_BPMSegments, seg ) for (i = 0; i < segs[SEGMENT_BPM].size(); i++)
{ {
BPMSegment *seg = static_cast<BPMSegment *>(segs[SEGMENT_BPM][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -925,8 +926,9 @@ void NoteField::DrawPrimitives()
} }
// Freeze text // Freeze text
FOREACH_CONST( StopSegment, timing.m_StopSegments, seg ) for (i = 0; i < segs[SEGMENT_STOP_DELAY].size(); i++)
{ {
StopSegment *seg = static_cast<StopSegment *>(segs[SEGMENT_STOP_DELAY][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -936,8 +938,9 @@ void NoteField::DrawPrimitives()
} }
// Warp text // Warp text
FOREACH_CONST( WarpSegment, timing.m_WarpSegments, seg ) for (i = 0; i < segs[SEGMENT_WARP].size(); i++)
{ {
WarpSegment *seg = static_cast<WarpSegment *>(segs[SEGMENT_WARP][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -948,8 +951,9 @@ void NoteField::DrawPrimitives()
// Time Signature text // Time Signature text
FOREACH_CONST( TimeSignatureSegment, timing.m_vTimeSignatureSegments, seg ) for (i = 0; i < segs[SEGMENT_TIME_SIG].size(); i++)
{ {
TimeSignatureSegment *seg = static_cast<TimeSignatureSegment *>(segs[SEGMENT_TIME_SIG][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -961,8 +965,9 @@ void NoteField::DrawPrimitives()
if( GAMESTATE->m_bIsUsingStepTiming ) if( GAMESTATE->m_bIsUsingStepTiming )
{ {
// Tickcount text // Tickcount text
FOREACH_CONST( TickcountSegment, timing.m_TickcountSegments, seg ) for (i = 0; i < segs[SEGMENT_TICKCOUNT].size(); i++)
{ {
TickcountSegment *seg = static_cast<TickcountSegment *>(segs[SEGMENT_TICKCOUNT][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -975,8 +980,9 @@ void NoteField::DrawPrimitives()
if( GAMESTATE->m_bIsUsingStepTiming ) if( GAMESTATE->m_bIsUsingStepTiming )
{ {
// Combo text // Combo text
FOREACH_CONST( ComboSegment, timing.m_ComboSegments, seg ) for (i = 0; i < segs[SEGMENT_COMBO].size(); i++)
{ {
ComboSegment *seg = static_cast<ComboSegment *>(segs[SEGMENT_COMBO][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -987,8 +993,9 @@ void NoteField::DrawPrimitives()
} }
// Label text // Label text
FOREACH_CONST( LabelSegment, timing.m_LabelSegments, seg ) for (i = 0; i < segs[SEGMENT_LABEL].size(); i++)
{ {
LabelSegment *seg = static_cast<LabelSegment *>(segs[SEGMENT_LABEL][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -999,8 +1006,10 @@ void NoteField::DrawPrimitives()
if( GAMESTATE->m_bIsUsingStepTiming ) if( GAMESTATE->m_bIsUsingStepTiming )
{ {
FOREACH_CONST( SpeedSegment, timing.m_SpeedSegments, seg ) // Speed text
for (i = 0; i < segs[SEGMENT_SPEED].size(); i++)
{ {
SpeedSegment *seg = static_cast<SpeedSegment *>(segs[SEGMENT_SPEED][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -1011,11 +1020,12 @@ void NoteField::DrawPrimitives()
} }
} }
// Speed text // Fake text
if( GAMESTATE->m_bIsUsingStepTiming ) if( GAMESTATE->m_bIsUsingStepTiming )
{ {
FOREACH_CONST( FakeSegment, timing.m_FakeSegments, seg ) for (i = 0; i < segs[SEGMENT_FAKE].size(); i++)
{ {
FakeSegment *seg = static_cast<FakeSegment *>(segs[SEGMENT_FAKE][i]);
if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw ) if( seg->GetRow() >= iFirstRowToDraw && seg->GetRow() <= iLastRowToDraw )
{ {
float fBeat = seg->GetBeat(); float fBeat = seg->GetBeat();
@@ -1074,55 +1084,55 @@ void NoteField::DrawPrimitives()
case EditMode_Full: case EditMode_Full:
{ {
vector<BackgroundChange>::iterator iter[NUM_BackgroundLayer]; vector<BackgroundChange>::iterator iter[NUM_BackgroundLayer];
FOREACH_BackgroundLayer( i ) FOREACH_BackgroundLayer( j )
iter[i] = GAMESTATE->m_pCurSong->GetBackgroundChanges(i).begin(); iter[j] = GAMESTATE->m_pCurSong->GetBackgroundChanges(j).begin();
while( 1 ) while( 1 )
{ {
float fLowestBeat = FLT_MAX; float fLowestBeat = FLT_MAX;
vector<BackgroundLayer> viLowestIndex; vector<BackgroundLayer> viLowestIndex;
FOREACH_BackgroundLayer( i ) FOREACH_BackgroundLayer( j )
{ {
if( iter[i] == GAMESTATE->m_pCurSong->GetBackgroundChanges(i).end() ) if( iter[j] == GAMESTATE->m_pCurSong->GetBackgroundChanges(j).end() )
continue; continue;
float fBeat = iter[i]->m_fStartBeat; float fBeat = iter[j]->m_fStartBeat;
if( fBeat < fLowestBeat ) if( fBeat < fLowestBeat )
{ {
fLowestBeat = fBeat; fLowestBeat = fBeat;
viLowestIndex.clear(); viLowestIndex.clear();
viLowestIndex.push_back( i ); viLowestIndex.push_back( j );
} }
else if( fBeat == fLowestBeat ) else if( fBeat == fLowestBeat )
{ {
viLowestIndex.push_back( i ); viLowestIndex.push_back( j );
} }
} }
if( viLowestIndex.empty() ) if( viLowestIndex.empty() )
{ {
FOREACH_BackgroundLayer( i ) FOREACH_BackgroundLayer( j )
ASSERT( iter[i] == GAMESTATE->m_pCurSong->GetBackgroundChanges(i).end() ); ASSERT( iter[j] == GAMESTATE->m_pCurSong->GetBackgroundChanges(j).end() );
break; break;
} }
if( IS_ON_SCREEN(fLowestBeat) ) if( IS_ON_SCREEN(fLowestBeat) )
{ {
vector<RString> vsBGChanges; vector<RString> vsBGChanges;
FOREACH_CONST( BackgroundLayer, viLowestIndex, i ) FOREACH_CONST( BackgroundLayer, viLowestIndex, bl )
{ {
ASSERT( iter[*i] != GAMESTATE->m_pCurSong->GetBackgroundChanges(*i).end() ); ASSERT( iter[*bl] != GAMESTATE->m_pCurSong->GetBackgroundChanges(*bl).end() );
const BackgroundChange& change = *iter[*i]; const BackgroundChange& change = *iter[*bl];
RString s = change.GetTextDescription(); RString s = change.GetTextDescription();
if( *i!=0 ) if( *bl!=0 )
s = ssprintf("%d: ",*i) + s; s = ssprintf("%d: ",*bl) + s;
vsBGChanges.push_back( s ); vsBGChanges.push_back( s );
} }
DrawBGChangeText( fLowestBeat, join("\n",vsBGChanges) ); DrawBGChangeText( fLowestBeat, join("\n",vsBGChanges) );
} }
FOREACH_CONST( BackgroundLayer, viLowestIndex, i ) FOREACH_CONST( BackgroundLayer, viLowestIndex, bl )
iter[*i]++; iter[*bl]++;
} }
} }
break; break;
@@ -1166,9 +1176,9 @@ void NoteField::DrawPrimitives()
ssprintf("NumTracks %d = ColsPerPlayer %d",m_pNoteData->GetNumTracks(), ssprintf("NumTracks %d = ColsPerPlayer %d",m_pNoteData->GetNumTracks(),
GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer)); GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer));
for( int i=0; i<m_pNoteData->GetNumTracks(); i++ ) // for each arrow column for( int j=0; j<m_pNoteData->GetNumTracks(); j++ ) // for each arrow column
{ {
const int c = pStyle->m_iColumnDrawOrder[i]; const int c = pStyle->m_iColumnDrawOrder[j];
bool bAnyUpcomingInThisCol = false; bool bAnyUpcomingInThisCol = false;
@@ -1179,7 +1189,7 @@ void NoteField::DrawPrimitives()
for( ; begin != end; ++begin ) for( ; begin != end; ++begin )
{ {
const TapNote &tn = begin->second; //m_pNoteData->GetTapNote(c, i); const TapNote &tn = begin->second; //m_pNoteData->GetTapNote(c, j);
if( tn.type != TapNote::hold_head ) if( tn.type != TapNote::hold_head )
continue; // skip continue; // skip