Răsfoiți Sursa

SpringSettings and MotorSettings

Rasmus Brönnegård 4 luni în urmă
părinte
comite
327e98a1a0
3 a modificat fișierele cu 122 adăugiri și 13 ștergeri
  1. 20 0
      JoltC/Enums.h
  2. 36 5
      JoltC/Functions.h
  3. 66 8
      JoltCImpl/JoltC.cpp

+ 20 - 0
JoltC/Enums.h

@@ -360,3 +360,23 @@ ENSURE_ENUM_EQ(JPC_SIX_DOF_CONSTRAINT_AXIS_ROTATION_Y, JPH::SixDOFConstraint::EA
 ENSURE_ENUM_EQ(JPC_SIX_DOF_CONSTRAINT_AXIS_ROTATION_Z, JPH::SixDOFConstraint::EAxis::RotationZ);
 ENSURE_ENUM_EQ(JPC_SIX_DOF_CONSTRAINT_AXIS_ROTATION_Z, JPH::SixDOFConstraint::EAxis::RotationZ);
 ENSURE_ENUM_EQ(JPC_SIX_DOF_CONSTRAINT_AXIS_NUM, JPH::SixDOFConstraint::EAxis::Num);
 ENSURE_ENUM_EQ(JPC_SIX_DOF_CONSTRAINT_AXIS_NUM, JPH::SixDOFConstraint::EAxis::Num);
 ENSURE_ENUM_EQ(JPC_SIX_DOF_CONSTRAINT_AXIS_NUM_TRANSLATION, JPH::SixDOFConstraint::EAxis::NumTranslation);
 ENSURE_ENUM_EQ(JPC_SIX_DOF_CONSTRAINT_AXIS_NUM_TRANSLATION, JPH::SixDOFConstraint::EAxis::NumTranslation);
+
+// ESpringMode
+typedef enum JPC_SpringMode: uint8_t {
+	JPC_SPRING_MODE_FREQUENCY_AND_DAMPING = 0,
+	JPC_SPRING_MODE_STIFFNESS_AND_DAMPING  = 1,
+} JPC_SpringMode;
+
+ENSURE_ENUM_EQ(JPC_SPRING_MODE_FREQUENCY_AND_DAMPING, JPH::ESpringMode::FrequencyAndDamping)
+ENSURE_ENUM_EQ(JPC_SPRING_MODE_STIFFNESS_AND_DAMPING, JPH::ESpringMode::StiffnessAndDamping)
+
+// EMotorState
+typedef enum JPC_MotorState: uint32_t {
+	JPC_MOTOR_STATE_OFF = 0,
+	JPC_MOTOR_STATE_VELOCITY = 1,
+	JPC_MOTOR_STATE_POSITION = 2,
+} JPC_MotorState;
+
+ENSURE_ENUM_EQ(JPC_MOTOR_STATE_OFF, JPH::EMotorState::Off)
+ENSURE_ENUM_EQ(JPC_MOTOR_STATE_VELOCITY, JPH::EMotorState::Velocity)
+ENSURE_ENUM_EQ(JPC_MOTOR_STATE_POSITION, JPH::EMotorState::Position)

+ 36 - 5
JoltC/Functions.h

@@ -777,6 +777,30 @@ typedef struct JPC_ConstraintSettings {
 
 
 JPC_API void JPC_ConstraintSettings_default(JPC_ConstraintSettings* settings);
 JPC_API void JPC_ConstraintSettings_default(JPC_ConstraintSettings* settings);
 
 
+////////////////////////////////////////////////////////////////////////////////
+// SpringSettings
+
+typedef struct JPC_SpringSettings {
+	JPC_SpringMode Mode;
+	float FrequencyOrStiffness;
+	float Damping;
+} JPC_SpringSettings;
+
+JPC_API void JPC_SpringSettings_default(JPC_SpringSettings* settings);
+
+////////////////////////////////////////////////////////////////////////////////
+// MotorSettings
+
+typedef struct JPC_MotorSettings {
+	JPC_SpringSettings SpringSettings;
+	float MinForceLimit;
+	float MaxForceLimit;
+	float MinTorqueLimit;
+	float MaxTorqueLimit;
+} JPC_MotorSettings;
+
+JPC_API void JPC_MotorSettings_default(JPC_MotorSettings* settings);
+
 ////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////
 // FixedConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
 // FixedConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
 
 
@@ -858,9 +882,12 @@ typedef struct JPC_HingeConstraintSettings {
 
 
 	float LimitsMin;
 	float LimitsMin;
 	float LimitsMax;
 	float LimitsMax;
-	// TODO: Spring settings
+
+	JPC_SpringSettings LimitsSpringSettings;
+
 	float MaxFrictionTorque;
 	float MaxFrictionTorque;
-	// TODO: Motor settings
+
+	JPC_MotorSettings MotorSettings;
 } JPC_HingeConstraintSettings;
 } JPC_HingeConstraintSettings;
 
 
 JPC_API void JPC_HingeConstraintSettings_default(JPC_HingeConstraintSettings* settings);
 JPC_API void JPC_HingeConstraintSettings_default(JPC_HingeConstraintSettings* settings);
@@ -885,7 +912,8 @@ typedef struct JPC_DistanceConstraintSettings {
 
 
 	float MinDistance;
 	float MinDistance;
 	float MaxDistance;
 	float MaxDistance;
-	// TODO: Spring settings
+
+	JPC_SpringSettings LimitsSpringSettings;
 } JPC_DistanceConstraintSettings;
 } JPC_DistanceConstraintSettings;
 
 
 JPC_API void JPC_DistanceConstraintSettings_default(JPC_DistanceConstraintSettings* settings);
 JPC_API void JPC_DistanceConstraintSettings_default(JPC_DistanceConstraintSettings* settings);
