fix hold body and cap misalignment in reverse and FlipHeadAndTailWhenReverse=1
This commit is contained in:
@@ -574,6 +574,9 @@ void NoteDisplay::DrawHoldBody( const HoldNote& hn, const bool bActive, float fY
|
|||||||
const float fYBodyTop = fYHead + cache->m_iStartDrawingHoldBodyOffsetFromHead;
|
const float fYBodyTop = fYHead + cache->m_iStartDrawingHoldBodyOffsetFromHead;
|
||||||
const float fYBodyBottom = fYTail + cache->m_iStopDrawingHoldBodyOffsetFromTail;
|
const float fYBodyBottom = fYTail + cache->m_iStopDrawingHoldBodyOffsetFromTail;
|
||||||
|
|
||||||
|
const bool bReverse = GAMESTATE->m_CurrentPlayerOptions[m_PlayerNumber].GetReversePercentForColumn(iCol) > 0.5;
|
||||||
|
bool bAnchorToBottom = bReverse && cache->m_bFlipHeadAndTailWhenReverse;
|
||||||
|
|
||||||
// top to bottom
|
// top to bottom
|
||||||
for( float fY=fYBodyTop; fY<=fYBodyBottom; fY+=fYStep )
|
for( float fY=fYBodyTop; fY<=fYBodyBottom; fY+=fYStep )
|
||||||
{
|
{
|
||||||
@@ -591,8 +594,10 @@ void NoteDisplay::DrawHoldBody( const HoldNote& hn, const bool bActive, float fY
|
|||||||
const float fXBottomRight = fXBottom + fFrameWidth/2;
|
const float fXBottomRight = fXBottom + fFrameWidth/2;
|
||||||
const float fTopDistFromBodyBottom = fYBodyBottom - fYTop;
|
const float fTopDistFromBodyBottom = fYBodyBottom - fYTop;
|
||||||
const float fBottomDistFromBodyBottom = fYBodyBottom - fYBottom;
|
const float fBottomDistFromBodyBottom = fYBodyBottom - fYBottom;
|
||||||
float fTexCoordTop = SCALE( fTopDistFromBodyBottom, 0, fFrameHeight, pRect->bottom, pRect->top );
|
const float fTopDistFromBodyTop = fYTop - fYBodyTop;
|
||||||
float fTexCoordBottom = SCALE( fBottomDistFromBodyBottom, 0, fFrameHeight, pRect->bottom, pRect->top );
|
const float fBottomDistFromBodyTop = fYBottom - fYBodyTop;
|
||||||
|
float fTexCoordTop = SCALE( bAnchorToBottom ? fTopDistFromBodyTop : fTopDistFromBodyBottom, 0, fFrameHeight, pRect->bottom, pRect->top );
|
||||||
|
float fTexCoordBottom = SCALE( bAnchorToBottom ? fBottomDistFromBodyTop : fBottomDistFromBodyBottom, 0, fFrameHeight, pRect->bottom, pRect->top );
|
||||||
if( fTexCoordTop < 0 )
|
if( fTexCoordTop < 0 )
|
||||||
{
|
{
|
||||||
int iToSubtract = (int)fTexCoordTop - 1;
|
int iToSubtract = (int)fTexCoordTop - 1;
|
||||||
@@ -605,6 +610,18 @@ void NoteDisplay::DrawHoldBody( const HoldNote& hn, const bool bActive, float fY
|
|||||||
fTexCoordTop -= iToSubtract;
|
fTexCoordTop -= iToSubtract;
|
||||||
fTexCoordBottom -= iToSubtract;
|
fTexCoordBottom -= iToSubtract;
|
||||||
}
|
}
|
||||||
|
if( fTexCoordBottom < 0 )
|
||||||
|
{
|
||||||
|
int iToSubtract = (int)fTexCoordBottom - 1;
|
||||||
|
fTexCoordTop -= iToSubtract;
|
||||||
|
fTexCoordBottom -= iToSubtract;
|
||||||
|
}
|
||||||
|
else if( fTexCoordTop > 2 )
|
||||||
|
{
|
||||||
|
int iToSubtract = (int)fTexCoordTop;
|
||||||
|
fTexCoordTop -= iToSubtract;
|
||||||
|
fTexCoordBottom -= iToSubtract;
|
||||||
|
}
|
||||||
ASSERT( fTexCoordTop>=0 && fTexCoordBottom>=0 );
|
ASSERT( fTexCoordTop>=0 && fTexCoordBottom>=0 );
|
||||||
ASSERT( fTexCoordTop<=2 && fTexCoordBottom<=2 );
|
ASSERT( fTexCoordTop<=2 && fTexCoordBottom<=2 );
|
||||||
const float fTexCoordLeft = pRect->left;
|
const float fTexCoordLeft = pRect->left;
|
||||||
|
|||||||
Reference in New Issue
Block a user