diff options
author | stone3311 <9110659+stone3311@users.noreply.github.com> | 2020-03-20 09:31:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-20 09:31:06 +0100 |
commit | 0a1cfda02cb971ccafa6e7bab8a6386039aed126 (patch) | |
tree | e6001ac38869e1a0310022f467a9ab0a04cce207 /src/Entities | |
parent | FIx formatting issue in Backers file (diff) | |
download | cuberite-0a1cfda02cb971ccafa6e7bab8a6386039aed126.tar cuberite-0a1cfda02cb971ccafa6e7bab8a6386039aed126.tar.gz cuberite-0a1cfda02cb971ccafa6e7bab8a6386039aed126.tar.bz2 cuberite-0a1cfda02cb971ccafa6e7bab8a6386039aed126.tar.lz cuberite-0a1cfda02cb971ccafa6e7bab8a6386039aed126.tar.xz cuberite-0a1cfda02cb971ccafa6e7bab8a6386039aed126.tar.zst cuberite-0a1cfda02cb971ccafa6e7bab8a6386039aed126.zip |
Diffstat (limited to 'src/Entities')
-rw-r--r-- | src/Entities/Entity.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index f0118104b..87d385691 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -2239,8 +2239,16 @@ Vector3d cEntity::GetLookVector(void) const // Set 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_Position = a_Position; + m_Position = {ClampedPosX, ClampedPosY, ClampedPosZ}; } |