diff --git a/core/src/objects/joint/motor6d.cpp b/core/src/objects/joint/motor6d.cpp index 64bf926..d6e51a0 100644 --- a/core/src/objects/joint/motor6d.cpp +++ b/core/src/objects/joint/motor6d.cpp @@ -44,21 +44,6 @@ void Motor6D::OnPhysicsStep(float deltaTime) { // Shouldn't in theory be necessary, but just in case. if (part0.expired() || part1.expired()) return; - if (!part1.lock()->anchored) { - CFrame anchorPoint = part0.lock()->cframe * c0; - Vector3 angles = anchorPoint.ToEulerAnglesXYZ(); - CFrame rotatedAnchor = CFrame::FromEulerAnglesXYZ({angles.X(), angles.Y(), currentAngle}) + anchorPoint.Position(); - CFrame newFrame = rotatedAnchor * c1.Inverse(); - - part1.lock()->cframe = newFrame; - part1.lock()->UpdateNoBreakJoints(); - } else if (!part0.lock()->anchored) { - CFrame anchorPoint = part1.lock()->cframe * c1; - Vector3 angles = anchorPoint.ToEulerAnglesXYZ(); - CFrame rotatedAnchor = CFrame::FromEulerAnglesXYZ({angles.X(), angles.Y(), currentAngle}) + anchorPoint.Position(); - CFrame newFrame = rotatedAnchor * c0.Inverse(); - - part0.lock()->cframe = newFrame; - part0.lock()->UpdateNoBreakJoints(); - } + // TODO: Re-add rotating only one part when both are unanchored, maybe? + joint.setTargetAngle(currentAngle); } \ No newline at end of file diff --git a/core/src/physics/world.cpp b/core/src/physics/world.cpp index 7092772..bf9e64a 100644 --- a/core/src/physics/world.cpp +++ b/core/src/physics/world.cpp @@ -234,14 +234,17 @@ PhysJoint PhysWorld::createJoint(PhysJointInfo& type, std::shared_ptr settings.mPoint2 = convert(info->c1.Position()); settings.mNormalAxis2 = convert(info->c1.RightVector()); settings.mHingeAxis2 = convert(info->c1.LookVector()); + + // settings for Motor6D + settings.mMotorSettings.mSpringSettings.mFrequency = 20; + settings.mMotorSettings.mSpringSettings.mDamping = 1; constraint = settings.Create(*part0->rigidBody.bodyImpl, *part1->rigidBody.bodyImpl); if (PhysMotorizedJointInfo* info = dynamic_cast(&type)) { static_cast(constraint)->SetMotorState(JPH::EMotorState::Velocity); static_cast(constraint)->SetTargetAngularVelocity(-info->initialVelocity); - } else if (PhysStepperJointInfo* info = dynamic_cast(&type)) { - static_cast(constraint)->SetMotorState(JPH::EMotorState::Velocity); - static_cast(constraint)->SetTargetAngularVelocity(0); + } else if (PhysStepperJointInfo* _ = dynamic_cast(&type)) { + static_cast(constraint)->SetMotorState(JPH::EMotorState::Position); } } else { panic();