diff options
author | Lars Müller <34514239+appgurueu@users.noreply.github.com> | 2020-10-04 15:09:12 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-04 15:09:12 +0200 |
commit | 0f98b54aa4b2361575002d92b29fe222703ba557 (patch) | |
tree | ba47662d02eae20cd461d4603f31ce769412e244 /src/client | |
parent | 3250b37e32f264db04c1ca449d9feefc22fd38b7 (diff) | |
download | minetest-0f98b54aa4b2361575002d92b29fe222703ba557.tar.gz minetest-0f98b54aa4b2361575002d92b29fe222703ba557.tar.bz2 minetest-0f98b54aa4b2361575002d92b29fe222703ba557.zip |
Fix short 180 degree rotation when using set_bone_position (#10405)
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/content_cao.cpp | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 71a9d4b54..c1715a289 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -1460,24 +1460,17 @@ void GenericCAO::updateBonePosition() if (!bone) continue; - //If bone is manually positioned there is no need to perform the bug check - bool skip = false; - for (auto &it : m_bone_position) { - if (it.first == bone->getName()) { - skip = true; - break; - } - } - if (skip) - continue; - // Workaround for Irrlicht bug // We check each bone to see if it has been rotated ~180deg from its expected position due to a bug in Irricht // when using EJUOR_CONTROL joint control. If the bug is detected we update the bone to the proper position // and update the bones transformation. v3f bone_rot = bone->getRelativeTransformation().getRotationDegrees(); - float offset = fabsf(bone_rot.X - bone->getRotation().X); - if (offset > 179.9f && offset < 180.1f) { + float offset_X = fabsf(bone_rot.X - bone->getRotation().X); + float offset_Y = fabsf(bone_rot.Y - bone->getRotation().Y); + float offset_Z = fabsf(bone_rot.Z - bone->getRotation().Z); + if ((offset_X > 179.9f && offset_X < 180.1f) + || (offset_Y > 179.9f && offset_Y < 180.1f) + || (offset_Z > 179.9f && offset_Z < 180.1f)) { bone->setRotation(bone_rot); bone->updateAbsolutePosition(); } |