Browse Source

gettin all analytical now

Lucien Greathouse 1 year ago
parent
commit
94b9e078d8
4 changed files with 40 additions and 2 deletions
  1. 8 0
      HelloWorld/main.cpp
  2. 3 2
      JoltC/Enums.h
  3. 7 0
      JoltC/Functions.h
  4. 22 0
      JoltC/JoltC.cpp

+ 8 - 0
HelloWorld/main.cpp

@@ -125,7 +125,15 @@ int main() {
 	// TODO: creating bodies
 	// TODO: PhysicsSystem::OptimizeBroadPhase
 
+	const float cDeltaTime = 1.0f / 60.0f;
+	const int cCollisionSteps = 1;
+
 	// TODO: Update loop
+	for (int i = 0; i < 100; i++) {
+		JPC_PhysicsSystem_Update(physics_system, cDeltaTime, cCollisionSteps, temp_allocator, job_system);
+	}
+
+	// TODO: RemoveBody and DestroyBody
 
 	JPC_PhysicsSystem_delete(physics_system);
 	JPC_JobSystemThreadPool_delete(job_system);

+ 3 - 2
JoltC/Enums.h

@@ -97,12 +97,13 @@ 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 enum JPC_PhysicsUpdateError: uint32_t {
+typedef uint32_t JPC_PhysicsUpdateError;
+typedef enum JPC_EPhysicsUpdateError: uint32_t {
     JPC_PHYSICS_UPDATE_ERROR_NONE                     = 0,
     JPC_PHYSICS_UPDATE_ERROR_MANIFOLD_CACHE_FULL      = 1 << 0,
     JPC_PHYSICS_UPDATE_ERROR_BODY_PAIR_CACHE_FULL     = 1 << 1,
     JPC_PHYSICS_UPDATE_ERROR_CONTACT_CONSTRAINTS_FULL = 1 << 2,
-} JPC_PhysicsUpdateError;
+} JPC_EPhysicsUpdateError;
 
 ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_NONE, JPH::EPhysicsUpdateError::None)
 ENSURE_ENUM_EQ(JPC_PHYSICS_UPDATE_ERROR_MANIFOLD_CACHE_FULL, JPH::EPhysicsUpdateError::ManifoldCacheFull)

+ 7 - 0
JoltC/Functions.h

@@ -98,6 +98,13 @@ JPC_API void JPC_PhysicsSystem_Init(
 	JPC_ObjectVsBroadPhaseLayerFilter inObjectVsBroadPhaseLayerFilter,
 	JPC_ObjectLayerPairFilter inObjectLayerPairFilter);
 
+JPC_API JPC_PhysicsUpdateError JPC_PhysicsSystem_Update(
+	JPC_PhysicsSystem* self,
+	float inDeltaTime,
+	int inCollisionSteps,
+	JPC_TempAllocatorImpl *inTempAllocator, // FIXME: un-specialize
+	JPC_JobSystemThreadPool *inJobSystem); // FIXME: un-specialize
+
 #ifdef __cplusplus
 }
 #endif

+ 22 - 0
JoltC/JoltC.cpp

@@ -19,6 +19,12 @@
 		delete to_jph(object); \
 	}
 
+template<typename E>
+constexpr auto to_integral(E e) -> typename std::underlying_type<E>::type 
+{
+	return static_cast<typename std::underlying_type<E>::type>(e);
+}
+
 JPC_API void JPC_RegisterDefaultAllocator() {
 	JPH::RegisterDefaultAllocator();
 }
@@ -176,4 +182,20 @@ JPC_API void JPC_PhysicsSystem_Init(
 		impl_inBroadPhaseLayerInterface,
 		impl_inObjectVsBroadPhaseLayerFilter,
 		impl_inObjectLayerPairFilter);
+}
+
+JPC_API JPC_PhysicsUpdateError JPC_PhysicsSystem_Update(
+	JPC_PhysicsSystem* self,
+	float inDeltaTime,
+	int inCollisionSteps,
+	JPC_TempAllocatorImpl *inTempAllocator,
+	JPC_JobSystemThreadPool *inJobSystem)
+{
+	auto res = to_jph(self)->Update(
+		inDeltaTime,
+		inCollisionSteps,
+		to_jph(inTempAllocator),
+		to_jph(inJobSystem));
+
+	return to_integral(res);
 }