From b26768eafe406c4af63c90253f379aba5960ef73 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Tue, 12 Apr 2005 12:39:39 +0000 Subject: [PATCH] fix ActorScroller draws a longer distance than it used to. Clean this up later. --- stepmania/src/ActorScroller.cpp | 43 ++++++++++++++++++++++----------- stepmania/src/ActorScroller.h | 1 + 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/stepmania/src/ActorScroller.cpp b/stepmania/src/ActorScroller.cpp index 034ed501fc..a1b192a276 100644 --- a/stepmania/src/ActorScroller.cpp +++ b/stepmania/src/ActorScroller.cpp @@ -33,17 +33,17 @@ ActorScroller::ActorScroller() m_bLoop = false; m_fPauseCountdownSeconds = 0; + m_bUseMask = false; m_fMaskWidth = 1; m_fMaskHeight = 1; + m_quadMask.SetBlendMode( BLEND_NO_EFFECT ); // don't change color values + m_quadMask.SetUseZBuffer( true ); // we want to write to the Zbuffer + m_quadMask.SetHidden( true ); m_vRotationDegrees = RageVector3(0,0,0); m_vTranslateTerm0 = RageVector3(0,0,0); m_vTranslateTerm1 = RageVector3(0,0,0); m_vTranslateTerm2 = RageVector3(0,0,0); - - m_quadMask.SetBlendMode( BLEND_NO_EFFECT ); // don't change color values - m_quadMask.SetUseZBuffer( true ); // we want to write to the Zbuffer - m_quadMask.SetHidden( true ); } void ActorScroller::Load( @@ -90,6 +90,7 @@ void ActorScroller::Load2( m_fDestinationItem = (float)(m_SubActors.size()+1); m_fPauseCountdownSeconds = 0; + m_bUseMask = true; RectF rectBarSize( -m_fMaskWidth/2, -m_fMaskHeight/2, @@ -234,19 +235,33 @@ void ActorScroller::DrawPrimitives() // write to z buffer so that top and bottom are clipped float fPositionFullyOnScreenTop = -(m_fNumItemsToDraw-1)/2.f; float fPositionFullyOnScreenBottom = (m_fNumItemsToDraw-1)/2.f; - float fPositionCompletelyOffScreenTop = fPositionFullyOnScreenTop - 1; - float fPositionCompletelyOffScreenBottom = fPositionFullyOnScreenBottom + 1; + float fPositionFullyOffScreenTop = fPositionFullyOnScreenTop - 1; + float fPositionFullyOffScreenBottom = fPositionFullyOnScreenBottom + 1; + float fPositionOnEdgeOfScreenTop = -(m_fNumItemsToDraw)/2.f; + float fPositionOnEdgeOfScreenBottom = (m_fNumItemsToDraw)/2.f; + + float fFirstItemToDraw = 0; + float fLastItemToDraw = 0; - PUSH_AND_TRANSFORM_FOR_ITEM( fPositionCompletelyOffScreenTop ) - m_quadMask.Draw(); - DISPLAY->PopMatrix(); + if( m_bUseMask ) + { + PUSH_AND_TRANSFORM_FOR_ITEM( fPositionFullyOffScreenTop ) + m_quadMask.Draw(); + DISPLAY->PopMatrix(); - PUSH_AND_TRANSFORM_FOR_ITEM( fPositionCompletelyOffScreenBottom ) - m_quadMask.Draw(); - DISPLAY->PopMatrix(); + PUSH_AND_TRANSFORM_FOR_ITEM( fPositionFullyOffScreenBottom ) + m_quadMask.Draw(); + DISPLAY->PopMatrix(); + + fFirstItemToDraw = fPositionFullyOffScreenTop + m_fCurrentItem; + fLastItemToDraw = fPositionFullyOffScreenBottom + m_fCurrentItem; + } + else + { + fFirstItemToDraw = fPositionOnEdgeOfScreenTop + m_fCurrentItem; + fLastItemToDraw = fPositionOnEdgeOfScreenBottom + m_fCurrentItem; + } - float fFirstItemToDraw = fPositionCompletelyOffScreenTop + m_fCurrentItem; - float fLastItemToDraw = fPositionCompletelyOffScreenBottom + m_fCurrentItem; for( int iItem=(int)truncf(ceilf(fFirstItemToDraw)); iItem<=fLastItemToDraw; iItem++ ) { diff --git a/stepmania/src/ActorScroller.h b/stepmania/src/ActorScroller.h index 0792819367..d0dc124ea6 100644 --- a/stepmania/src/ActorScroller.h +++ b/stepmania/src/ActorScroller.h @@ -70,6 +70,7 @@ protected: bool m_bLoop; float m_fPauseCountdownSeconds; + bool m_bUseMask; float m_fMaskWidth; float m_fMaskHeight; Quad m_quadMask;