diff --git a/irr/include/SkinnedMesh.h b/irr/include/SkinnedMesh.h index ef6624c13..b4283dbaf 100644 --- a/irr/include/SkinnedMesh.h +++ b/irr/include/SkinnedMesh.h @@ -349,8 +349,11 @@ public: // The .x and .gltf formats pre-calculate this std::optional GlobalInversedMatrix; - // TODO friends? - u16 JointID; // TODO refactor away: pointers -> IDs + void setParent(SJoint *parent) { + ParentJointID = parent ? parent->JointID : std::optional{}; + } + + u16 JointID; // TODO refactor away: pointers -> IDs (problem: .x loader abuses SJoint) std::optional ParentJointID; }; diff --git a/irr/src/CXMeshFileLoader.cpp b/irr/src/CXMeshFileLoader.cpp index 59455a3cf..90a376134 100644 --- a/irr/src/CXMeshFileLoader.cpp +++ b/irr/src/CXMeshFileLoader.cpp @@ -514,8 +514,7 @@ bool CXMeshFileLoader::parseDataObjectFrame(SkinnedMesh::SJoint *Parent) if (n.has_value()) { JointID = *n; joint = AnimatedMesh->getAllJoints()[JointID]; - if (Parent) - joint->ParentJointID = Parent->JointID; + joint->setParent(Parent); } } diff --git a/irr/src/SkinnedMesh.cpp b/irr/src/SkinnedMesh.cpp index cc2cfbb45..83a2c0788 100644 --- a/irr/src/SkinnedMesh.cpp +++ b/irr/src/SkinnedMesh.cpp @@ -509,8 +509,7 @@ void SkinnedMeshBuilder::addMeshBuffer(SSkinMeshBuffer *meshbuf) SkinnedMesh::SJoint *SkinnedMeshBuilder::addJoint(SJoint *parent) { SJoint *joint = new SJoint; - if (parent) - joint->ParentJointID = parent->JointID; + joint->setParent(parent); joint->JointID = AllJoints.size(); AllJoints.push_back(joint);