diff --git a/src/api/types/collider.c b/src/api/types/collider.c index f7d2dd87..835f62ff 100644 --- a/src/api/types/collider.c +++ b/src/api/types/collider.c @@ -1,6 +1,12 @@ #include "api/lovr.h" #include "physics/physics.h" +int l_lovrColliderDestroy(lua_State* L) { + Collider* collider = luax_checktype(L, 1, Collider); + lovrColliderDestroyData(collider); + return 0; +} + int l_lovrColliderGetWorld(lua_State* L) { Collider* collider = luax_checktype(L, 1, Collider); luax_pushtype(L, World, lovrColliderGetWorld(collider)); @@ -385,6 +391,7 @@ int l_lovrColliderGetLinearVelocityFromWorldPoint(lua_State* L) { } const luaL_Reg lovrCollider[] = { + { "destroy", l_lovrColliderDestroy }, { "getWorld", l_lovrColliderGetWorld }, { "addShape", l_lovrColliderAddShape }, { "removeShape", l_lovrColliderRemoveShape }, diff --git a/src/physics/physics.c b/src/physics/physics.c index 46f6e749..7a10313c 100644 --- a/src/physics/physics.c +++ b/src/physics/physics.c @@ -169,10 +169,17 @@ Collider* lovrColliderCreate(World* world) { void lovrColliderDestroy(const Ref* ref) { Collider* collider = containerof(ref, Collider); - dBodyDestroy(collider->body); + lovrColliderDestroyData(collider); free(collider); } +void lovrColliderDestroyData(Collider* collider) { + if (collider->body) { + dBodyDestroy(collider->body); + collider->body = NULL; + } +} + World* lovrColliderGetWorld(Collider* collider) { return collider->world; } diff --git a/src/physics/physics.h b/src/physics/physics.h index 148c8b86..95b03b77 100644 --- a/src/physics/physics.h +++ b/src/physics/physics.h @@ -65,6 +65,7 @@ void lovrWorldSetSleepingAllowed(World* world, int allowed); Collider* lovrColliderCreate(); void lovrColliderDestroy(const Ref* ref); +void lovrColliderDestroyData(Collider* collider); World* lovrColliderGetWorld(Collider* collider); void lovrColliderAddShape(Collider* collider, Shape* shape); void lovrColliderRemoveShape(Collider* collider, Shape* shape);