Kaynağa Gözat

Bind construction of SixDOFContraint

Lucien Greathouse 5 ay önce
ebeveyn
işleme
60972f9eca
4 değiştirilmiş dosya ile 105 ekleme ve 2 silme
  1. 8 0
      JoltC/Enums.h
  2. 34 1
      JoltC/Functions.h
  3. 62 1
      JoltCImpl/JoltC.cpp
  4. 1 0
      JoltCImpl/Test.cpp

+ 8 - 0
JoltC/Enums.h

@@ -332,3 +332,11 @@ const JPC_CollectFacesMode JPC_COLLECT_FACES_MODE_NO_FACES = 1;
 
 ENSURE_ENUM_EQ(JPC_COLLECT_FACES_MODE_COLLECT_FACES, JPH::ECollectFacesMode::CollectFaces);
 ENSURE_ENUM_EQ(JPC_COLLECT_FACES_MODE_NO_FACES, JPH::ECollectFacesMode::NoFaces);
+
+// ESwingType
+typedef uint8_t JPC_SwingType;
+const JPC_SwingType JPC_SWING_TYPE_CONE = 0;
+const JPC_SwingType JPC_SWING_TYPE_PYRAMID = 1;
+
+ENSURE_ENUM_EQ(JPC_SWING_TYPE_CONE, JPH::ESwingType::Cone);
+ENSURE_ENUM_EQ(JPC_SWING_TYPE_PYRAMID, JPH::ESwingType::Pyramid);

+ 34 - 1
JoltC/Functions.h

