Improve precision in BGAnimationLayer
Floating point time is being stored as a float here, we can prevent precision loss by changing some of these to double during the lifetime of the function to get a more accurate result.
This commit is contained in:
@@ -611,9 +611,9 @@ void BGAnimationLayer::UpdateInternal( float fDeltaTime )
|
|||||||
break;
|
break;
|
||||||
case TYPE_TILES:
|
case TYPE_TILES:
|
||||||
{
|
{
|
||||||
float fSecs = RageTimer::GetTimeSinceStart();
|
double fSecs = RageTimer::GetTimeSinceStart();
|
||||||
float fTotalWidth = m_iNumTilesWide * m_fTilesSpacingX;
|
double fTotalWidth = static_cast<double>(m_iNumTilesWide) * m_fTilesSpacingX;
|
||||||
float fTotalHeight = m_iNumTilesHigh * m_fTilesSpacingY;
|
double fTotalHeight = static_cast<double>(m_iNumTilesHigh) * m_fTilesSpacingY;
|
||||||
|
|
||||||
ASSERT( int(m_SubActors.size()) == m_iNumTilesWide * m_iNumTilesHigh );
|
ASSERT( int(m_SubActors.size()) == m_iNumTilesWide * m_iNumTilesHigh );
|
||||||
|
|
||||||
@@ -623,8 +623,8 @@ void BGAnimationLayer::UpdateInternal( float fDeltaTime )
|
|||||||
{
|
{
|
||||||
int i = y*m_iNumTilesWide + x;
|
int i = y*m_iNumTilesWide + x;
|
||||||
|
|
||||||
float fX = m_fTilesStartX + m_fTilesSpacingX * x + fSecs * m_fTileVelocityX;
|
double fX = m_fTilesStartX + m_fTilesSpacingX * x + fSecs * m_fTileVelocityX;
|
||||||
float fY = m_fTilesStartY + m_fTilesSpacingY * y + fSecs * m_fTileVelocityY;
|
double fY = m_fTilesStartY + m_fTilesSpacingY * y + fSecs * m_fTileVelocityY;
|
||||||
|
|
||||||
fX += m_fTilesSpacingX/2;
|
fX += m_fTilesSpacingX/2;
|
||||||
fY += m_fTilesSpacingY/2;
|
fY += m_fTilesSpacingY/2;
|
||||||
@@ -638,8 +638,8 @@ void BGAnimationLayer::UpdateInternal( float fDeltaTime )
|
|||||||
fX -= m_fTilesSpacingX/2;
|
fX -= m_fTilesSpacingX/2;
|
||||||
fY -= m_fTilesSpacingY/2;
|
fY -= m_fTilesSpacingY/2;
|
||||||
|
|
||||||
m_SubActors[i]->SetX( fX );
|
m_SubActors[i]->SetX(static_cast<float>(fX));
|
||||||
m_SubActors[i]->SetY( fY );
|
m_SubActors[i]->SetY(static_cast<float>(fY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user