Lucien Greathouse 6 месяцев назад
Родитель
Сommit
4cb4a72bd9
9 измененных файлов с 320 добавлено и 168 удалено
  1. 2 0
      .cargo/config.toml
  2. 0 146
      JoltC/Enums.h
  3. 155 1
      JoltC/Generated.h
  4. 2 4
      JoltCImpl/JoltC.cpp
  5. 3 0
      generate/Cargo.toml
  6. 11 0
      generate/build.rs
  7. 11 2
      generate/src/emit.rs
  8. 34 15
      generate/src/macros.rs
  9. 102 0
      input/Enums.h

+ 2 - 0
.cargo/config.toml

@@ -0,0 +1,2 @@
+[env]
+CARGO_WORKSPACE_DIR = { value = "", relative = true }

+ 0 - 146
JoltC/Enums.h

@@ -16,152 +16,6 @@ ENSURE_EQUAL(JPC_DEFAULT_PENETRATION_TOLERANCE, JPH::cDefaultPenetrationToleranc
 ENSURE_EQUAL(JPC_DEFAULT_CONVEX_RADIUS, JPH::cDefaultConvexRadius)
 ENSURE_EQUAL(JPC_CAPSULE_PROJECTION_SLOP, JPH::cCapsuleProjectionSlop)
 
-typedef enum JPC_ShapeType: uint8_t {
-	JPC_SHAPE_TYPE_CONVEX,
-	JPC_SHAPE_TYPE_COMPOUND,
-	JPC_SHAPE_TYPE_DECORATED,
-	JPC_SHAPE_TYPE_MESH,
-	JPC_SHAPE_TYPE_HEIGHT_FIELD,
-	JPC_SHAPE_TYPE_SOFTBODY,
-	JPC_SHAPE_TYPE_USER1,
-	JPC_SHAPE_TYPE_USER2,
-	JPC_SHAPE_TYPE_USER3,
-	JPC_SHAPE_TYPE_USER4,
-} JPC_ShapeType;
-
-ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_CONVEX, JPH::EShapeType::Convex)
-ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_COMPOUND, JPH::EShapeType::Compound)
-ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_DECORATED, JPH::EShapeType::Decorated)
-ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_MESH, JPH::EShapeType::Mesh)
-ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_HEIGHT_FIELD, JPH::EShapeType::HeightField)
-ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_USER1, JPH::EShapeType::User1)
-ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_USER2, JPH::EShapeType::User2)
-ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_USER3, JPH::EShapeType::User3)
-ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_USER4, JPH::EShapeType::User4)
-
-typedef enum JPC_ShapeSubType: uint8_t {
-	JPC_SHAPE_SUB_TYPE_SPHERE,
-	JPC_SHAPE_SUB_TYPE_BOX,
-	JPC_SHAPE_SUB_TYPE_TRIANGLE,
-	JPC_SHAPE_SUB_TYPE_CAPSULE,
-	JPC_SHAPE_SUB_TYPE_TAPEREDCAPSULE,
-	JPC_SHAPE_SUB_TYPE_CYLINDER,
-	JPC_SHAPE_SUB_TYPE_CONVEX_HULL,
-	JPC_SHAPE_SUB_TYPE_STATIC_COMPOUND,
-	JPC_SHAPE_SUB_TYPE_MUTABLE_COMPOUND,
-	JPC_SHAPE_SUB_TYPE_ROTATED_TRANSLATED,
-	JPC_SHAPE_SUB_TYPE_SCALED,
-	JPC_SHAPE_SUB_TYPE_OFFSET_CENTER_OF_MASS,
-	JPC_SHAPE_SUB_TYPE_MESH,
-	JPC_SHAPE_SUB_TYPE_HEIGHT_FIELD,
-	JPC_SHAPE_SUB_TYPE_SOFT_BODY,
-	JPC_SHAPE_SUB_TYPE_USER1,
-	JPC_SHAPE_SUB_TYPE_USER2,
-	JPC_SHAPE_SUB_TYPE_USER3,
-	JPC_SHAPE_SUB_TYPE_USER4,
-	JPC_SHAPE_SUB_TYPE_USER5,
-	JPC_SHAPE_SUB_TYPE_USER6,
-	JPC_SHAPE_SUB_TYPE_USER7,
-	JPC_SHAPE_SUB_TYPE_USER8,
-	JPC_SHAPE_SUB_TYPE_USER_CONVEX1,
-	JPC_SHAPE_SUB_TYPE_USER_CONVEX2,
-	JPC_SHAPE_SUB_TYPE_USER_CONVEX3,
-	JPC_SHAPE_SUB_TYPE_USER_CONVEX4,
-	JPC_SHAPE_SUB_TYPE_USER_CONVEX5,
-	JPC_SHAPE_SUB_TYPE_USER_CONVEX6,
-	JPC_SHAPE_SUB_TYPE_USER_CONVEX7,
-	JPC_SHAPE_SUB_TYPE_USER_CONVEX8,
-} JPC_ShapeSubType;
-
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_SPHERE, JPH::EShapeSubType::Sphere)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_BOX, JPH::EShapeSubType::Box)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_TRIANGLE, JPH::EShapeSubType::Triangle)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_CAPSULE, JPH::EShapeSubType::Capsule)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_TAPEREDCAPSULE, JPH::EShapeSubType::TaperedCapsule)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_CYLINDER, JPH::EShapeSubType::Cylinder)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_CONVEX_HULL, JPH::EShapeSubType::ConvexHull)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_STATIC_COMPOUND, JPH::EShapeSubType::StaticCompound)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_MUTABLE_COMPOUND, JPH::EShapeSubType::MutableCompound)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_ROTATED_TRANSLATED, JPH::EShapeSubType::RotatedTranslated)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_SCALED, JPH::EShapeSubType::Scaled)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_OFFSET_CENTER_OF_MASS, JPH::EShapeSubType::OffsetCenterOfMass)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_MESH, JPH::EShapeSubType::Mesh)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_HEIGHT_FIELD, JPH::EShapeSubType::HeightField)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_SOFT_BODY, JPH::EShapeSubType::SoftBody)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER1, JPH::EShapeSubType::User1)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER2, JPH::EShapeSubType::User2)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER3, JPH::EShapeSubType::User3)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER4, JPH::EShapeSubType::User4)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER5, JPH::EShapeSubType::User5)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER6, JPH::EShapeSubType::User6)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER7, JPH::EShapeSubType::User7)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER8, JPH::EShapeSubType::User8)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX1, JPH::EShapeSubType::UserConvex1)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX2, JPH::EShapeSubType::UserConvex2)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX3, JPH::EShapeSubType::UserConvex3)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX4, JPH::EShapeSubType::UserConvex4)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX5, JPH::EShapeSubType::UserConvex5)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX6, JPH::EShapeSubType::UserConvex6)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX7, JPH::EShapeSubType::UserConvex7)
-ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX8, JPH::EShapeSubType::UserConvex8)
-
-typedef uint32_t JPC_PhysicsUpdateError;
-const JPC_PhysicsUpdateError JPC_PHYSICS_UPDATE_ERROR_NONE                     = 0;
-const JPC_PhysicsUpdateError JPC_PHYSICS_UPDATE_ERROR_MANIFOLD_CACHE_FULL      = 1 << 0;
-const JPC_PhysicsUpdateError JPC_PHYSICS_UPDATE_ERROR_BODY_PAIR_CACHE_FULL     = 1 << 1;
-const JPC_PhysicsUpdateError JPC_PHYSICS_UPDATE_ERROR_CONTACT_CONSTRAINTS_FULL = 1 << 2;
-
-ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_NONE, JPH::EPhysicsUpdateError::None)
-ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_MANIFOLD_CACHE_FULL, JPH::EPhysicsUpdateError::ManifoldCacheFull)
-ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_BODY_PAIR_CACHE_FULL, JPH::EPhysicsUpdateError::BodyPairCacheFull)
-ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_CONTACT_CONSTRAINTS_FULL, JPH::EPhysicsUpdateError::ContactConstraintsFull)
-
-typedef enum JPC_ConstraintType: uint32_t {
-	JPC_CONSTRAINT_TYPE_CONSTRAINT,
-	JPC_CONSTRAINT_TYPE_TWO_BODY_CONSTRAINT,
-} JPC_ConstraintType;
-
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_TYPE_CONSTRAINT, JPH::EConstraintType::Constraint)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_TYPE_TWO_BODY_CONSTRAINT, JPH::EConstraintType::TwoBodyConstraint)
-
-typedef enum JPC_ConstraintSubType: uint32_t {
-	JPC_CONSTRAINT_SUB_TYPE_FIXED,
-	JPC_CONSTRAINT_SUB_TYPE_POINT,
-	JPC_CONSTRAINT_SUB_TYPE_HINGE,
-	JPC_CONSTRAINT_SUB_TYPE_SLIDER,
-	JPC_CONSTRAINT_SUB_TYPE_DISTANCE,
-	JPC_CONSTRAINT_SUB_TYPE_CONE,
-	JPC_CONSTRAINT_SUB_TYPE_SWING_TWIST,
-	JPC_CONSTRAINT_SUB_TYPE_SIX_DOF,
-	JPC_CONSTRAINT_SUB_TYPE_PATH,
-	JPC_CONSTRAINT_SUB_TYPE_VEHICLE,
-	JPC_CONSTRAINT_SUB_TYPE_RACK_AND_PINION,
-	JPC_CONSTRAINT_SUB_TYPE_GEAR,
-	JPC_CONSTRAINT_SUB_TYPE_PULLEY,
-	JPC_CONSTRAINT_SUB_TYPE_USER1,
-	JPC_CONSTRAINT_SUB_TYPE_USER2,
-	JPC_CONSTRAINT_SUB_TYPE_USER3,
-	JPC_CONSTRAINT_SUB_TYPE_USER4,
-} JPC_ConstraintSubType;
-
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_FIXED, JPH::EConstraintSubType::Fixed)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_POINT, JPH::EConstraintSubType::Point)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_HINGE, JPH::EConstraintSubType::Hinge)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_SLIDER, JPH::EConstraintSubType::Slider)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_DISTANCE, JPH::EConstraintSubType::Distance)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_CONE, JPH::EConstraintSubType::Cone)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_SWING_TWIST, JPH::EConstraintSubType::SwingTwist)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_SIX_DOF, JPH::EConstraintSubType::SixDOF)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_PATH, JPH::EConstraintSubType::Path)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_VEHICLE, JPH::EConstraintSubType::Vehicle)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_RACK_AND_PINION, JPH::EConstraintSubType::RackAndPinion)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_GEAR, JPH::EConstraintSubType::Gear)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_PULLEY, JPH::EConstraintSubType::Pulley)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_USER1, JPH::EConstraintSubType::User1)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_USER2, JPH::EConstraintSubType::User2)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_USER3, JPH::EConstraintSubType::User3)
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_USER4, JPH::EConstraintSubType::User4)
-
 typedef enum JPC_MotionType: uint8_t {
 	JPC_MOTION_TYPE_STATIC,
 	JPC_MOTION_TYPE_KINEMATIC,

+ 155 - 1
JoltC/Generated.h

@@ -1,10 +1,164 @@
 #pragma once
 // Generated by JoltC-generate
 
+typedef uint8_t JPC_ShapeType;
+const JPC_ShapeType JPC_SHAPE_TYPE_CONVEX = 0;
+const JPC_ShapeType JPC_SHAPE_TYPE_COMPOUND = 1;
+const JPC_ShapeType JPC_SHAPE_TYPE_DECORATED = 2;
+const JPC_ShapeType JPC_SHAPE_TYPE_MESH = 3;
+const JPC_ShapeType JPC_SHAPE_TYPE_HEIGHT_FIELD = 4;
+const JPC_ShapeType JPC_SHAPE_TYPE_SOFT_BODY = 5;
+const JPC_ShapeType JPC_SHAPE_TYPE_USER1 = 6;
+const JPC_ShapeType JPC_SHAPE_TYPE_USER2 = 7;
+const JPC_ShapeType JPC_SHAPE_TYPE_USER3 = 8;
+const JPC_ShapeType JPC_SHAPE_TYPE_USER4 = 9;
+const JPC_ShapeType JPC_SHAPE_TYPE_PLANE = 10;
+const JPC_ShapeType JPC_SHAPE_TYPE_EMPTY = 11;
+
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_CONVEX, JPH::EShapeType::Convex)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_COMPOUND, JPH::EShapeType::Compound)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_DECORATED, JPH::EShapeType::Decorated)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_MESH, JPH::EShapeType::Mesh)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_HEIGHT_FIELD, JPH::EShapeType::HeightField)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_SOFT_BODY, JPH::EShapeType::SoftBody)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_USER1, JPH::EShapeType::User1)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_USER2, JPH::EShapeType::User2)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_USER3, JPH::EShapeType::User3)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_USER4, JPH::EShapeType::User4)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_PLANE, JPH::EShapeType::Plane)
+ENSURE_ENUM_EQ(JPC_SHAPE_TYPE_EMPTY, JPH::EShapeType::Empty)
+
+typedef uint8_t JPC_ShapeSubType;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_SPHERE = 0;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_BOX = 1;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_TRIANGLE = 2;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_CAPSULE = 3;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_TAPERED_CAPSULE = 4;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_CYLINDER = 5;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_CONVEX_HULL = 6;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_STATIC_COMPOUND = 7;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_MUTABLE_COMPOUND = 8;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_ROTATED_TRANSLATED = 9;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_SCALED = 10;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_OFFSET_CENTER_OF_MASS = 11;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_MESH = 12;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_HEIGHT_FIELD = 13;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_SOFT_BODY = 14;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER1 = 15;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER2 = 16;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER3 = 17;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER4 = 18;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER5 = 19;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER6 = 20;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER7 = 21;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER8 = 22;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER_CONVEX1 = 23;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER_CONVEX2 = 24;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER_CONVEX3 = 25;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER_CONVEX4 = 26;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER_CONVEX5 = 27;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER_CONVEX6 = 28;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER_CONVEX7 = 29;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_USER_CONVEX8 = 30;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_PLANE = 31;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_TAPERED_CYLINDER = 32;
+const JPC_ShapeSubType JPC_SHAPE_SUB_TYPE_EMPTY = 33;
+
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_SPHERE, JPH::EShapeSubType::Sphere)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_BOX, JPH::EShapeSubType::Box)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_TRIANGLE, JPH::EShapeSubType::Triangle)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_CAPSULE, JPH::EShapeSubType::Capsule)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_TAPERED_CAPSULE, JPH::EShapeSubType::TaperedCapsule)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_CYLINDER, JPH::EShapeSubType::Cylinder)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_CONVEX_HULL, JPH::EShapeSubType::ConvexHull)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_STATIC_COMPOUND, JPH::EShapeSubType::StaticCompound)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_MUTABLE_COMPOUND, JPH::EShapeSubType::MutableCompound)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_ROTATED_TRANSLATED, JPH::EShapeSubType::RotatedTranslated)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_SCALED, JPH::EShapeSubType::Scaled)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_OFFSET_CENTER_OF_MASS, JPH::EShapeSubType::OffsetCenterOfMass)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_MESH, JPH::EShapeSubType::Mesh)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_HEIGHT_FIELD, JPH::EShapeSubType::HeightField)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_SOFT_BODY, JPH::EShapeSubType::SoftBody)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER1, JPH::EShapeSubType::User1)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER2, JPH::EShapeSubType::User2)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER3, JPH::EShapeSubType::User3)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER4, JPH::EShapeSubType::User4)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER5, JPH::EShapeSubType::User5)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER6, JPH::EShapeSubType::User6)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER7, JPH::EShapeSubType::User7)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER8, JPH::EShapeSubType::User8)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX1, JPH::EShapeSubType::UserConvex1)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX2, JPH::EShapeSubType::UserConvex2)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX3, JPH::EShapeSubType::UserConvex3)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX4, JPH::EShapeSubType::UserConvex4)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX5, JPH::EShapeSubType::UserConvex5)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX6, JPH::EShapeSubType::UserConvex6)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX7, JPH::EShapeSubType::UserConvex7)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_USER_CONVEX8, JPH::EShapeSubType::UserConvex8)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_PLANE, JPH::EShapeSubType::Plane)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_TAPERED_CYLINDER, JPH::EShapeSubType::TaperedCylinder)
+ENSURE_ENUM_EQ(JPC_SHAPE_SUB_TYPE_EMPTY, JPH::EShapeSubType::Empty)
+
+typedef uint32_t JPC_PhysicsUpdateError;
+const JPC_PhysicsUpdateError JPC_PHYSICS_UPDATE_ERROR_NONE = 0;
+const JPC_PhysicsUpdateError JPC_PHYSICS_UPDATE_ERROR_MANIFOLD_CACHE_FULL = 1 << 0;
+const JPC_PhysicsUpdateError JPC_PHYSICS_UPDATE_ERROR_BODY_PAIR_CACHE_FULL = 1 << 1;
+const JPC_PhysicsUpdateError JPC_PHYSICS_UPDATE_ERROR_CONTACT_CONSTRAINTS_FULL = 1 << 2;
+
+ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_NONE, JPH::EPhysicsUpdateError::None)
+ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_MANIFOLD_CACHE_FULL, JPH::EPhysicsUpdateError::ManifoldCacheFull)
+ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_BODY_PAIR_CACHE_FULL, JPH::EPhysicsUpdateError::BodyPairCacheFull)
+ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_CONTACT_CONSTRAINTS_FULL, JPH::EPhysicsUpdateError::ContactConstraintsFull)
+
+typedef uint32_t JPC_ConstraintType;
+const JPC_ConstraintType JPC_CONSTRAINT_TYPE_CONSTRAINT = 0;
+const JPC_ConstraintType JPC_CONSTRAINT_TYPE_TWO_BODY_CONSTRAINT = 1;
+
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_TYPE_CONSTRAINT, JPH::EConstraintType::Constraint)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_TYPE_TWO_BODY_CONSTRAINT, JPH::EConstraintType::TwoBodyConstraint)
+
+typedef uint32_t JPC_ConstraintSubType;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_FIXED = 0;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_POINT = 1;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_HINGE = 2;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_SLIDER = 3;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_DISTANCE = 4;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_CONE = 5;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_SWING_TWIST = 6;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_SIX_DOF = 7;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_PATH = 8;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_VEHICLE = 9;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_RACK_AND_PINION = 10;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_GEAR = 11;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_PULLEY = 12;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_USER1 = 13;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_USER2 = 14;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_USER3 = 15;
+const JPC_ConstraintSubType JPC_CONSTRAINT_SUB_TYPE_USER4 = 16;
+
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_FIXED, JPH::EConstraintSubType::Fixed)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_POINT, JPH::EConstraintSubType::Point)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_HINGE, JPH::EConstraintSubType::Hinge)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_SLIDER, JPH::EConstraintSubType::Slider)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_DISTANCE, JPH::EConstraintSubType::Distance)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_CONE, JPH::EConstraintSubType::Cone)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_SWING_TWIST, JPH::EConstraintSubType::SwingTwist)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_SIX_DOF, JPH::EConstraintSubType::SixDOF)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_PATH, JPH::EConstraintSubType::Path)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_VEHICLE, JPH::EConstraintSubType::Vehicle)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_RACK_AND_PINION, JPH::EConstraintSubType::RackAndPinion)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_GEAR, JPH::EConstraintSubType::Gear)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_PULLEY, JPH::EConstraintSubType::Pulley)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_USER1, JPH::EConstraintSubType::User1)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_USER2, JPH::EConstraintSubType::User2)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_USER3, JPH::EConstraintSubType::User3)
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SUB_TYPE_USER4, JPH::EConstraintSubType::User4)
+
 typedef uint32_t JPC_ConstraintSpace;
 const JPC_ConstraintSpace JPC_CONSTRAINT_SPACE_LOCAL_TO_BODY_COM = 0;
