1
0

Clamp teleportation position (#4203)

This commit is contained in:
stone3311 2020-03-20 09:31:06 +01:00 committed by GitHub
parent 7d8f8c95ff
commit 0a1cfda02c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2239,8 +2239,16 @@ Vector3d cEntity::GetLookVector(void) const
// Set position // Set position
void cEntity::SetPosition(const Vector3d & a_Position) void cEntity::SetPosition(const Vector3d & a_Position)
{ {
// Clamp the positions to exactly representable single-precision floating point values
// This is necessary to avoid rounding errors in the noise generator and overflows in the chunk loader
const double MaxFloat = std::pow(2, std::numeric_limits<float>().digits);
const double ClampedPosX = Clamp(a_Position.x, -MaxFloat, MaxFloat);
const double ClampedPosY = Clamp(a_Position.y, -MaxFloat, MaxFloat);
const double ClampedPosZ = Clamp(a_Position.z, -MaxFloat, MaxFloat);
m_LastPosition = m_Position; m_LastPosition = m_Position;
m_Position = a_Position; m_Position = {ClampedPosX, ClampedPosY, ClampedPosZ};
} }