@@ -603,7 +603,7 @@ typedef struct JPC_ConstraintSettings {
 JPC_API void JPC_ConstraintSettings_default(JPC_ConstraintSettings* settings);
 
 ////////////////////////////////////////////////////////////////////////////////
-// FixedConstraintSettings
+// FixedConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
 
 typedef struct JPC_FixedConstraintSettings {
 	JPC_ConstraintSettings ConstraintSettings;
@@ -629,6 +629,39 @@ JPC_API JPC_Constraint* JPC_FixedConstraintSettings_Create(
 	JPC_Body* inBody1,
 	JPC_Body* inBody2);
 
+////////////////////////////////////////////////////////////////////////////////
+// SixDOFConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
+
+typedef struct JPC_SixDOFConstraintSettings {
+	JPC_ConstraintSettings ConstraintSettings;
+
+	// TwoBodyConstraintSettings: no extra members
+
+	// SixDOFConstraintSettings
+	JPC_ConstraintSpace Space;
+
+	JPC_RVec3 Position1;
+	JPC_Vec3 AxisX1;
+	JPC_Vec3 AxisY1;
+
+	JPC_RVec3 Position2;
+	JPC_Vec3 AxisX2;
+	JPC_Vec3 AxisY2;
+
+	float MaxFriction[6];
+
+	float LimitMin[6];
+	float LimitMax[6];
+
+	// TODO: LimitsSpringSettings
+} JPC_SixDOFConstraintSettings;
+
+JPC_API void JPC_SixDOFConstraintSettings_default(JPC_SixDOFConstraintSettings* settings);
+JPC_API JPC_Constraint* JPC_SixDOFConstraintSettings_Create(
+	const JPC_SixDOFConstraintSettings* self,
+	JPC_Body* inBody1,
+	JPC_Body* inBody2);
+
 ////////////////////////////////////////////////////////////////////////////////
 // TriangleShapeSettings
 

+ 62 - 1
JoltCImpl/JoltC.cpp

@@ -23,6 +23,8 @@
 #include <Jolt/Physics/Collision/ShapeCast.h>
 #include <Jolt/Physics/Collision/SimShapeFilter.h>
 #include <Jolt/Physics/Constraints/FixedConstraint.h>
+#include <Jolt/Physics/Constraints/SixDOFConstraint.h>
+#include <Jolt/Physics/Constraints/ConstraintPart/SwingTwistConstraintPart.h>
 #include <Jolt/Physics/PhysicsSettings.h>
 #include <Jolt/Physics/PhysicsSystem.h>
 #include <Jolt/RegisterTypes.h>
@@ -843,7 +845,7 @@ JPC_API void JPC_ConstraintSettings_default(JPC_ConstraintSettings* settings) {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// FixedConstraintSettings
+// FixedConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
 
 JPC_IMPL void JPC_FixedConstraintSettings_to_jpc(
 	JPC_FixedConstraintSettings* outJpc,
@@ -893,6 +895,65 @@ JPC_API JPC_Constraint* JPC_FixedConstraintSettings_Create(
 	return to_jpc(jphSettings.Create(*to_jph(inBody1), *to_jph(inBody2)));
 }
 
+////////////////////////////////////////////////////////////////////////////////
+// SixDOFConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
+
+JPC_IMPL void JPC_SixDOFConstraintSettings_to_jpc(
+	JPC_SixDOFConstraintSettings* outJpc,
+	const JPH::SixDOFConstraintSettings* inJph)
+{
+	JPC_ConstraintSettings_to_jpc(&outJpc->ConstraintSettings, inJph);
+
+	outJpc->Space = static_cast<JPC_ConstraintSpace>(inJph->mSpace);
+	outJpc->Position1 = to_jpc(inJph->mPosition1);
+	outJpc->AxisX1 = to_jpc(inJph->mAxisX1);
+	outJpc->AxisY1 = to_jpc(inJph->mAxisY1);
+	outJpc->Position2 = to_jpc(inJph->mPosition2);
+	outJpc->AxisX2 = to_jpc(inJph->mAxisX2);
+	outJpc->AxisY2 = to_jpc(inJph->mAxisY2);
+	std::copy(inJph->mMaxFriction, inJph->mMaxFriction + 6, outJpc->MaxFriction);
+	std::copy(inJph->mLimitMin, inJph->mLimitMin + 6, outJpc->LimitMin);
+	std::copy(inJph->mLimitMax, inJph->mLimitMax + 6, outJpc->LimitMax);
+
+	// TODO: LimitsSpringSettings
+}
+
+JPC_IMPL void JPC_SixDOFConstraintSettings_to_jph(
+	const JPC_SixDOFConstraintSettings* inJpc,
+	JPH::SixDOFConstraintSettings* outJph)
+{
+	JPC_ConstraintSettings_to_jph(&inJpc->ConstraintSettings, outJph);
+
+	outJph->mSpace = static_cast<JPH::EConstraintSpace>(inJpc->Space);
+	outJph->mPosition1 = to_jph(inJpc->Position1);
+	outJph->mAxisX1 = to_jph(inJpc->AxisX1);
+	outJph->mAxisY1 = to_jph(inJpc->AxisY1);
+	outJph->mPosition2 = to_jph(inJpc->Position2);
+	outJph->mAxisX2 = to_jph(inJpc->AxisX2);
+	outJph->mAxisY2 = to_jph(inJpc->AxisY2);
+	std::copy(inJpc->MaxFriction, inJpc->MaxFriction + 6, outJph->mMaxFriction);
+	std::copy(inJpc->LimitMin, inJpc->LimitMin + 6, outJph->mLimitMin);
+	std::copy(inJpc->LimitMax, inJpc->LimitMax + 6, outJph->mLimitMax);
+
+	// TODO: LimitsSpringSettings
+}
+
+JPC_API void JPC_SixDOFConstraintSettings_default(JPC_SixDOFConstraintSettings* settings) {
+	JPH::SixDOFConstraintSettings defaultSettings{};
+	JPC_SixDOFConstraintSettings_to_jpc(settings, &defaultSettings);
+}
+
+JPC_API JPC_Constraint* JPC_SixDOFConstraintSettings_Create(
+	const JPC_SixDOFConstraintSettings* self,
+	JPC_Body* inBody1,
+	JPC_Body* inBody2)
+{
+	JPH::SixDOFConstraintSettings jphSettings;
+	JPC_SixDOFConstraintSettings_to_jph(self, &jphSettings);
+
+	return to_jpc(jphSettings.Create(*to_jph(inBody1), *to_jph(inBody2)));
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // Shape -> RefTarget<Shape>
 

+ 1 - 0
JoltCImpl/Test.cpp

@@ -21,6 +21,7 @@
 #include <Jolt/Physics/Collision/CollideShape.h>
 #include <Jolt/Physics/Collision/Shape/BoxShape.h>
 #include <Jolt/Physics/Collision/Shape/SphereShape.h>
+#include <Jolt/Physics/Constraints/ConstraintPart/SwingTwistConstraintPart.h>
 #include <Jolt/Physics/PhysicsSettings.h>
 #include <Jolt/Physics/PhysicsSystem.h>
 #include <Jolt/RegisterTypes.h>