-ENSURE_ENUM_EQ(JPC_CONSTRAINT_SPACE_LOCAL_TO_BODY_COM, JPH::EConstraintSpace::LocalToBodyCOM)
 const JPC_ConstraintSpace JPC_CONSTRAINT_SPACE_WORLD_SPACE = 1;
+
+ENSURE_ENUM_EQ(JPC_CONSTRAINT_SPACE_LOCAL_TO_BODY_COM, JPH::EConstraintSpace::LocalToBodyCOM)
 ENSURE_ENUM_EQ(JPC_CONSTRAINT_SPACE_WORLD_SPACE, JPH::EConstraintSpace::WorldSpace)
 
 typedef struct JPC_ConstraintSettings {

+ 2 - 4
JoltCImpl/JoltC.cpp

@@ -88,8 +88,6 @@ ENUM_CONVERSION(JPC_Activation, JPH::EActivation)
 ENUM_CONVERSION(JPC_BodyType, JPH::EBodyType)
 ENUM_CONVERSION(JPC_MotionQuality, JPH::EMotionQuality)
 ENUM_CONVERSION(JPC_OverrideMassProperties, JPH::EOverrideMassProperties)
-ENUM_CONVERSION(JPC_ShapeType, JPH::EShapeType)
-ENUM_CONVERSION(JPC_ShapeSubType, JPH::EShapeSubType)
 
 OPAQUE_WRAPPER(JPC_PhysicsSystem, JPH::PhysicsSystem)
 DESTRUCTOR(JPC_PhysicsSystem)
@@ -787,11 +785,11 @@ JPC_API void JPC_Shape_SetUserData(JPC_Shape* self, uint64_t userData) {
 }
 
 JPC_API JPC_ShapeType JPC_Shape_GetType(const JPC_Shape* self) {
-	return to_jpc(to_jph(self)->GetType());
+	return static_cast<JPC_ShapeType>(to_jph(self)->GetType());
 }
 
 JPC_API JPC_ShapeSubType JPC_Shape_GetSubType(const JPC_Shape* self) {
-	return to_jpc(to_jph(self)->GetSubType());
+	return static_cast<JPC_ShapeSubType>(to_jph(self)->GetSubType());
 }
 
 JPC_API JPC_Vec3 JPC_Shape_GetCenterOfMass(const JPC_Shape* self) {

+ 3 - 0
generate/Cargo.toml

@@ -13,3 +13,6 @@ fs-err = "2.11.0"
 heck = "0.5.0"
 regex = "1.10.4"
 walkdir = "2.5.0"
+
+[build-dependencies]
+fs-err = "2.11.0"

+ 11 - 0
generate/build.rs

@@ -0,0 +1,11 @@
+use std::path::PathBuf;
+
+fn main() {
+    let mut input_dir = PathBuf::from(env!("CARGO_WORKSPACE_DIR"));
+    input_dir.push("input");
+
+    for entry in fs_err::read_dir(input_dir).unwrap() {
+        let entry = entry.unwrap();
+        println!("cargo:rerun-if-changed={}", entry.path().display());
+    }
+}

+ 11 - 2
generate/src/emit.rs

@@ -179,7 +179,7 @@ pub struct MirrorEnum {
 pub struct EnumMember {
     pub jpc_name: String,
     pub jph_name: String,
-    pub value: &'static str,
+    pub value: String,
 }
 
 impl MirrorEnum {
@@ -194,13 +194,22 @@ impl MirrorEnum {
         writeln!(out, "typedef {repr} {jpc_name};")?;
         for member in members {
             let EnumMember {
-                jph_name: jph_member,
                 jpc_name: jpc_member,
                 value,
                 ..
             } = member;
 
             writeln!(out, "const {jpc_name} {jpc_member} = {value};")?;
+        }
+        writeln!(out)?;
+
+        for member in members {
+            let EnumMember {
+                jph_name: jph_member,
+                jpc_name: jpc_member,
+                ..
+            } = member;
+
             writeln!(out, "ENSURE_ENUM_EQ({jpc_member}, {jph_member})")?;
         }
         writeln!(out)?;

+ 34 - 15
generate/src/macros.rs

@@ -67,28 +67,47 @@ macro_rules! include_mirrored_structs {
 macro_rules! mirrored_enums {
     (
         $(enum $enum_name:ident : $repr:ident {
-            $($member_name:ident = $member_value:expr,)*
+            $($member_name:ident $(= $member_value:expr)?,)*
         };)*
     ) => {
+
         vec![$(
-            MirrorEnum {
-                jph_name: concat!("JPH::E", stringify!($enum_name)),
-                jpc_name: concat!("JPC_", stringify!($enum_name)),
-                repr: stringify!($repr),
-                members: vec![$(
-                    EnumMember {
-                        jph_name: format!("JPH::E{}::{}", stringify!($enum_name), stringify!($member_name)),
-                        jpc_name: format!("JPC_{}_{}",
-                            heck::AsShoutySnakeCase(stringify!($enum_name)),
-                            heck::AsShoutySnakeCase(stringify!($member_name))),
-                        value: stringify!($member_value),
-                    },
-                )*],
-            }
+            #[allow(unused_variables, unused_assignments)]
+            {
+                let mut counter = 0;
+
+                MirrorEnum {
+                    jph_name: concat!("JPH::E", stringify!($enum_name)),
+                    jpc_name: concat!("JPC_", stringify!($enum_name)),
+                    repr: stringify!($repr),
+                    members: vec![$(
+                        EnumMember {
+                            jph_name: format!("JPH::E{}::{}", stringify!($enum_name), stringify!($member_name)),
+                            jpc_name: format!("JPC_{}_{}",
+                                heck::AsShoutySnakeCase(stringify!($enum_name)),
+                                heck::AsShoutySnakeCase(stringify!($member_name))),
+                            value: enum_value!(counter, $($member_value)?),
+                        },
+                    )*],
+                }
+            },
         )*]
     }
 }
 
+macro_rules! enum_value {
+    ($counter:ident, $member_value:expr) => {{
+        $counter = $member_value + 1;
+        stringify!($member_value).to_owned()
+    }};
+
+    ($counter:ident,) => {{
+        let val = $counter.to_string();
+        $counter += 1;
+        val
+    }};
+}
+
 #[cps::cps]
 macro_rules! include_mirrored_enums {
     () =>

+ 102 - 0
input/Enums.h

@@ -1,3 +1,105 @@
+enum ShapeType: uint8_t {
+	Convex,
+	Compound,
+	Decorated,
+	Mesh,
+	HeightField,
+	SoftBody,
+
+	// User defined shapes
+	User1,
+	User2,
+	User3,
+	User4,
+
+	Plane,
+	Empty,
+};
+
+enum ShapeSubType: uint8_t {
+	// Convex shapes
+	Sphere,
+	Box,
+	Triangle,
+	Capsule,
+	TaperedCapsule,
+	Cylinder,
+	ConvexHull,
+
+	// Compound shapes
+	StaticCompound,
+	MutableCompound,
+
+	// Decorated shapes
+	RotatedTranslated,
+	Scaled,
+	OffsetCenterOfMass,
+
+	// Other shapes
+	Mesh,
+	HeightField,
+	SoftBody,
+
+	// User defined shapes
+	User1,
+	User2,
+	User3,
+	User4,
+	User5,
+	User6,
+	User7,
+	User8,
+
+	// User defined convex shapes
+	UserConvex1,
+	UserConvex2,
+	UserConvex3,
+	UserConvex4,
+	UserConvex5,
+	UserConvex6,
+	UserConvex7,
+	UserConvex8,
+
+	// Other shapes
+	Plane,
+	TaperedCylinder,
+	Empty,
+};
+
+enum PhysicsUpdateError: uint32_t {
+	None = 0,
+	ManifoldCacheFull = 1 << 0,
+	BodyPairCacheFull = 1 << 1,
+	ContactConstraintsFull = 1 << 2,
+};
+
+enum ConstraintType: uint32_t {
+	Constraint,
+	TwoBodyConstraint,
+};
+
+enum ConstraintSubType: uint32_t {
+	Fixed,
+	Point,
+	Hinge,
+	Slider,
+	Distance,
+	Cone,
+	SwingTwist,
+	SixDOF,
+	Path,
+	Vehicle,
+	RackAndPinion,
+	Gear,
+	Pulley,
+
+	// User defined constraint types start here
+	User1,
+	User2,
+	User3,
+	User4,
+};
+
 enum ConstraintSpace: uint32_t {
 	LocalToBodyCOM = 0,
 	WorldSpace = 1,