@@ -916,9 +944,12 @@ typedef struct JPC_SliderConstraintSettings {
 
 
 	float LimitsMin;
 	float LimitsMin;
 	float LimitsMax;
 	float LimitsMax;
-	// TODO: Spring settings
+
+	JPC_SpringSettings LimitsSpringSettings;
+
 	float MaxFrictionForce;
 	float MaxFrictionForce;
-	// TODO: Motor settings
+
+	JPC_MotorSettings MotorSettings;
 } JPC_SliderConstraintSettings;
 } JPC_SliderConstraintSettings;
 
 
 JPC_API void JPC_SliderConstraintSettings_default(JPC_SliderConstraintSettings* settings);
 JPC_API void JPC_SliderConstraintSettings_default(JPC_SliderConstraintSettings* settings);

+ 66 - 8
JoltCImpl/JoltC.cpp

@@ -96,6 +96,8 @@ ENUM_CONVERSION(JPC_MotionQuality, JPH::EMotionQuality)
 ENUM_CONVERSION(JPC_OverrideMassProperties, JPH::EOverrideMassProperties)
 ENUM_CONVERSION(JPC_OverrideMassProperties, JPH::EOverrideMassProperties)
 ENUM_CONVERSION(JPC_ShapeType, JPH::EShapeType)
 ENUM_CONVERSION(JPC_ShapeType, JPH::EShapeType)
 ENUM_CONVERSION(JPC_ShapeSubType, JPH::EShapeSubType)
 ENUM_CONVERSION(JPC_ShapeSubType, JPH::EShapeSubType)
+ENUM_CONVERSION(JPC_SpringMode, JPH::ESpringMode)
+ENUM_CONVERSION(JPC_MotorState, JPH::EMotorState)
 
 
 OPAQUE_WRAPPER(JPC_PhysicsSystem, JPH::PhysicsSystem)
 OPAQUE_WRAPPER(JPC_PhysicsSystem, JPH::PhysicsSystem)
 DESTRUCTOR(JPC_PhysicsSystem)
 DESTRUCTOR(JPC_PhysicsSystem)
