Преглед на файлове

Bind DistanceConstraint

Rasmus Brönnegård преди 4 месеца
родител
ревизия
6f8d21776a
променени са 2 файла, в които са добавени 76 реда и са изтрити 2 реда
  1. 26 1
      JoltC/Functions.h
  2. 50 1
      JoltCImpl/JoltC.cpp

+ 26 - 1
JoltC/Functions.h

@@ -869,6 +869,31 @@ JPC_API JPC_Constraint* JPC_HingeConstraintSettings_Create(
 	JPC_Body* inBody1,
 	JPC_Body* inBody2);
 
+////////////////////////////////////////////////////////////////////////////////
+// DistanceConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
+
+typedef struct JPC_DistanceConstraintSettings {
+	JPC_ConstraintSettings ConstraintSettings;
+
+	// TwoBodyConstraintSettings: no extra members
+
+	// DistanceConstraintSettings
+	JPC_ConstraintSpace Space;
+
+	JPC_RVec3 Point1;
+	JPC_RVec3 Point2;
+
+	float MinDistance;
+	float MaxDistance;
+	// TODO: Spring settings
+} JPC_DistanceConstraintSettings;
+
+JPC_API void JPC_DistanceConstraintSettings_default(JPC_DistanceConstraintSettings* settings);
+JPC_API JPC_Constraint* JPC_DistanceConstraintSettings_Create(
+	const JPC_DistanceConstraintSettings* self,
+	JPC_Body* inBody1,
+	JPC_Body* inBody2);
+
 ////////////////////////////////////////////////////////////////////////////////
 // TriangleShapeSettings
 
@@ -1471,4 +1496,4 @@ JPC_API void JPC_PhysicsSystem_SetSimShapeFilter(JPC_PhysicsSystem* self, const
 
 #ifdef __cplusplus
 }
-#endif
+#endif

+ 50 - 1
JoltCImpl/JoltC.cpp

@@ -27,6 +27,7 @@
 #include <Jolt/Physics/Constraints/FixedConstraint.h>
 #include <Jolt/Physics/Constraints/SixDOFConstraint.h>
 #include <Jolt/Physics/Constraints/HingeConstraint.h>
+#include <Jolt/Physics/Constraints/DistanceConstraint.h>
 #include <Jolt/Physics/PhysicsSettings.h>
 #include <Jolt/Physics/PhysicsSystem.h>
 #include <Jolt/RegisterTypes.h>
@@ -1289,6 +1290,54 @@ JPC_API JPC_Constraint* JPC_HingeConstraintSettings_Create(
 	return (JPC_Constraint*)outJph;
 }
 
+////////////////////////////////////////////////////////////////////////////////
+// DistanceConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
+
+JPC_IMPL void JPC_DistanceConstraintSettings_to_jpc(
+	JPC_DistanceConstraintSettings* outJpc,
+	const JPH::DistanceConstraintSettings* inJph)
+{
+	JPC_ConstraintSettings_to_jpc(&outJpc->ConstraintSettings, inJph);
+
+	outJpc->Space = static_cast<JPC_ConstraintSpace>(inJph->mSpace);
+	outJpc->Point1 = to_jpc(inJph->mPoint1);
+	outJpc->Point2 = to_jpc(inJph->mPoint2);
+	outJpc->MinDistance = inJph->mMinDistance;
+	outJpc->MaxDistance = inJph->mMaxDistance;
+	// TODO: Spring settings
+}
+
+JPC_IMPL void JPC_DistanceConstraintSettings_to_jph(
+	const JPC_DistanceConstraintSettings* inJpc,
+	JPH::DistanceConstraintSettings* outJph)
+{
+	JPC_ConstraintSettings_to_jph(&inJpc->ConstraintSettings, outJph);
+
+	outJph->mSpace = static_cast<JPH::EConstraintSpace>(inJpc->Space);
+	outJph->mPoint1 = to_jph(inJpc->Point1);
+	outJph->mPoint2 = to_jph(inJpc->Point2);
+	outJph->mMinDistance = inJpc->MinDistance;
+	outJph->mMaxDistance = inJpc->MaxDistance;
+	// TODO: Spring settings
+}
+
+JPC_API void JPC_DistanceConstraintSettings_default(JPC_DistanceConstraintSettings* settings) {
+	JPH::DistanceConstraintSettings defaultSettings{};
+	JPC_DistanceConstraintSettings_to_jpc(settings, &defaultSettings);
+}
+
+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;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // Shape -> RefTarget<Shape>
 
@@ -2744,4 +2793,4 @@ JPC_API void JPC_PhysicsSystem_SetSimShapeFilter(
 	const JPC_SimShapeFilter* inShapeFilter)
 {
 	to_jph(self)->SetSimShapeFilter(to_jph(inShapeFilter));
-}
+}