From a511064987e927812c818e1f1b5f68d1adcfa350 Mon Sep 17 00:00:00 2001 From: bjorn Date: Thu, 22 Jun 2023 12:13:15 -0700 Subject: [PATCH] Collider:isDestroyed; --- src/api/l_physics_collider.c | 8 ++++++++ src/modules/physics/physics.c | 4 ++++ src/modules/physics/physics.h | 1 + 3 files changed, 13 insertions(+) diff --git a/src/api/l_physics_collider.c b/src/api/l_physics_collider.c index e6cbf808..35f882bc 100644 --- a/src/api/l_physics_collider.c +++ b/src/api/l_physics_collider.c @@ -10,6 +10,13 @@ static int l_lovrColliderDestroy(lua_State* L) { return 0; } +static int l_lovrColliderIsDestroyed(lua_State* L) { + Collider* collider = luax_checktype(L, 1, Collider); + bool destroyed = lovrColliderIsDestroyed(collider); + lua_pushboolean(L, destroyed); + return 1; +} + static int l_lovrColliderGetWorld(lua_State* L) { Collider* collider = luax_checktype(L, 1, Collider); World* world = lovrColliderGetWorld(collider); @@ -491,6 +498,7 @@ static int l_lovrColliderSetTag(lua_State* L) { const luaL_Reg lovrCollider[] = { { "destroy", l_lovrColliderDestroy }, + { "isDestroyed", l_lovrColliderIsDestroyed }, { "getWorld", l_lovrColliderGetWorld }, { "addShape", l_lovrColliderAddShape }, { "removeShape", l_lovrColliderRemoveShape }, diff --git a/src/modules/physics/physics.c b/src/modules/physics/physics.c index 3d0ea89e..a27c9607 100644 --- a/src/modules/physics/physics.c +++ b/src/modules/physics/physics.c @@ -452,6 +452,10 @@ void lovrColliderDestroyData(Collider* collider) { lovrRelease(collider, lovrColliderDestroy); } +bool lovrColliderIsDestroyed(Collider* collider) { + return !collider->body; +} + void lovrColliderInitInertia(Collider* collider, Shape* shape) { // compute inertia matrix for default density const float density = 1.0f; diff --git a/src/modules/physics/physics.h b/src/modules/physics/physics.h index 9349d169..a98033a4 100644 --- a/src/modules/physics/physics.h +++ b/src/modules/physics/physics.h @@ -73,6 +73,7 @@ int lovrWorldIsCollisionEnabledBetween(World* world, const char* tag1, const cha Collider* lovrColliderCreate(World* world, float x, float y, float z); void lovrColliderDestroy(void* ref); void lovrColliderDestroyData(Collider* collider); +bool lovrColliderIsDestroyed(Collider* collider); void lovrColliderInitInertia(Collider* collider, Shape* shape); World* lovrColliderGetWorld(Collider* collider); Collider* lovrColliderGetNext(Collider* collider);