Tweak mini: instead of zooming out the whole field, zoom out each individual

arrow, and push the columns together a bit.  It looks the same, except that it
doesn't cause arrows to be closer together, like increasing the scroll speed to
match.  This keeps mini from causing many more notes to be drawn.  In general,
effects should try to avoid needing to increase fDrawScale.
This commit is contained in:
Glenn Maynard
2005-10-22 21:54:08 +00:00
parent 039aea4d01
commit 4410080639
4 changed files with 13 additions and 28 deletions
+9 -16
View File
@@ -146,16 +146,8 @@ float ArrowEffects::GetYOffset( const PlayerState* pPlayerState, int iCol, float
void ArrowGetReverseShiftAndScale( const PlayerState* pPlayerState, int iCol, float fYReverseOffsetPixels, float &fShiftOut, float &fScaleOut ) void ArrowGetReverseShiftAndScale( const PlayerState* pPlayerState, int iCol, float fYReverseOffsetPixels, float &fShiftOut, float &fScaleOut )
{ {
/* XXX: Hack: we need to scale the reverse shift by the zoom. */
float fMiniPercent = pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI];
float fZoom = 1 - fMiniPercent*0.5f;
// don't divide by 0
if( fabsf(fZoom) < 0.01 )
fZoom = 0.01f;
float fPercentReverse = pPlayerState->m_CurrentPlayerOptions.GetReversePercentForColumn(iCol); float fPercentReverse = pPlayerState->m_CurrentPlayerOptions.GetReversePercentForColumn(iCol);
fShiftOut = SCALE( fPercentReverse, 0.f, 1.f, -fYReverseOffsetPixels/fZoom/2, fYReverseOffsetPixels/fZoom/2 ); fShiftOut = SCALE( fPercentReverse, 0.f, 1.f, -fYReverseOffsetPixels/2, fYReverseOffsetPixels/2 );
float fPercentCentered = pPlayerState->m_CurrentPlayerOptions.m_fScrolls[PlayerOptions::SCROLL_CENTERED]; float fPercentCentered = pPlayerState->m_CurrentPlayerOptions.m_fScrolls[PlayerOptions::SCROLL_CENTERED];
fShiftOut = SCALE( fPercentCentered, 0.f, 1.f, fShiftOut, 0.5f ); fShiftOut = SCALE( fPercentCentered, 0.f, 1.f, fShiftOut, 0.5f );
@@ -367,11 +359,7 @@ float ArrowEffects::GetRotation( const PlayerState* pPlayerState, float fNoteBea
static float GetCenterLine( const PlayerState* pPlayerState ) static float GetCenterLine( const PlayerState* pPlayerState )
{ {
/* Another mini hack: if EFFECT_MINI is on, then our center line is at eg. 320, return CENTER_LINE_Y;
* not 160. */
const float fMiniPercent = pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI];
const float fZoom = 1 - fMiniPercent*0.5f;
return CENTER_LINE_Y / fZoom;
} }
static float GetHiddenSudden( const PlayerState* pPlayerState ) static float GetHiddenSudden( const PlayerState* pPlayerState )
@@ -524,11 +512,16 @@ bool ArrowEffects::NeedZBuffer( const PlayerState* pPlayerState )
float ArrowEffects::GetZoom( const PlayerState* pPlayerState ) float ArrowEffects::GetZoom( const PlayerState* pPlayerState )
{ {
float fZoom = 1.0f;
// FIXME: Move the zoom values into Style // FIXME: Move the zoom values into Style
if( GAMESTATE->m_pCurStyle->m_bNeedsZoomOutWith2Players && if( GAMESTATE->m_pCurStyle->m_bNeedsZoomOutWith2Players &&
(GAMESTATE->GetNumSidesJoined()==2 || GAMESTATE->AnyPlayersAreCpu()) ) (GAMESTATE->GetNumSidesJoined()==2 || GAMESTATE->AnyPlayersAreCpu()) )
return 0.6f; fZoom *= 0.6f;
return 1.0f;
float fMiniPercent = pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI];
fZoom *= SCALE( fMiniPercent, 0, 1, 1, 0.5f );
return fZoom;
} }
/* /*
-1
View File
@@ -479,7 +479,6 @@ void NoteField::DrawPrimitives()
float fDrawScale = 1; float fDrawScale = 1;
fDrawScale *= 1 + 0.5f * fabsf( current_po.m_fPerspectiveTilt ); fDrawScale *= 1 + 0.5f * fabsf( current_po.m_fPerspectiveTilt );
fDrawScale *= 1 + fabsf( current_po.m_fEffects[PlayerOptions::EFFECT_MINI] );
iFirstPixelToDraw = (int)(iFirstPixelToDraw * fDrawScale); iFirstPixelToDraw = (int)(iFirstPixelToDraw * fDrawScale);
iLastPixelToDraw = (int)(iLastPixelToDraw * fDrawScale); iLastPixelToDraw = (int)(iLastPixelToDraw * fDrawScale);
+4
View File
@@ -18,6 +18,10 @@ void NoteFieldMode::BeginDrawTrack( const PlayerState* pPlayerState, int iTrack
const Style *s = GAMESTATE->GetCurrentStyle(); const Style *s = GAMESTATE->GetCurrentStyle();
// TODO: Remove indexing by PlayerNumber. // TODO: Remove indexing by PlayerNumber.
float fPixelXOffsetFromCenter = s->m_ColumnInfo[pPlayerState->m_PlayerNumber][iTrack].fXOffset; float fPixelXOffsetFromCenter = s->m_ColumnInfo[pPlayerState->m_PlayerNumber][iTrack].fXOffset;
const float* fEffects = pPlayerState->m_CurrentPlayerOptions.m_fEffects;
fPixelXOffsetFromCenter *= SCALE( fEffects[PlayerOptions::EFFECT_MINI], 0, 1, 1, 0.5f );
DISPLAY->Translate( fPixelXOffsetFromCenter, 0, 0 ); DISPLAY->Translate( fPixelXOffsetFromCenter, 0, 0 );
} }
-11
View File
@@ -496,10 +496,7 @@ void Player::Update( float fDeltaTime )
float fMiniPercent = m_pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI]; float fMiniPercent = m_pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI];
float fNoteFieldZoom = 1 - fMiniPercent*0.5f;
float fJudgmentZoom = 1 - fMiniPercent*0.25f; float fJudgmentZoom = 1 - fMiniPercent*0.25f;
if( m_pNoteField )
m_pNoteField->SetZoom( fNoteFieldZoom );
if( m_pJudgment ) if( m_pJudgment )
m_pJudgment->SetZoom( m_pJudgment->GetZoom() * fJudgmentZoom ); m_pJudgment->SetZoom( m_pJudgment->GetZoom() * fJudgmentZoom );
if( m_sprJudgmentFrame.IsLoaded() ) if( m_sprJudgmentFrame.IsLoaded() )
@@ -809,13 +806,6 @@ void Player::DrawPrimitives()
float fTiltDegrees = SCALE(fTilt,-1.f,+1.f,+30,-30) * (bReverse?-1:1); float fTiltDegrees = SCALE(fTilt,-1.f,+1.f,+30,-30) * (bReverse?-1:1);
float fZoom = SCALE( m_pPlayerState->m_CurrentPlayerOptions.m_fEffects[PlayerOptions::EFFECT_MINI], 0.f, 1.f, 1.f, 0.5f );
if( fTilt > 0 )
fZoom *= SCALE( fTilt, 0.f, 1.f, 1.f, 0.9f );
else
fZoom *= SCALE( fTilt, 0.f, -1.f, 1.f, 0.9f );
float fYOffset; float fYOffset;
if( fTilt > 0 ) if( fTilt > 0 )
fYOffset = SCALE( fTilt, 0.f, 1.f, 0.f, -45.f ) * (bReverse?-1:1); fYOffset = SCALE( fTilt, 0.f, 1.f, 0.f, -45.f ) * (bReverse?-1:1);
@@ -823,7 +813,6 @@ void Player::DrawPrimitives()
fYOffset = SCALE( fTilt, 0.f, -1.f, 0.f, -20.f ) * (bReverse?-1:1); fYOffset = SCALE( fTilt, 0.f, -1.f, 0.f, -20.f ) * (bReverse?-1:1);
m_pNoteField->SetY( fOriginalY + fYOffset ); m_pNoteField->SetY( fOriginalY + fYOffset );
m_pNoteField->SetZoom( fZoom );
m_pNoteField->SetRotationX( fTiltDegrees ); m_pNoteField->SetRotationX( fTiltDegrees );
m_pNoteField->Draw(); m_pNoteField->Draw();