fix popping; note position can depend on the column
This commit is contained in:
@@ -429,12 +429,12 @@ float FindLastDisplayedBeat( const PlayerState* pPlayerState, int iLastPixelToDr
|
|||||||
return fLastBeatToDraw;
|
return fLastBeatToDraw;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NoteField::IsOnScreen( float fBeat, int iFirstPixelToDraw, int iLastPixelToDraw ) const
|
bool NoteField::IsOnScreen( float fBeat, int iCol, int iFirstPixelToDraw, int iLastPixelToDraw ) const
|
||||||
{
|
{
|
||||||
// TRICKY: If boomerang is on, then ones in the range
|
// TRICKY: If boomerang is on, then ones in the range
|
||||||
// [iFirstIndexToDraw,iLastIndexToDraw] aren't necessarily visible.
|
// [iFirstIndexToDraw,iLastIndexToDraw] aren't necessarily visible.
|
||||||
// Test to see if this beat is visible before drawing.
|
// Test to see if this beat is visible before drawing.
|
||||||
float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, 0, fBeat );
|
float fYOffset = ArrowEffects::GetYOffset( m_pPlayerState, iCol, fBeat );
|
||||||
if( fYOffset > iLastPixelToDraw ) // off screen
|
if( fYOffset > iLastPixelToDraw ) // off screen
|
||||||
return false;
|
return false;
|
||||||
if( fYOffset < iFirstPixelToDraw ) // off screen
|
if( fYOffset < iFirstPixelToDraw ) // off screen
|
||||||
@@ -489,7 +489,7 @@ void NoteField::DrawPrimitives()
|
|||||||
// LOG->Trace( "start = %f.1, end = %f.1", fFirstBeatToDraw-fSongBeat, fLastBeatToDraw-fSongBeat );
|
// LOG->Trace( "start = %f.1, end = %f.1", fFirstBeatToDraw-fSongBeat, fLastBeatToDraw-fSongBeat );
|
||||||
// LOG->Trace( "Drawing elements %d through %d", iFirstIndexToDraw, iLastIndexToDraw );
|
// LOG->Trace( "Drawing elements %d through %d", iFirstIndexToDraw, iLastIndexToDraw );
|
||||||
|
|
||||||
#define IS_ON_SCREEN( fBeat ) IsOnScreen( fBeat, iFirstPixelToDraw, iLastPixelToDraw )
|
#define IS_ON_SCREEN( fBeat ) IsOnScreen( fBeat, 0, iFirstPixelToDraw, iLastPixelToDraw )
|
||||||
|
|
||||||
if( GAMESTATE->IsEditing() )
|
if( GAMESTATE->IsEditing() )
|
||||||
{
|
{
|
||||||
@@ -749,7 +749,7 @@ void NoteField::DrawPrimitives()
|
|||||||
// TRICKY: If boomerang is on, then all notes in the range
|
// TRICKY: If boomerang is on, then all notes in the range
|
||||||
// [iFirstIndexToDraw,iLastIndexToDraw] aren't necessarily visible.
|
// [iFirstIndexToDraw,iLastIndexToDraw] aren't necessarily visible.
|
||||||
// Test every note to make sure it's on screen before drawing
|
// Test every note to make sure it's on screen before drawing
|
||||||
if( !IS_ON_SCREEN(NoteRowToBeat(i)) )
|
if( !IsOnScreen( NoteRowToBeat(i), c, iFirstPixelToDraw, iLastPixelToDraw ) )
|
||||||
continue; // skip
|
continue; // skip
|
||||||
|
|
||||||
ASSERT_M( NoteRowToBeat(i) > -2000, ssprintf("%i %i %i, %f %f", i, iLastIndexToDraw, iFirstIndexToDraw, GAMESTATE->m_fSongBeat, GAMESTATE->m_fMusicSeconds) );
|
ASSERT_M( NoteRowToBeat(i) > -2000, ssprintf("%i %i %i, %f %f", i, iLastIndexToDraw, iFirstIndexToDraw, GAMESTATE->m_fSongBeat, GAMESTATE->m_fMusicSeconds) );
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ protected:
|
|||||||
void CacheNoteSkin( const RString &sNoteSkin );
|
void CacheNoteSkin( const RString &sNoteSkin );
|
||||||
void UncacheNoteSkin( const RString &sNoteSkin );
|
void UncacheNoteSkin( const RString &sNoteSkin );
|
||||||
|
|
||||||
bool IsOnScreen( float fBeat, int iFirstPixelToDraw, int iLastPixelToDraw ) const;
|
bool IsOnScreen( float fBeat, int iCol, int iFirstPixelToDraw, int iLastPixelToDraw ) const;
|
||||||
|
|
||||||
void DrawBeatBar( const float fBeat );
|
void DrawBeatBar( const float fBeat );
|
||||||
void DrawMarkerBar( int fBeat );
|
void DrawMarkerBar( int fBeat );
|
||||||
|
|||||||
Reference in New Issue
Block a user