From 6facdccdfef70ddf8dce0ef5c1597179c5815d7c Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Mon, 2 May 2005 03:06:56 +0000 Subject: [PATCH] cleanup --- stepmania/src/StreamDisplay.cpp | 86 +++++++++++++++++---------------- stepmania/src/StreamDisplay.h | 2 +- 2 files changed, 46 insertions(+), 42 deletions(-) diff --git a/stepmania/src/StreamDisplay.cpp b/stepmania/src/StreamDisplay.cpp index 294167cb12..c91d7359e6 100644 --- a/stepmania/src/StreamDisplay.cpp +++ b/stepmania/src/StreamDisplay.cpp @@ -87,18 +87,25 @@ void StreamDisplay::DrawPrimitives() DrawMask( m_fTrailingPercent ); // this is the "right endcap" to the life const float fChamberWidthInPercent = 1.0f/m_iNumChambers; + float fStripWidthInPercent = 1.0f/m_iNumStrips; float fPercentBetweenStrips = 1.0f/m_iNumStrips; - // round this so that the chamber overflows align + + // round down so that the chamber overflows align if( m_iNumChambers > 10 ) - fPercentBetweenStrips = Quantize( fPercentBetweenStrips, fChamberWidthInPercent ); + fPercentBetweenStrips = Quantize( fPercentBetweenStrips-fChamberWidthInPercent/2, fChamberWidthInPercent ); + + + if( m_iNumChambers > 3 ) + fPercentBetweenStrips -= 2*fChamberWidthInPercent; float fPercentOffset = fmodf( GAMESTATE->m_fSongBeat/4+1000, fPercentBetweenStrips ); ASSERT( fPercentOffset >= 0 && fPercentOffset <= fPercentBetweenStrips ); - for( float f=fPercentOffset+1; f>=0; f-=fPercentBetweenStrips ) + // "+fPercentBetweenStrips" so that the whole area is overdrawn 2x + for( float f=fPercentOffset+1+fPercentBetweenStrips; f>=0; f-=fPercentBetweenStrips ) { DrawMask( f ); - DrawStrip( f ); + DrawStrip( f, fStripWidthInPercent ); } } @@ -151,48 +158,45 @@ float StreamDisplay::GetHeightPercent( int iChamber, float fChamberOverflowPerce return 0; } -void StreamDisplay::DrawStrip( float fRightEdgePercent ) +void StreamDisplay::DrawStrip( float fRightEdgePercent, float fStripWidthInPercent ) { - RectF rect; + m_sprStreamNormal.ZoomToWidth( m_fMeterWidth*fStripWidthInPercent ); + m_sprStreamPassing.ZoomToWidth( m_fMeterWidth*fStripWidthInPercent ); + m_sprStreamHot.ZoomToWidth( m_fMeterWidth*fStripWidthInPercent ); - const float fChamberWidthInPercent = 1.0f/m_iNumChambers; - const float fStripWidthInPercent = 1.0f/m_iNumStrips; + m_sprStreamNormal.ZoomToHeight( m_fMeterHeight ); + m_sprStreamPassing.ZoomToHeight( m_fMeterHeight ); + m_sprStreamHot.ZoomToHeight( m_fMeterHeight ); + + m_sprStreamNormal.SetHorizAlign( Actor::align_right ); + m_sprStreamPassing.SetHorizAlign( Actor::align_right ); + m_sprStreamHot.SetHorizAlign( Actor::align_right ); + + m_sprStreamNormal.SetX( -m_fMeterWidth/2 + m_fMeterWidth*fRightEdgePercent ); + m_sprStreamPassing.SetX( -m_fMeterWidth/2 + m_fMeterWidth*fRightEdgePercent ); + m_sprStreamHot.SetX( -m_fMeterWidth/2 + m_fMeterWidth*fRightEdgePercent ); + + const float fMeterLeftEdgePixels = SCALE( 0.0f, 0.0f, 1.0f, -m_fMeterWidth/2, +m_fMeterWidth/2 ); + const float fMeterRightEdgePixels = SCALE( 1.0f, 0.0f, 1.0f, -m_fMeterWidth/2, +m_fMeterWidth/2 ); + + const float fStreamRightEdgePixels = SCALE( fRightEdgePercent, 0.0f, 1.0f, -m_fMeterWidth/2, +m_fMeterWidth/2 ); + const float fStreamLeftEdgePixels = fStreamRightEdgePixels - m_sprStreamNormal.GetZoomedWidth(); + + const float fLeftOverhangPixels = max( 0, fMeterLeftEdgePixels - fStreamLeftEdgePixels ); + const float fStreamCropLeftPercent = SCALE( fLeftOverhangPixels, 0.0f, m_sprStreamNormal.GetZoomedWidth(), 0.0f, 1.0f ); + + const float fRightOverhangPixels = max( 0, fStreamRightEdgePixels - fMeterRightEdgePixels ); + const float fStreamCropRightPercent = SCALE( fRightOverhangPixels, 0.0f, m_sprStreamNormal.GetZoomedWidth(), 0.0f, 1.0f ); + + m_sprStreamNormal.SetCropLeft( fStreamCropLeftPercent ); + m_sprStreamPassing.SetCropLeft( fStreamCropLeftPercent ); + m_sprStreamHot.SetCropLeft( fStreamCropLeftPercent ); - const float fCorrectedRightEdgePercent = fRightEdgePercent + fChamberWidthInPercent; - const float fCorrectedStripWidthInPercent = fStripWidthInPercent + 2*fChamberWidthInPercent; - const float fCorrectedLeftEdgePercent = fCorrectedRightEdgePercent - fCorrectedStripWidthInPercent; + m_sprStreamNormal.SetCropRight( fStreamCropRightPercent ); + m_sprStreamPassing.SetCropRight(fStreamCropRightPercent ); + m_sprStreamHot.SetCropRight( fStreamCropRightPercent ); - // set size of streams - rect.left = -m_fMeterWidth/2 + m_fMeterWidth*max(0,fCorrectedLeftEdgePercent); - rect.top = -m_fMeterHeight/2; - rect.right = -m_fMeterWidth/2 + m_fMeterWidth*min(1,fCorrectedRightEdgePercent); - rect.bottom = +m_fMeterHeight/2; - - ASSERT( rect.left <= m_fMeterWidth/2 && rect.right <= m_fMeterWidth/2 ); - - float fPercentCroppedFromLeft = max( 0, -fCorrectedLeftEdgePercent ); - float fPercentCroppedFromRight = max( 0, fCorrectedRightEdgePercent-1 ); - - - m_sprStreamNormal.StretchTo( rect ); - m_sprStreamPassing.StretchTo( rect ); - m_sprStreamHot.StretchTo( rect ); - - - // set custom texture coords -// float fPrecentOffset = fRightEdgePercent; - - RectF frectCustomTexRect( - fPercentCroppedFromLeft, - 0, - 1-fPercentCroppedFromRight, - 1); - - m_sprStreamNormal.SetCustomTextureRect( frectCustomTexRect ); - m_sprStreamPassing.SetCustomTextureRect( frectCustomTexRect ); - m_sprStreamHot.SetCustomTextureRect( frectCustomTexRect ); - float fOrigPassingAlpha = m_sprStreamPassing.GetDiffuse().a; float fOrigHotAlpha = m_sprStreamHot.GetDiffuse().a; diff --git a/stepmania/src/StreamDisplay.h b/stepmania/src/StreamDisplay.h index 1040a35d44..8e4e67e4ef 100644 --- a/stepmania/src/StreamDisplay.h +++ b/stepmania/src/StreamDisplay.h @@ -61,7 +61,7 @@ private: float GetChamberRightPercent( int iChamber ); float GetRightEdgePercent( int iChamber, float fChamberOverflowPercent ); float GetHeightPercent( int iChamber, float fChamberOverflowPercent ); - void DrawStrip( float fRightEdgePercent ); + void DrawStrip( float fRightEdgePercent, float fStripWidthInPercent ); void DrawMask( float fPercent ); };