1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-05 13:53:38 +00:00

Add Contact to enter callback;

This commit is contained in:
bjorn 2024-06-13 21:08:41 -07:00
parent 6b18734e83
commit b05c7a1c63
3 changed files with 9 additions and 4 deletions

View file

@ -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
}
}

View file

@ -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);
}

View file

@ -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;