Ver código fonte

Bind SliderConstraint

Rasmus Brönnegård 4 meses atrás
pai
commit
1c95e26c35
2 arquivos alterados com 93 adições e 3 exclusões
  1. 27 0
      JoltC/Functions.h
  2. 66 3
      JoltCImpl/JoltC.cpp

+ 27 - 0
JoltC/Functions.h

@@ -894,6 +894,33 @@ JPC_API JPC_Constraint* JPC_DistanceConstraintSettings_Create(
 	JPC_Body* inBody1,
 	JPC_Body* inBody2);
 
+////////////////////////////////////////////////////////////////////////////////
+// SliderConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
+
+typedef struct JPC_SliderConstraintSettings {
+	JPC_ConstraintSettings ConstraintSettings;
+
+	// TwoBodyConstraintSettings: no extra members
+
+	// SliderConstraintSettings
+	JPC_ConstraintSpace Space;
+	bool AutoDetectPoint;
+
+	JPC_RVec3 Point1;
+	JPC_Vec3 SliderAxis1;
+	JPC_Vec3 NormalAxis1;
+
+	JPC_RVec3 Point2;
+	JPC_Vec3 SliderAxis2;
+	JPC_Vec3 NormalAxis2;
+
+	float LimitsMin;
+	float LimitsMax;
+	// TODO: Spring settings
+	float MaxFrictionForce;
+	// TODO: Motor settings
+} JPC_SliderConstraintSettings;
+
 ////////////////////////////////////////////////////////////////////////////////
 // TriangleShapeSettings
 

+ 66 - 3
JoltCImpl/JoltC.cpp

@@ -28,6 +28,7 @@
 #include <Jolt/Physics/Constraints/SixDOFConstraint.h>
 #include <Jolt/Physics/Constraints/HingeConstraint.h>
 #include <Jolt/Physics/Constraints/DistanceConstraint.h>
+#include <Jolt/Physics/Constraints/SliderConstraint.h>
 #include <Jolt/Physics/PhysicsSettings.h>
 #include <Jolt/Physics/PhysicsSystem.h>
 #include <Jolt/RegisterTypes.h>
@@ -1330,11 +1331,73 @@ JPC_API JPC_Constraint* JPC_DistanceConstraintSettings_Create(
 	const JPC_DistanceConstraintSettings* self,
 	JPC_Body* inBody1,
 	JPC_Body* inBody2)
+	{
+		JPH::DistanceConstraintSettings jphSettings;
+		JPC_DistanceConstraintSettings_to_jph(self, &jphSettings);
+
+		JPH::DistanceConstraint* outJph = new JPH::DistanceConstraint(*to_jph(inBody1), *to_jph(inBody2), jphSettings);
+		return (JPC_Constraint*)outJph;
+	}
+
+////////////////////////////////////////////////////////////////////////////////
+// SliderConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
+
+JPC_IMPL void JPC_SliderConstraintSettings_to_jpc(
+	JPC_SliderConstraintSettings* outJpc,
+	const JPH::SliderConstraintSettings* inJph)
+{
+	JPC_ConstraintSettings_to_jpc(&outJpc->ConstraintSettings, inJph);
+
+	outJpc->Space = static_cast<JPC_ConstraintSpace>(inJph->mSpace);
+	outJpc->AutoDetectPoint = inJph->mAutoDetectPoint;
+	outJpc->Point1 = to_jpc(inJph->mPoint1);
+	outJpc->SliderAxis1 = to_jpc(inJph->mSliderAxis1);
+	outJpc->NormalAxis1 = to_jpc(inJph->mNormalAxis1);
+	outJpc->Point2 = to_jpc(inJph->mPoint2);
+	outJpc->SliderAxis2 = to_jpc(inJph->mSliderAxis2);
+	outJpc->NormalAxis2 = to_jpc(inJph->mNormalAxis2);
+	outJpc->LimitsMin = inJph->mLimitsMin;
+	outJpc->LimitsMax = inJph->mLimitsMax;
+	// TODO: Spring settings
+	outJpc->MaxFrictionForce = inJph->mMaxFrictionForce;
+	// TODO: Spring settings
+}
+
+JPC_IMPL void JPC_SliderConstraintSettings_to_jph(
+	const JPC_SliderConstraintSettings* inJpc,
+	JPH::SliderConstraintSettings* outJph)
+{
+	JPC_ConstraintSettings_to_jph(&inJpc->ConstraintSettings, outJph);
+
+	outJph->mSpace = static_cast<JPH::EConstraintSpace>(inJpc->Space);
+	outJph->mAutoDetectPoint = inJpc->AutoDetectPoint;
+	outJph->mPoint1 = to_jph(inJpc->Point1);
+	outJph->mSliderAxis1 = to_jph(inJpc->SliderAxis1);
+	outJph->mNormalAxis1 = to_jph(inJpc->NormalAxis1);
+	outJph->mPoint2 = to_jph(inJpc->Point2);
+	outJph->mSliderAxis2 = to_jph(inJpc->SliderAxis2);
+	outJph->mNormalAxis2 = to_jph(inJpc->NormalAxis2);
+	outJph->mLimitsMin = inJpc->LimitsMin;
+	outJph->mLimitsMax = inJpc->LimitsMax;
+	// TODO: Spring settings
+	outJph->mMaxFrictionForce = inJpc->MaxFrictionForce;
+	// TODO: Motor settings
+}
+
+JPC_API void JPC_SliderConstraintSettings_default(JPC_SliderConstraintSettings* settings) {
+	JPH::SliderConstraintSettings defaultSettings{};
+	JPC_SliderConstraintSettings_to_jpc(settings, &defaultSettings);
+}
+
+JPC_API JPC_Constraint* JPC_SliderConstraintSettings_Create(
+	const JPC_SliderConstraintSettings* self,
+	JPC_Body* inBody1,
+	JPC_Body* inBody2)
 {
-	JPH::DistanceConstraintSettings jphSettings;
-	JPC_DistanceConstraintSettings_to_jph(self, &jphSettings);
+	JPH::SliderConstraintSettings jphSettings;
+	JPC_SliderConstraintSettings_to_jph(self, &jphSettings);
 
-	JPH::DistanceConstraint* outJph = new JPH::DistanceConstraint(*to_jph(inBody1), *to_jph(inBody2), jphSettings);
+	JPH::SliderConstraint* outJph = new JPH::SliderConstraint(*to_jph(inBody1), *to_jph(inBody2), jphSettings);
 	return (JPC_Constraint*)outJph;
 }