arrow visibility fix
This commit is contained in:
@@ -20,7 +20,10 @@ static float GetNoteFieldHeight( PlayerNumber pn )
|
|||||||
return SCREEN_HEIGHT + fabsf(GAMESTATE->m_CurrentPlayerOptions[pn].m_fPerspectiveTilt)*200;
|
return SCREEN_HEIGHT + fabsf(GAMESTATE->m_CurrentPlayerOptions[pn].m_fPerspectiveTilt)*200;
|
||||||
}
|
}
|
||||||
|
|
||||||
float ArrowGetYOffset( PlayerNumber pn, int iCol, float fNoteBeat )
|
/* For visibility testing: if iAbsolute is -1, then all random modifiers must return
|
||||||
|
* the minimal possible offset; if +1, they must return the maximum possible offset.
|
||||||
|
* When actually rendering, iAbsolute is 0. */
|
||||||
|
float ArrowGetYOffset( PlayerNumber pn, int iCol, float fNoteBeat, int iAbsolute )
|
||||||
{
|
{
|
||||||
float fYOffset = 0;
|
float fYOffset = 0;
|
||||||
|
|
||||||
@@ -83,14 +86,22 @@ float ArrowGetYOffset( PlayerNumber pn, int iCol, float fNoteBeat )
|
|||||||
fYOffset += fAccels[PlayerOptions::ACCEL_BOOMERANG] * (fYOffset * SCALE( fYOffset, 0.f, SCREEN_HEIGHT, 1.5f, 0.5f )- fYOffset);
|
fYOffset += fAccels[PlayerOptions::ACCEL_BOOMERANG] * (fYOffset * SCALE( fYOffset, 0.f, SCREEN_HEIGHT, 1.5f, 0.5f )- fYOffset);
|
||||||
|
|
||||||
float fScrollSpeed = GAMESTATE->m_CurrentPlayerOptions[pn].m_fScrollSpeed;
|
float fScrollSpeed = GAMESTATE->m_CurrentPlayerOptions[pn].m_fScrollSpeed;
|
||||||
if ( GAMESTATE->m_CurrentPlayerOptions[pn].m_fRandomSpeed > 1.0f )
|
if( GAMESTATE->m_CurrentPlayerOptions[pn].m_fRandomSpeed > 1.0f )
|
||||||
{
|
{
|
||||||
int seed = GAMESTATE->m_iRoundSeed + ( BeatToNoteRow( fNoteBeat ) << 8 ) + (iCol * 100);
|
int seed = GAMESTATE->m_iRoundSeed + ( BeatToNoteRow( fNoteBeat ) << 8 ) + (iCol * 100);
|
||||||
float soRandom = RandomFloat( seed );
|
float fRandom;
|
||||||
|
switch( iAbsolute )
|
||||||
|
{
|
||||||
|
case 0: fRandom = RandomFloat( seed ); break;
|
||||||
|
case -1: fRandom = 1.0f; break; /* highest scroll speed = lowest visibility */
|
||||||
|
case +1: fRandom = 0.0f; break;
|
||||||
|
default: FAIL_M( ssprintf("%i",iAbsolute) );
|
||||||
|
};
|
||||||
|
|
||||||
fScrollSpeed *=
|
fScrollSpeed *=
|
||||||
SCALE( soRandom,
|
SCALE( fRandom,
|
||||||
0.0f, 1.0f,
|
0.0f, 1.0f,
|
||||||
1.0f, GAMESTATE->m_CurrentPlayerOptions[pn].m_fRandomSpeed ); // min. scale shold be defined as a constatnt somewhere
|
1.0f, GAMESTATE->m_CurrentPlayerOptions[pn].m_fRandomSpeed ); // min. scale shold be defined as a constatnt somewhere
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
// fYOffset is a vertical position in pixels relative to the center.
|
// fYOffset is a vertical position in pixels relative to the center.
|
||||||
// (positive if has not yet been stepped on, negative if has already passed).
|
// (positive if has not yet been stepped on, negative if has already passed).
|
||||||
// The ArrowEffect and ScrollSpeed is applied in this stage.
|
// The ArrowEffect and ScrollSpeed is applied in this stage.
|
||||||
float ArrowGetYOffset( PlayerNumber pn, int iCol, float fNoteBeat );
|
float ArrowGetYOffset( PlayerNumber pn, int iCol, float fNoteBeat, int iAbsolute = 0 );
|
||||||
|
|
||||||
/* Actual display position, with reverse and post-reverse-effects factored in
|
/* Actual display position, with reverse and post-reverse-effects factored in
|
||||||
* (fYOffset -> YPos). */
|
* (fYOffset -> YPos). */
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ float FindFirstDisplayedBeat( PlayerNumber pn, int iFirstPixelToDraw )
|
|||||||
|
|
||||||
while( fFirstBeatToDraw < GAMESTATE->m_fSongBeat )
|
while( fFirstBeatToDraw < GAMESTATE->m_fSongBeat )
|
||||||
{
|
{
|
||||||
float fYOffset = ArrowGetYOffset(pn, 0, fFirstBeatToDraw);
|
float fYOffset = ArrowGetYOffset( pn, 0, fFirstBeatToDraw, -1 );
|
||||||
if( fYOffset < iFirstPixelToDraw ) // off screen
|
if( fYOffset < iFirstPixelToDraw ) // off screen
|
||||||
fFirstBeatToDraw += 0.1f; // move toward fSongBeat
|
fFirstBeatToDraw += 0.1f; // move toward fSongBeat
|
||||||
else // on screen
|
else // on screen
|
||||||
@@ -378,7 +378,7 @@ float FindLastDisplayedBeat( PlayerNumber pn, int iLastPixelToDraw )
|
|||||||
|
|
||||||
for( int i=0; i<NUM_ITERATIONS; i++ )
|
for( int i=0; i<NUM_ITERATIONS; i++ )
|
||||||
{
|
{
|
||||||
float fYOffset = ArrowGetYOffset( pn, 0, fLastBeatToDraw );
|
float fYOffset = ArrowGetYOffset( pn, 0, fLastBeatToDraw, +1 );
|
||||||
|
|
||||||
if( fYOffset > iLastPixelToDraw ) // off screen
|
if( fYOffset > iLastPixelToDraw ) // off screen
|
||||||
fLastBeatToDraw -= fSearchDistance;
|
fLastBeatToDraw -= fSearchDistance;
|
||||||
|
|||||||
Reference in New Issue
Block a user