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:
sukibaby
2025-01-15 08:58:40 -08:00
committed by teejusb
parent 1fa31c64c6
commit aba00ed8ec
+7 -7
View File
@@ -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));
} }
} }
} }