소스 검색

Bind HingeConstraint creation

Lucien Greathouse 4 달 전
부모
커밋
d23ef2f4d7
2개의 변경된 파일98개의 추가작업 그리고 0개의 파일을 삭제
  1. 37 0
      JoltC/Functions.h
  2. 61 0
      JoltCImpl/JoltC.cpp

+ 37 - 0
JoltC/Functions.h

@@ -690,6 +690,11 @@ JPC_API JPC_Vec3 JPC_SixDOFConstraint_GetTotalLambdaRotation(JPC_SixDOFConstrain
 JPC_API JPC_Vec3 JPC_SixDOFConstraint_GetTotalLambdaMotorTranslation(JPC_SixDOFConstraint* self);
 JPC_API JPC_Vec3 JPC_SixDOFConstraint_GetTotalLambdaMotorRotation(JPC_SixDOFConstraint* self);
 
+////////////////////////////////////////////////////////////////////////////////
+// HingeConstraint
+
+typedef struct JPC_HingeConstraint JPC_HingeConstraint;
+
 ////////////////////////////////////////////////////////////////////////////////
 // ConstraintSettings
 
@@ -764,6 +769,38 @@ JPC_API JPC_Constraint* JPC_SixDOFConstraintSettings_Create(
 	JPC_Body* inBody1,
 	JPC_Body* inBody2);
 
+////////////////////////////////////////////////////////////////////////////////
+// HingeConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
+
+typedef struct JPC_HingeConstraintSettings {
+	JPC_ConstraintSettings ConstraintSettings;
+
+	// TwoBodyConstraintSettings: no extra members
+
+	// HingeConstraintSettings
+	JPC_ConstraintSpace Space;
+
+	JPC_RVec3 Point1;
+	JPC_Vec3 HingeAxis1;
+	JPC_Vec3 NormalAxis1;
+
+	JPC_RVec3 Point2;
+	JPC_Vec3 HingeAxis2;
+	JPC_Vec3 NormalAxis2;
+
+	float LimitsMin;
+	float LimitsMax;
+	// TODO: Spring settings
+	float MaxFrictionTorque;
+	// TODO: Motor settings
+} JPC_HingeConstraintSettings;
+
+JPC_API void JPC_HingeConstraintSettings_default(JPC_HingeConstraintSettings* settings);
+JPC_API JPC_Constraint* JPC_HingeConstraintSettings_Create(
+	const JPC_HingeConstraintSettings* self,
+	JPC_Body* inBody1,
+	JPC_Body* inBody2);
+
 ////////////////////////////////////////////////////////////////////////////////
 // TriangleShapeSettings
 

+ 61 - 0
JoltCImpl/JoltC.cpp

@@ -26,6 +26,7 @@
 #include <Jolt/Physics/Constraints/ConstraintPart/SwingTwistConstraintPart.h>
 #include <Jolt/Physics/Constraints/FixedConstraint.h>
 #include <Jolt/Physics/Constraints/SixDOFConstraint.h>
+#include <Jolt/Physics/Constraints/HingeConstraint.h>
 #include <Jolt/Physics/PhysicsSettings.h>
 #include <Jolt/Physics/PhysicsSystem.h>
 #include <Jolt/RegisterTypes.h>
@@ -1164,6 +1165,66 @@ JPC_API JPC_Constraint* JPC_SixDOFConstraintSettings_Create(
 	return (JPC_Constraint*)outJph;
 }
 
+////////////////////////////////////////////////////////////////////////////////
+// HingeConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
+
+JPC_IMPL void JPC_HingeConstraintSettings_to_jpc(
+	JPC_HingeConstraintSettings* outJpc,
+	const JPH::HingeConstraintSettings* inJph)
+{
+	JPC_ConstraintSettings_to_jpc(&outJpc->ConstraintSettings, inJph);
+
+	outJpc->Space = static_cast<JPC_ConstraintSpace>(inJph->mSpace);
+	outJpc->Point1 = to_jpc(inJph->mPoint1);
+	outJpc->HingeAxis1 = to_jpc(inJph->mHingeAxis1);
+	outJpc->NormalAxis1 = to_jpc(inJph->mNormalAxis1);
+	outJpc->Point2 = to_jpc(inJph->mPoint2);
+	outJpc->HingeAxis2 = to_jpc(inJph->mHingeAxis2);
+	outJpc->NormalAxis2 = to_jpc(inJph->mNormalAxis2);
+	outJpc->LimitsMin = inJph->mLimitsMin;
+	outJpc->LimitsMax = inJph->mLimitsMax;
+	// TODO: Spring settings
+	outJpc->MaxFrictionTorque = inJph->mMaxFrictionTorque;
+	// TODO: Spring settings
+}
+
+JPC_IMPL void JPC_HingeConstraintSettings_to_jph(
+	const JPC_HingeConstraintSettings* inJpc,
+	JPH::HingeConstraintSettings* outJph)
+{
+	JPC_ConstraintSettings_to_jph(&inJpc->ConstraintSettings, outJph);
+
+	outJph->mSpace = static_cast<JPH::EConstraintSpace>(inJpc->Space);
+	outJph->mPoint1 = to_jph(inJpc->Point1);
+	outJph->mHingeAxis1 = to_jph(inJpc->HingeAxis1);
+	outJph->mNormalAxis1 = to_jph(inJpc->NormalAxis1);
+	outJph->mPoint2 = to_jph(inJpc->Point2);
+	outJph->mHingeAxis2 = to_jph(inJpc->HingeAxis2);
+	outJph->mNormalAxis2 = to_jph(inJpc->NormalAxis2);
+	outJph->mLimitsMin = inJpc->LimitsMin;
+	outJph->mLimitsMax = inJpc->LimitsMax;
+	// TODO: Spring settings
+	outJph->mMaxFrictionTorque = inJpc->MaxFrictionTorque;
+	// TODO: Motor settings
+}
+
+JPC_API void JPC_HingeConstraintSettings_default(JPC_HingeConstraintSettings* settings) {
+	JPH::HingeConstraintSettings defaultSettings{};
+	JPC_HingeConstraintSettings_to_jpc(settings, &defaultSettings);
+}
+
+JPC_API JPC_Constraint* JPC_HingeConstraintSettings_Create(
+	const JPC_HingeConstraintSettings* self,
+	JPC_Body* inBody1,
+	JPC_Body* inBody2)
+{
+	JPH::HingeConstraintSettings jphSettings;
+	JPC_HingeConstraintSettings_to_jph(self, &jphSettings);
+
+	JPH::HingeConstraint* outJph = new JPH::HingeConstraint(*to_jph(inBody1), *to_jph(inBody2), jphSettings);
+	return (JPC_Constraint*)outJph;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // Shape -> RefTarget<Shape>