diff --git a/core/src/physics/world.cpp b/core/src/physics/world.cpp index 88291d2..e3697d7 100644 --- a/core/src/physics/world.cpp +++ b/core/src/physics/world.cpp @@ -36,7 +36,7 @@ #include #include #include -#include +#include #include static JPH::TempAllocator* allocator; @@ -218,22 +218,21 @@ PhysJoint PhysWorld::createJoint(PhysJointInfo& type, std::shared_ptr settings.mAxisY2 = convert(info->c1.UpVector()); constraint = settings.Create(*part0->rigidBody.bodyImpl, *part1->rigidBody.bodyImpl); } else if (PhysRotatingJointInfo* info = dynamic_cast(&type)) { - JPH::SixDOFConstraintSettings settings; + JPH::HingeConstraintSettings settings; settings.mSpace = JPH::EConstraintSpace::LocalToBodyCOM; - settings.mPosition1 = convert(info->c0.Position()); - settings.mAxisX1 = convert(info->c0.RightVector()); - settings.mAxisY1 = convert(info->c0.UpVector()); - settings.mPosition2 = convert(info->c1.Position()); - settings.mAxisX2 = convert(info->c1.RightVector()); - settings.mAxisY2 = convert(info->c1.UpVector()); - settings.MakeFixedAxis(JPH::SixDOFConstraintSettings::RotationX); - settings.MakeFixedAxis(JPH::SixDOFConstraintSettings::RotationY); - settings.MakeFixedAxis(JPH::SixDOFConstraintSettings::TranslationX); - settings.MakeFixedAxis(JPH::SixDOFConstraintSettings::TranslationY); - settings.MakeFixedAxis(JPH::SixDOFConstraintSettings::TranslationZ); - settings.mMotorSettings[JPH::SixDOFConstraintSettings::EAxis::RotationZ] = JPH::MotorSettings(5.f, 0.f); + settings.mPoint1 = convert(info->c0.Position()); + settings.mNormalAxis1 = convert(info->c0.RightVector()); + settings.mHingeAxis1 = convert(info->c0.LookVector()); + settings.mPoint2 = convert(info->c1.Position()); + settings.mNormalAxis2 = convert(info->c1.RightVector()); + settings.mHingeAxis2 = convert(info->c1.LookVector()); + // settings.mMotorSettings = JPH::MotorSettings(1.0f, 1.0f); constraint = settings.Create(*part0->rigidBody.bodyImpl, *part1->rigidBody.bodyImpl); - // static_cast(constraint)->SetMotorState(JPH::SixDOFConstraintSettings::EAxis::RotationZ, JPH::EMotorState::Velocity); + if (info->motorized) { + float vel = part0->GetSurfaceParamB(-info->c0.LookVector().Unit()) * 6.28; + static_cast(constraint)->SetMotorState(JPH::EMotorState::Velocity); + static_cast(constraint)->SetTargetAngularVelocity(-vel); + } } else { panic(); }