fix ActorScroller draws a longer distance than it used to. Clean this up later.

This commit is contained in:
Chris Danford
2005-04-12 12:39:39 +00:00
parent ad2db75e39
commit b26768eafe
2 changed files with 30 additions and 14 deletions
+29 -14
View File
@@ -33,17 +33,17 @@ ActorScroller::ActorScroller()
m_bLoop = false; m_bLoop = false;
m_fPauseCountdownSeconds = 0; m_fPauseCountdownSeconds = 0;
m_bUseMask = false;
m_fMaskWidth = 1; m_fMaskWidth = 1;
m_fMaskHeight = 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_vRotationDegrees = RageVector3(0,0,0);
m_vTranslateTerm0 = RageVector3(0,0,0); m_vTranslateTerm0 = RageVector3(0,0,0);
m_vTranslateTerm1 = RageVector3(0,0,0); m_vTranslateTerm1 = RageVector3(0,0,0);
m_vTranslateTerm2 = 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( void ActorScroller::Load(
@@ -90,6 +90,7 @@ void ActorScroller::Load2(
m_fDestinationItem = (float)(m_SubActors.size()+1); m_fDestinationItem = (float)(m_SubActors.size()+1);
m_fPauseCountdownSeconds = 0; m_fPauseCountdownSeconds = 0;
m_bUseMask = true;
RectF rectBarSize( RectF rectBarSize(
-m_fMaskWidth/2, -m_fMaskWidth/2,
-m_fMaskHeight/2, -m_fMaskHeight/2,
@@ -234,19 +235,33 @@ void ActorScroller::DrawPrimitives()
// write to z buffer so that top and bottom are clipped // write to z buffer so that top and bottom are clipped
float fPositionFullyOnScreenTop = -(m_fNumItemsToDraw-1)/2.f; float fPositionFullyOnScreenTop = -(m_fNumItemsToDraw-1)/2.f;
float fPositionFullyOnScreenBottom = (m_fNumItemsToDraw-1)/2.f; float fPositionFullyOnScreenBottom = (m_fNumItemsToDraw-1)/2.f;
float fPositionCompletelyOffScreenTop = fPositionFullyOnScreenTop - 1; float fPositionFullyOffScreenTop = fPositionFullyOnScreenTop - 1;
float fPositionCompletelyOffScreenBottom = fPositionFullyOnScreenBottom + 1; float fPositionFullyOffScreenBottom = fPositionFullyOnScreenBottom + 1;
float fPositionOnEdgeOfScreenTop = -(m_fNumItemsToDraw)/2.f;
float fPositionOnEdgeOfScreenBottom = (m_fNumItemsToDraw)/2.f;
PUSH_AND_TRANSFORM_FOR_ITEM( fPositionCompletelyOffScreenTop ) float fFirstItemToDraw = 0;
m_quadMask.Draw(); float fLastItemToDraw = 0;
DISPLAY->PopMatrix();
PUSH_AND_TRANSFORM_FOR_ITEM( fPositionCompletelyOffScreenBottom ) if( m_bUseMask )
m_quadMask.Draw(); {
DISPLAY->PopMatrix(); PUSH_AND_TRANSFORM_FOR_ITEM( fPositionFullyOffScreenTop )
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++ ) for( int iItem=(int)truncf(ceilf(fFirstItemToDraw)); iItem<=fLastItemToDraw; iItem++ )
{ {
+1
View File
@@ -70,6 +70,7 @@ protected:
bool m_bLoop; bool m_bLoop;
float m_fPauseCountdownSeconds; float m_fPauseCountdownSeconds;
bool m_bUseMask;
float m_fMaskWidth; float m_fMaskWidth;
float m_fMaskHeight; float m_fMaskHeight;
Quad m_quadMask; Quad m_quadMask;