diff --git a/src/api/l_physics_world.c b/src/api/l_physics_world.c index 0f092b7b..92d86644 100644 --- a/src/api/l_physics_world.c +++ b/src/api/l_physics_world.c @@ -96,7 +96,7 @@ static bool filterCallback(void* userdata, World* world, Collider* a, Collider* return true; } -static void enterCallback(void* userdata, World* world, Collider* a, Collider* b) { +static void enterCallback(void* userdata, World* world, Collider* a, Collider* b, Contact* contact) { lua_State* L = userdata; luax_pushstash(L, "lovr.world.enter"); luax_pushtype(L, World, world); @@ -104,7 +104,8 @@ static void enterCallback(void* userdata, World* world, Collider* a, Collider* b lua_remove(L, -2); luax_pushtype(L, Collider, a); luax_pushtype(L, Collider, b); - if (lua_pcall(L, 2, 0, 0)) { + luax_pushtype(L, Contact, contact); + if (lua_pcall(L, 3, 0, 0)) { lua_settop(L, 3); // Only keep first error } } diff --git a/src/modules/physics/physics.c b/src/modules/physics/physics.c index 5e0cd4c4..a92378de 100644 --- a/src/modules/physics/physics.c +++ b/src/modules/physics/physics.c @@ -243,7 +243,11 @@ static void onContactAdded(void* userdata, const JPH_Body* body1, const JPH_Body Collider* b = (Collider*) (uintptr_t) JPH_Body_GetUserData((JPH_Body*) body2); mtx_lock(&world->lock); thread.locked = true; - world->callbacks.enter(world->callbacks.userdata, world, a, b); + world->contact.colliderA = a; + world->contact.colliderB = b; + world->contact.manifold = manifold; + world->contact.settings = settings; + world->callbacks.enter(world->callbacks.userdata, world, a, b, &world->contact); thread.locked = false; mtx_unlock(&world->lock); } diff --git a/src/modules/physics/physics.h b/src/modules/physics/physics.h index d93aba3d..267d78ed 100644 --- a/src/modules/physics/physics.h +++ b/src/modules/physics/physics.h @@ -34,7 +34,7 @@ void lovrPhysicsDestroy(void); typedef struct { bool (*filter)(void* userdata, World* world, Collider* a, Collider* b); - void (*enter)(void* userdata, World* world, Collider* a, Collider* b); + void (*enter)(void* userdata, World* world, Collider* a, Collider* b, Contact* contact); void (*exit)(void* userdata, World* world, Collider* a, Collider* b); void (*contact)(void* userdata, World* world, Collider* a, Collider* b, Contact* contact); void* userdata;