improve hidden+sudden behavior

This commit is contained in:
Chris Danford
2004-02-29 08:59:12 +00:00
parent e74ea267f9
commit dbd09cd1a1
+52 -17
View File
@@ -234,10 +234,8 @@ float ArrowGetRotation( PlayerNumber pn, float fNoteBeat )
} }
const float fCenterLine = 160; // from fYOffset == 0 #define CENTER_LINE_Y 160 // from fYOffset == 0
const float fFadeDist = 100; #define FADE_DIST_Y 40
// Number of pixels visible when both sudden and hidden are on:
const float fFadeDeadZone = 10;
static float GetCenterLine( PlayerNumber pn ) static float GetCenterLine( PlayerNumber pn )
{ {
@@ -246,7 +244,46 @@ static float GetCenterLine( PlayerNumber pn )
/* Another mini hack: if EFFECT_MINI is on, then our center line is at eg. 320, /* Another mini hack: if EFFECT_MINI is on, then our center line is at eg. 320,
* not 160. */ * not 160. */
return fCenterLine / fZoom; return CENTER_LINE_Y / fZoom;
}
static float GetHiddenSudden( PlayerNumber pn )
{
const float* fAppearances = GAMESTATE->m_CurrentPlayerOptions[pn].m_fAppearances;
return fAppearances[PlayerOptions::APPEARANCE_HIDDEN] *
fAppearances[PlayerOptions::APPEARANCE_SUDDEN];
}
//
// -gray arrows-
//
// ...invisible...
// -hidden end line-
// -hidden start line-
// ...visible...
// -sudden end line-
// -sudden start line-
// ...invisible...
//
// TRICKY: We fudge hidden and sudden to be farther apart if they're both on.
static float GetHiddenEndLine( PlayerNumber pn )
{
return GetCenterLine( pn ) + FADE_DIST_Y * SCALE( GetHiddenSudden(pn), 0.f, 1.f, -0.0f, -1.25f );
}
static float GetHiddenStartLine( PlayerNumber pn )
{
return GetCenterLine( pn ) + FADE_DIST_Y * SCALE( GetHiddenSudden(pn), 0.f, 1.f, +1.0f, -0.25f );
}
static float GetSuddenEndLine( PlayerNumber pn )
{
return GetCenterLine( pn ) + FADE_DIST_Y * SCALE( GetHiddenSudden(pn), 0.f, 1.f, -1.0f, +0.25f );
}
static float GetSuddenStartLine( PlayerNumber pn )
{
return GetCenterLine( pn ) + FADE_DIST_Y * SCALE( GetHiddenSudden(pn), 0.f, 1.f, +0.0f, +1.25f );
} }
// used by ArrowGetAlpha and ArrowGetGlow below // used by ArrowGetAlpha and ArrowGetGlow below
@@ -265,22 +302,20 @@ static float ArrowGetPercentVisible( PlayerNumber pn, int iCol, float fYOffset,
float fVisibleAdjust = 0; float fVisibleAdjust = 0;
if( fAppearances[PlayerOptions::APPEARANCE_HIDDEN] > 0 ) if( fAppearances[PlayerOptions::APPEARANCE_HIDDEN] > 0 )
fVisibleAdjust += fAppearances[PlayerOptions::APPEARANCE_HIDDEN] * SCALE( fDistFromCenterLine, 0, fFadeDist, -1, 0 );
if( fAppearances[PlayerOptions::APPEARANCE_SUDDEN] > 0 )
fVisibleAdjust += fAppearances[PlayerOptions::APPEARANCE_SUDDEN] * SCALE( fDistFromCenterLine, 0, -fFadeDist, -1, 0 );
const float HiddenSudden =
fAppearances[PlayerOptions::APPEARANCE_HIDDEN] *
fAppearances[PlayerOptions::APPEARANCE_SUDDEN];
if( HiddenSudden > 0 )
{ {
/* Fading arrows in and out in such a small space looks bad. Simply add float fHiddenVisibleAdjust = SCALE( fYPos, GetHiddenStartLine(pn), GetHiddenEndLine(pn), 0, -1 );
* 2, to counteract -1 for hidden and -1 for sudden. */ CLAMP( fHiddenVisibleAdjust, -1, 0 );
if( fabsf(fDistFromCenterLine) < fFadeDeadZone ) fVisibleAdjust += fAppearances[PlayerOptions::APPEARANCE_HIDDEN] * fHiddenVisibleAdjust;
fVisibleAdjust += 2 * HiddenSudden; }
if( fAppearances[PlayerOptions::APPEARANCE_SUDDEN] > 0 )
{
float fSuddenVisibleAdjust = SCALE( fYPos, GetSuddenStartLine(pn), GetSuddenEndLine(pn), -1, 0 );
CLAMP( fSuddenVisibleAdjust, -1, 0 );
fVisibleAdjust += fAppearances[PlayerOptions::APPEARANCE_SUDDEN] * fSuddenVisibleAdjust;
} }
if( fAppearances[PlayerOptions::APPEARANCE_STEALTH] > 0 ) if( fAppearances[PlayerOptions::APPEARANCE_STEALTH] > 0 )
fVisibleAdjust += fAppearances[PlayerOptions::APPEARANCE_STEALTH] * -1; fVisibleAdjust *= (1 - fAppearances[PlayerOptions::APPEARANCE_STEALTH]);
if( fAppearances[PlayerOptions::APPEARANCE_BLINK] > 0 ) if( fAppearances[PlayerOptions::APPEARANCE_BLINK] > 0 )
{ {
float f = sinf(RageTimer::GetTimeSinceStart()*10); float f = sinf(RageTimer::GetTimeSinceStart()*10);