fixes to confusion code to not break dizzy

This commit is contained in:
Mike Hawkins
2008-05-10 01:06:49 +00:00
parent 142b49c920
commit 76a61ddae4
3 changed files with 17 additions and 23 deletions
+13 -18
View File
@@ -404,11 +404,22 @@ float ArrowEffects::GetXOffset( const PlayerState* pPlayerState, float fMidiNote
return fXOffset; return fXOffset;
} }
float ArrowEffects::GetRotation( const PlayerState* pPlayerState, float fNoteBeat ) float ArrowEffects::GetRotation( const PlayerState* pPlayerState, float fNoteBeat, bool bIsHoldHead )
{ {
/* TODO:
* Find a way to make dizzy and confusion work together well. Currently, if both are on,
* dizzy is ignored otherwise the arrows will not line up properly with the receptor */
const float* fEffects = pPlayerState->m_PlayerOptions.GetCurrent().m_fEffects; const float* fEffects = pPlayerState->m_PlayerOptions.GetCurrent().m_fEffects;
// Confusion
if( fEffects[PlayerOptions::EFFECT_CONFUSION] != 0 )
{
float fConfRotation = ReceptorGetRotation( pPlayerState );
return fConfRotation;
}
// Dizzy // Dizzy
if( fEffects[PlayerOptions::EFFECT_DIZZY] != 0 && fEffects[PlayerOptions::EFFECT_CONFUSION] == 0 ) // Doesn't affect hold heads, unlike confusion
else if( fEffects[PlayerOptions::EFFECT_DIZZY] != 0 && !bIsHoldHead )
{ {
const float fSongBeat = GAMESTATE->m_fSongBeatVisible; const float fSongBeat = GAMESTATE->m_fSongBeatVisible;
float fDizzyRotation = fNoteBeat - fSongBeat; float fDizzyRotation = fNoteBeat - fSongBeat;
@@ -417,22 +428,6 @@ float ArrowEffects::GetRotation( const PlayerState* pPlayerState, float fNoteBea
fDizzyRotation *= 180/PI; fDizzyRotation *= 180/PI;
return fDizzyRotation; return fDizzyRotation;
} }
// Confusion
else if( fEffects[PlayerOptions::EFFECT_DIZZY] == 0 && fEffects[PlayerOptions::EFFECT_CONFUSION] != 0 )
{
float fConfRotation = ReceptorGetRotation( pPlayerState );
fConfRotation *= fEffects[PlayerOptions::EFFECT_DIZZY];
return fConfRotation;
}
// Dizzy + Confusion
if( fEffects[PlayerOptions::EFFECT_DIZZY] != 0 && fEffects[PlayerOptions::EFFECT_CONFUSION] != 0 )
{
float fRotation = ReceptorGetRotation( pPlayerState );
float fDizzy = fEffects[PlayerOptions::EFFECT_DIZZY];
float fConf = fEffects[PlayerOptions::EFFECT_CONFUSION];
fRotation *= (fDizzy + fConf );
return fRotation;
}
else else
return 0; return 0;
} }
+1 -1
View File
@@ -32,7 +32,7 @@ public:
// fRotation is Z rotation of an arrow. This will depend on the column of // fRotation is Z rotation of an arrow. This will depend on the column of
// the arrow and possibly the Arrow effect and the fYOffset (in the case of // the arrow and possibly the Arrow effect and the fYOffset (in the case of
// EFFECT_DIZZY). // EFFECT_DIZZY).
static float GetRotation( const PlayerState* pPlayerState, float fNoteBeat ); static float GetRotation( const PlayerState* pPlayerState, float fNoteBeat, bool bIsHoldHead );
static float ReceptorGetRotation( const PlayerState* pPlayerState ); static float ReceptorGetRotation( const PlayerState* pPlayerState );
+3 -4
View File
@@ -657,11 +657,10 @@ void NoteDisplay::DrawActor( const TapNote& tn, Actor* pActor, NotePart part, in
const RageColor diffuse = RageColor(fColorScale,fColorScale,fColorScale,fAlpha); const RageColor diffuse = RageColor(fColorScale,fColorScale,fColorScale,fAlpha);
const RageColor glow = RageColor(1,1,1,fGlow); const RageColor glow = RageColor(1,1,1,fGlow);
float fRotation = 0; float fRotation = 0;
if( tn.type != TapNote::hold_head )
{ fRotation = ArrowEffects::GetRotation( m_pPlayerState, fBeat, tn.type == tn.hold_head );
fRotation = ArrowEffects::GetRotation( m_pPlayerState, fBeat ); if( tn.type != tn.hold_head )
fColorScale *= ArrowEffects::GetBrightness( m_pPlayerState, fBeat ); fColorScale *= ArrowEffects::GetBrightness( m_pPlayerState, fBeat );
}
pActor->SetRotationZ( fRotation ); pActor->SetRotationZ( fRotation );
pActor->SetXY( fX, fY ); pActor->SetXY( fX, fY );