@@ -1119,6 +1121,62 @@ JPC_API void JPC_ConstraintSettings_default(JPC_ConstraintSettings* settings) {
 	JPC_ConstraintSettings_to_jpc(settings, &defaultSettings);
 	JPC_ConstraintSettings_to_jpc(settings, &defaultSettings);
 }
 }
 
 
+////////////////////////////////////////////////////////////////////////////////
+// SpringSettings
+
+JPC_IMPL void JPC_SpringSettings_to_jpc(
+	JPC_SpringSettings* outJpc,
+	const JPH::SpringSettings* inJph)
+{
+	outJpc->Mode = to_jpc(inJph->mMode);
+	outJpc->FrequencyOrStiffness = inJph->mFrequency;
+	outJpc->Damping = inJph->mDamping;
+}
+
+JPC_IMPL void JPC_SpringSettings_to_jph(
+	const JPC_SpringSettings* inJpc,
+	JPH::SpringSettings* outJph)
+{
+	outJph->mMode = to_jph(inJpc->Mode);
+	outJph->mFrequency = inJpc->FrequencyOrStiffness;
+	outJph->mDamping = inJpc->Damping;
+}
+
+JPC_API void JPC_SpringSettings_default(JPC_SpringSettings* settings) {
+	JPH::SpringSettings defaultSettings{};
+	JPC_SpringSettings_to_jpc(settings, &defaultSettings);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// MotorSettings
+
+JPC_IMPL void JPC_MotorSettings_to_jpc(
+	JPC_MotorSettings* outJpc,
+	const JPH::MotorSettings* inJph)
+{
+	JPC_SpringSettings_to_jpc(&outJpc->SpringSettings, &inJph->mSpringSettings);
+	outJpc->MinForceLimit = inJph->mMinForceLimit;
+	outJpc->MaxForceLimit = inJph->mMaxForceLimit;
+	outJpc->MinTorqueLimit = inJph->mMinTorqueLimit;
+	outJpc->MaxTorqueLimit = inJph->mMaxTorqueLimit;
+}
+
+JPC_IMPL void JPC_MotorSettings_to_jph(
+	const JPC_MotorSettings* inJpc,
+	JPH::MotorSettings* outJph)
+{
+	JPC_SpringSettings_to_jph(&inJpc->SpringSettings, &outJph->mSpringSettings);
+	outJph->mMinForceLimit = inJpc->MinForceLimit;
+	outJph->mMaxForceLimit = inJpc->MaxForceLimit;
+	outJph->mMinTorqueLimit = inJpc->MinTorqueLimit;
+	outJph->mMaxTorqueLimit = inJpc->MaxTorqueLimit;
+}
+
+JPC_API void JPC_MotorSettings_default(JPC_MotorSettings* settings) {
+	JPH::MotorSettings defaultSettings{};
+	JPC_MotorSettings_to_jpc(settings, &defaultSettings);
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////
 // FixedConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
 // FixedConstraintSettings -> TwoBodyConstraintSettings -> ConstraintSettings
 
 
@@ -1249,9 +1307,9 @@ JPC_IMPL void JPC_HingeConstraintSettings_to_jpc(
 	outJpc->NormalAxis2 = to_jpc(inJph->mNormalAxis2);
 	outJpc->NormalAxis2 = to_jpc(inJph->mNormalAxis2);
 	outJpc->LimitsMin = inJph->mLimitsMin;
 	outJpc->LimitsMin = inJph->mLimitsMin;
 	outJpc->LimitsMax = inJph->mLimitsMax;
 	outJpc->LimitsMax = inJph->mLimitsMax;
-	// TODO: Spring settings
+	JPC_SpringSettings_to_jpc(&outJpc->LimitsSpringSettings, &inJph->mLimitsSpringSettings);
 	outJpc->MaxFrictionTorque = inJph->mMaxFrictionTorque;
 	outJpc->MaxFrictionTorque = inJph->mMaxFrictionTorque;
-	// TODO: Spring settings
+	JPC_MotorSettings_to_jpc(&outJpc->MotorSettings, &inJph->mMotorSettings);
 }
 }
 
 
 JPC_IMPL void JPC_HingeConstraintSettings_to_jph(
 JPC_IMPL void JPC_HingeConstraintSettings_to_jph(
@@ -1269,9 +1327,9 @@ JPC_IMPL void JPC_HingeConstraintSettings_to_jph(
 	outJph->mNormalAxis2 = to_jph(inJpc->NormalAxis2);
 	outJph->mNormalAxis2 = to_jph(inJpc->NormalAxis2);
 	outJph->mLimitsMin = inJpc->LimitsMin;
 	outJph->mLimitsMin = inJpc->LimitsMin;
 	outJph->mLimitsMax = inJpc->LimitsMax;
 	outJph->mLimitsMax = inJpc->LimitsMax;
-	// TODO: Spring settings
+	JPC_SpringSettings_to_jph(&inJpc->LimitsSpringSettings, &outJph->mLimitsSpringSettings);
 	outJph->mMaxFrictionTorque = inJpc->MaxFrictionTorque;
 	outJph->mMaxFrictionTorque = inJpc->MaxFrictionTorque;
-	// TODO: Motor settings
+	JPC_MotorSettings_to_jph(&inJpc->MotorSettings, &outJph->mMotorSettings);
 }
 }
 
 
 JPC_API void JPC_HingeConstraintSettings_default(JPC_HingeConstraintSettings* settings) {
 JPC_API void JPC_HingeConstraintSettings_default(JPC_HingeConstraintSettings* settings) {
@@ -1358,9 +1416,9 @@ JPC_IMPL void JPC_SliderConstraintSettings_to_jpc(
 	outJpc->NormalAxis2 = to_jpc(inJph->mNormalAxis2);
 	outJpc->NormalAxis2 = to_jpc(inJph->mNormalAxis2);
 	outJpc->LimitsMin = inJph->mLimitsMin;
 	outJpc->LimitsMin = inJph->mLimitsMin;
 	outJpc->LimitsMax = inJph->mLimitsMax;
 	outJpc->LimitsMax = inJph->mLimitsMax;
-	// TODO: Spring settings
+	JPC_SpringSettings_to_jpc(&outJpc->LimitsSpringSettings, &inJph->mLimitsSpringSettings);
 	outJpc->MaxFrictionForce = inJph->mMaxFrictionForce;
 	outJpc->MaxFrictionForce = inJph->mMaxFrictionForce;
-	// TODO: Spring settings
+	JPC_MotorSettings_to_jpc(&outJpc->MotorSettings, &inJph->mMotorSettings);
 }
 }
 
 
 JPC_IMPL void JPC_SliderConstraintSettings_to_jph(
 JPC_IMPL void JPC_SliderConstraintSettings_to_jph(
@@ -1379,9 +1437,9 @@ JPC_IMPL void JPC_SliderConstraintSettings_to_jph(
 	outJph->mNormalAxis2 = to_jph(inJpc->NormalAxis2);
 	outJph->mNormalAxis2 = to_jph(inJpc->NormalAxis2);
 	outJph->mLimitsMin = inJpc->LimitsMin;
 	outJph->mLimitsMin = inJpc->LimitsMin;
 	outJph->mLimitsMax = inJpc->LimitsMax;
 	outJph->mLimitsMax = inJpc->LimitsMax;
-	// TODO: Spring settings
+	JPC_SpringSettings_to_jph(&inJpc->LimitsSpringSettings, &outJph->mLimitsSpringSettings);
 	outJph->mMaxFrictionForce = inJpc->MaxFrictionForce;
 	outJph->mMaxFrictionForce = inJpc->MaxFrictionForce;
-	// TODO: Motor settings
+	JPC_MotorSettings_to_jph(&inJpc->MotorSettings, &outJph->mMotorSettings);
 }
 }
 
 
 JPC_API void JPC_SliderConstraintSettings_default(JPC_SliderConstraintSettings* settings) {
 JPC_API void JPC_SliderConstraintSettings_default(JPC_SliderConstraintSettings* settings) {