add BEAT
This commit is contained in:
@@ -111,6 +111,50 @@ float ArrowGetXPos( PlayerNumber pn, int iColNum, float fYPos )
|
||||
fPixelOffsetFromCenter += fDistance * fEffects[PlayerOptions::EFFECT_FLIP];
|
||||
}
|
||||
|
||||
if( fEffects[PlayerOptions::EFFECT_BEAT] > 0 )
|
||||
do {
|
||||
float fAccelTime = 0.2f, fTotalTime = 0.5f;
|
||||
|
||||
/* If the song is really fast, slow down the rate, but speed up the
|
||||
* acceleration to compensate or it'll look weird. */
|
||||
const float fBPM = GAMESTATE->m_fCurBPS * 60;
|
||||
const float fDiv = max(1.0f, truncf( fBPM / 150.0f ));
|
||||
fAccelTime /= fDiv;
|
||||
fTotalTime /= fDiv;
|
||||
|
||||
float fBeat = GAMESTATE->m_fSongBeat + fAccelTime;
|
||||
fBeat /= fDiv;
|
||||
|
||||
const bool bEvenBeat = ( int(fBeat) % 2 ) != 0;
|
||||
|
||||
/* -100.2 -> -0.2 -> 0.2 */
|
||||
if( fBeat < 0 )
|
||||
break;
|
||||
|
||||
fBeat -= truncf( fBeat );
|
||||
fBeat += 1;
|
||||
fBeat -= truncf( fBeat );
|
||||
|
||||
if( fBeat >= fTotalTime )
|
||||
break;
|
||||
|
||||
float fAmount;
|
||||
if( fBeat < fAccelTime )
|
||||
{
|
||||
fAmount = SCALE( fBeat, 0.0f, fAccelTime, 0.0f, 1.0f);
|
||||
fAmount *= fAmount;
|
||||
} else /* fBeat < fTotalTime */ {
|
||||
fAmount = SCALE( fBeat, fAccelTime, fTotalTime, 1.0f, 0.0f);
|
||||
fAmount = 1 - (1-fAmount) * (1-fAmount);
|
||||
}
|
||||
|
||||
if( bEvenBeat )
|
||||
fAmount *= -1;
|
||||
|
||||
const float fShift = 20.0f*fAmount*sinf( fYPos / 15.0f + PI/2.0f );
|
||||
fPixelOffsetFromCenter += fEffects[PlayerOptions::EFFECT_BEAT] * fShift;
|
||||
} while(0);
|
||||
|
||||
return fPixelOffsetFromCenter;
|
||||
}
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ CString PlayerOptions::GetString()
|
||||
if( m_fEffects[EFFECT_FLIP]==1 ) sReturn += "Flip, ";
|
||||
if( m_fEffects[EFFECT_TORNADO]==1 ) sReturn += "Tornado, ";
|
||||
if( m_fEffects[EFFECT_BUMPY]==1 ) sReturn += "Bumpy, ";
|
||||
if( m_fEffects[EFFECT_BEAT]==1 ) sReturn += "Beat, ";
|
||||
|
||||
if( m_fAppearances[APPEARANCE_HIDDEN]==1 ) sReturn += "Hidden, ";
|
||||
if( m_fAppearances[APPEARANCE_SUDDEN]==1 ) sReturn += "Sudden, ";
|
||||
@@ -186,6 +187,7 @@ void PlayerOptions::FromString( CString sOptions )
|
||||
else if( sBit == "flip" ) m_fEffects[EFFECT_FLIP] = 1;
|
||||
else if( sBit == "tornado" ) m_fEffects[EFFECT_TORNADO] = 1;
|
||||
else if( sBit == "bumpy" ) m_fEffects[EFFECT_BUMPY] = 1;
|
||||
else if( sBit == "beat" ) m_fEffects[EFFECT_BEAT] = 1;
|
||||
else if( sBit == "hidden" ) m_fAppearances[APPEARANCE_HIDDEN] = 1;
|
||||
else if( sBit == "sudden" ) m_fAppearances[APPEARANCE_SUDDEN] = 1;
|
||||
else if( sBit == "stealth" ) m_fAppearances[APPEARANCE_STEALTH] = 1;
|
||||
|
||||
@@ -36,6 +36,7 @@ struct PlayerOptions
|
||||
EFFECT_FLIP,
|
||||
EFFECT_TORNADO,
|
||||
EFFECT_BUMPY,
|
||||
EFFECT_BEAT,
|
||||
NUM_EFFECTS
|
||||
};
|
||||
enum Appearance {
|
||||
|
||||
Reference in New Issue
Block a user