mirror of
https://github.com/bjornbytes/lovr.git
synced 2024-07-20 04:33:36 +00:00
Add Contact to enter callback;
This commit is contained in:
parent
6b18734e83
commit
b05c7a1c63
|
@ -96,7 +96,7 @@ static bool filterCallback(void* userdata, World* world, Collider* a, Collider*
|
||||||
return true;
|
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;
|
lua_State* L = userdata;
|
||||||
luax_pushstash(L, "lovr.world.enter");
|
luax_pushstash(L, "lovr.world.enter");
|
||||||
luax_pushtype(L, World, world);
|
luax_pushtype(L, World, world);
|
||||||
|
@ -104,7 +104,8 @@ static void enterCallback(void* userdata, World* world, Collider* a, Collider* b
|
||||||
lua_remove(L, -2);
|
lua_remove(L, -2);
|
||||||
luax_pushtype(L, Collider, a);
|
luax_pushtype(L, Collider, a);
|
||||||
luax_pushtype(L, Collider, b);
|
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
|
lua_settop(L, 3); // Only keep first error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
Collider* b = (Collider*) (uintptr_t) JPH_Body_GetUserData((JPH_Body*) body2);
|
||||||
mtx_lock(&world->lock);
|
mtx_lock(&world->lock);
|
||||||
thread.locked = true;
|
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;
|
thread.locked = false;
|
||||||
mtx_unlock(&world->lock);
|
mtx_unlock(&world->lock);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ void lovrPhysicsDestroy(void);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool (*filter)(void* userdata, World* world, Collider* a, Collider* b);
|
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 (*exit)(void* userdata, World* world, Collider* a, Collider* b);
|
||||||
void (*contact)(void* userdata, World* world, Collider* a, Collider* b, Contact* contact);
|
void (*contact)(void* userdata, World* world, Collider* a, Collider* b, Contact* contact);
|
||||||
void* userdata;
|
void* userdata;
|
||||||
|
|
Loading…
Reference in a new issue