From dac8d0f4bd459f342442834aca1183b2d0ceec3f Mon Sep 17 00:00:00 2001 From: maelstrom Date: Wed, 27 Aug 2025 22:19:36 +0200 Subject: [PATCH] fix(physics): forgot to track joints --- core/src/objects/joint/jointinstance.cpp | 3 +++ core/src/objects/joint/rotate.cpp | 1 - core/src/objects/joint/rotatev.cpp | 1 - core/src/objects/joint/snap.cpp | 1 - core/src/objects/joint/weld.cpp | 1 - 5 files changed, 3 insertions(+), 4 deletions(-) diff --git a/core/src/objects/joint/jointinstance.cpp b/core/src/objects/joint/jointinstance.cpp index 522d853..a8c1364 100644 --- a/core/src/objects/joint/jointinstance.cpp +++ b/core/src/objects/joint/jointinstance.cpp @@ -48,6 +48,9 @@ void JointInstance::Update() { // Finally, build the joint buildJoint(); + + part0.lock()->trackJoint(shared()); + part1.lock()->trackJoint(shared()); } nullable std::shared_ptr JointInstance::workspaceOfPart(std::shared_ptr part) { diff --git a/core/src/objects/joint/rotate.cpp b/core/src/objects/joint/rotate.cpp index 914bc0c..9ab6d72 100644 --- a/core/src/objects/joint/rotate.cpp +++ b/core/src/objects/joint/rotate.cpp @@ -18,7 +18,6 @@ void Rotate::buildJoint() { // used to be rather than specifying an anchor rotation, so whatever. CFrame newFrame = part0.lock()->cframe * (c0 * c1.Inverse()); part1.lock()->cframe = newFrame; - part1.lock()->UpdateProperty("CFrame"); // Do NOT use Abs() in this scenario. For some reason that breaks it PhysJointHingeInfo jointInfo((part0.lock()->cframe * c0).Position(), -(part0.lock()->cframe * c0).LookVector().Unit()); diff --git a/core/src/objects/joint/rotatev.cpp b/core/src/objects/joint/rotatev.cpp index 5f6cb8c..82d2699 100644 --- a/core/src/objects/joint/rotatev.cpp +++ b/core/src/objects/joint/rotatev.cpp @@ -20,7 +20,6 @@ void RotateV::buildJoint() { // used to be rather than specifying an anchor rotation, so whatever. CFrame newFrame = part0.lock()->cframe * (c0 * c1.Inverse()); part1.lock()->cframe = newFrame; - part1.lock()->UpdateProperty("CFrame"); // Do NOT use Abs() in this scenario. For some reason that breaks it PhysJointMotorInfo jointInfo((part0.lock()->cframe * c0).Position(), -(part0.lock()->cframe * c0).LookVector().Unit()); diff --git a/core/src/objects/joint/snap.cpp b/core/src/objects/joint/snap.cpp index 2e6f4d7..2b4b777 100644 --- a/core/src/objects/joint/snap.cpp +++ b/core/src/objects/joint/snap.cpp @@ -22,7 +22,6 @@ void Snap::buildJoint() { // used to be rather than specifying an anchor rotation, so whatever. CFrame newFrame = part0.lock()->cframe * (c0 * c1.Inverse()); part1.lock()->cframe = newFrame; - part1.lock()->UpdateProperty("CFrame"); PhysJointSnapInfo jointInfo((c0.Inverse() * c1).Position()); this->joint = workspace->CreateJoint(jointInfo, part0.lock(), part1.lock()); diff --git a/core/src/objects/joint/weld.cpp b/core/src/objects/joint/weld.cpp index c356dca..49875e7 100644 --- a/core/src/objects/joint/weld.cpp +++ b/core/src/objects/joint/weld.cpp @@ -22,7 +22,6 @@ void Weld::buildJoint() { // used to be rather than specifying an anchor rotation, so whatever. CFrame newFrame = part0.lock()->cframe * (c0 * c1.Inverse()); part1.lock()->cframe = newFrame; - part1.lock()->UpdateProperty("CFrame"); PhysJointWeldInfo jointInfo((c0.Inverse() * c1).Position()); this->joint = workspace->CreateJoint(jointInfo, part0.lock(), part1.lock());