From 91062a1496f5bd527fdd3fbbbeabb1f1166bbf0d Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Mon, 5 Jan 2015 00:14:41 -0400 Subject: [PATCH] Added Body/Contact/Fixture/Joint/World:isDestroyed (resolves issue #964.) --- src/modules/physics/box2d/wrap_Body.cpp | 8 ++++++++ src/modules/physics/box2d/wrap_Body.h | 1 + src/modules/physics/box2d/wrap_Contact.cpp | 8 ++++++++ src/modules/physics/box2d/wrap_Contact.h | 1 + src/modules/physics/box2d/wrap_DistanceJoint.cpp | 1 + src/modules/physics/box2d/wrap_Fixture.cpp | 8 ++++++++ src/modules/physics/box2d/wrap_Fixture.h | 1 + src/modules/physics/box2d/wrap_FrictionJoint.cpp | 1 + src/modules/physics/box2d/wrap_GearJoint.cpp | 1 + src/modules/physics/box2d/wrap_Joint.cpp | 8 ++++++++ src/modules/physics/box2d/wrap_Joint.h | 1 + src/modules/physics/box2d/wrap_MotorJoint.cpp | 1 + src/modules/physics/box2d/wrap_MouseJoint.cpp | 1 + src/modules/physics/box2d/wrap_PrismaticJoint.cpp | 1 + src/modules/physics/box2d/wrap_PulleyJoint.cpp | 1 + src/modules/physics/box2d/wrap_RevoluteJoint.cpp | 1 + src/modules/physics/box2d/wrap_RopeJoint.cpp | 1 + src/modules/physics/box2d/wrap_WeldJoint.cpp | 1 + src/modules/physics/box2d/wrap_WheelJoint.cpp | 1 + src/modules/physics/box2d/wrap_World.cpp | 8 ++++++++ src/modules/physics/box2d/wrap_World.h | 1 + 21 files changed, 56 insertions(+) diff --git a/src/modules/physics/box2d/wrap_Body.cpp b/src/modules/physics/box2d/wrap_Body.cpp index 5180f5afa..786fe9cb9 100644 --- a/src/modules/physics/box2d/wrap_Body.cpp +++ b/src/modules/physics/box2d/wrap_Body.cpp @@ -564,6 +564,13 @@ int w_Body_destroy(lua_State *L) return 0; } +int w_Body_isDestroyed(lua_State *L) +{ + Body *b = luax_checktype(L, 1, "Body", PHYSICS_BODY_T); + luax_pushboolean(L, b->body == nullptr); + return 1; +} + int w_Body_setUserData(lua_State *L) { Body *t = luax_checkbody(L, 1); @@ -635,6 +642,7 @@ static const luaL_Reg functions[] = { "getJointList", w_Body_getJointList }, { "getContactList", w_Body_getContactList }, { "destroy", w_Body_destroy }, + { "isDestroyed", w_Body_isDestroyed }, { "setUserData", w_Body_setUserData }, { "getUserData", w_Body_getUserData }, { 0, 0 } diff --git a/src/modules/physics/box2d/wrap_Body.h b/src/modules/physics/box2d/wrap_Body.h index 439027ec0..fb28a3dc9 100644 --- a/src/modules/physics/box2d/wrap_Body.h +++ b/src/modules/physics/box2d/wrap_Body.h @@ -88,6 +88,7 @@ int w_Body_getFixtureList(lua_State *L); int w_Body_getJointList(lua_State *L); int w_Body_getContactList(lua_State *L); int w_Body_destroy(lua_State *L); +int w_Body_isDestroyed(lua_State *L); int w_Body_setUserData(lua_State *L); int w_Body_getUserData(lua_State *L); extern "C" int luaopen_body(lua_State *L); diff --git a/src/modules/physics/box2d/wrap_Contact.cpp b/src/modules/physics/box2d/wrap_Contact.cpp index 3bc1b25db..bb02f60ca 100644 --- a/src/modules/physics/box2d/wrap_Contact.cpp +++ b/src/modules/physics/box2d/wrap_Contact.cpp @@ -151,6 +151,13 @@ int w_Contact_getFixtures(lua_State *L) return 2; } +int w_Contact_isDestroyed(lua_State *L) +{ + Contact *c = luax_checktype(L, 1, "Contact", PHYSICS_CONTACT_T); + luax_pushboolean(L, !c->isValid()); + return 1; +} + extern "C" int luaopen_contact(lua_State *L) { static const luaL_Reg functions[] = @@ -170,6 +177,7 @@ extern "C" int luaopen_contact(lua_State *L) { "getTangentSpeed", w_Contact_getTangentSpeed }, { "getChildren", w_Contact_getChildren }, { "getFixtures", w_Contact_getFixtures }, + { "isDestroyed", w_Contact_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_Contact.h b/src/modules/physics/box2d/wrap_Contact.h index bb0e42e68..602d57bcc 100644 --- a/src/modules/physics/box2d/wrap_Contact.h +++ b/src/modules/physics/box2d/wrap_Contact.h @@ -48,6 +48,7 @@ int w_Contact_setTangentSpeed(lua_State *L); int w_Contact_getTangentSpeed(lua_State *L); int w_Contact_getChildren(lua_State *L); int w_Contact_getFixtures(lua_State *L); +int w_Contact_isDestroyed(lua_State *L); extern "C" int luaopen_contact(lua_State *L); } // box2d diff --git a/src/modules/physics/box2d/wrap_DistanceJoint.cpp b/src/modules/physics/box2d/wrap_DistanceJoint.cpp index c1fc612a9..1d16d967c 100644 --- a/src/modules/physics/box2d/wrap_DistanceJoint.cpp +++ b/src/modules/physics/box2d/wrap_DistanceJoint.cpp @@ -98,6 +98,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_Fixture.cpp b/src/modules/physics/box2d/wrap_Fixture.cpp index d03f3bb2d..907cf14be 100644 --- a/src/modules/physics/box2d/wrap_Fixture.cpp +++ b/src/modules/physics/box2d/wrap_Fixture.cpp @@ -262,6 +262,13 @@ int w_Fixture_destroy(lua_State *L) return 0; } +int w_Fixture_isDestroyed(lua_State *L) +{ + Fixture *f = luax_checktype(L, 1, "Fixture", PHYSICS_FIXTURE_T); + luax_pushboolean(L, !f->isValid()); + return 1; +} + static const luaL_Reg functions[] = { { "getType", w_Fixture_getType }, @@ -290,6 +297,7 @@ static const luaL_Reg functions[] = { "getGroupIndex", w_Fixture_getGroupIndex }, { "setGroupIndex", w_Fixture_setGroupIndex }, { "destroy", w_Fixture_destroy }, + { "isDestroyed", w_Fixture_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_Fixture.h b/src/modules/physics/box2d/wrap_Fixture.h index f52290c15..7c6f9a0fe 100644 --- a/src/modules/physics/box2d/wrap_Fixture.h +++ b/src/modules/physics/box2d/wrap_Fixture.h @@ -60,6 +60,7 @@ int w_Fixture_getMassData(lua_State *L); int w_Fixture_getGroupIndex(lua_State *L); int w_Fixture_setGroupIndex(lua_State *L); int w_Fixture_destroy(lua_State *L); +int w_Fixture_isDestroyed(lua_State *L); extern "C" int luaopen_fixture(lua_State *L); } // box2d diff --git a/src/modules/physics/box2d/wrap_FrictionJoint.cpp b/src/modules/physics/box2d/wrap_FrictionJoint.cpp index 8651b36c8..94de9bb1c 100644 --- a/src/modules/physics/box2d/wrap_FrictionJoint.cpp +++ b/src/modules/physics/box2d/wrap_FrictionJoint.cpp @@ -82,6 +82,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_GearJoint.cpp b/src/modules/physics/box2d/wrap_GearJoint.cpp index e01b3c12b..117331982 100644 --- a/src/modules/physics/box2d/wrap_GearJoint.cpp +++ b/src/modules/physics/box2d/wrap_GearJoint.cpp @@ -82,6 +82,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_Joint.cpp b/src/modules/physics/box2d/wrap_Joint.cpp index 643603a25..2f7026bde 100644 --- a/src/modules/physics/box2d/wrap_Joint.cpp +++ b/src/modules/physics/box2d/wrap_Joint.cpp @@ -147,6 +147,13 @@ int w_Joint_destroy(lua_State *L) return 0; } +int w_Joint_isDestroyed(lua_State *L) +{ + Joint *t = luax_checktype(L, 1, "Joint", PHYSICS_JOINT_T); + luax_pushboolean(L, !t->isValid()); + return 1; +} + static const luaL_Reg functions[] = { { "getType", w_Joint_getType }, @@ -158,6 +165,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_Joint.h b/src/modules/physics/box2d/wrap_Joint.h index 112700781..4bdb44441 100644 --- a/src/modules/physics/box2d/wrap_Joint.h +++ b/src/modules/physics/box2d/wrap_Joint.h @@ -43,6 +43,7 @@ int w_Joint_getCollideConnected(lua_State *L); int w_Joint_setUserData(lua_State *L); int w_Joint_getUserData(lua_State *L); int w_Joint_destroy(lua_State *L); +int w_Joint_isDestroyed(lua_State *L); extern "C" int luaopen_joint(lua_State *L); } // box2d diff --git a/src/modules/physics/box2d/wrap_MotorJoint.cpp b/src/modules/physics/box2d/wrap_MotorJoint.cpp index 2c10f8a7b..e9ad2bc0a 100644 --- a/src/modules/physics/box2d/wrap_MotorJoint.cpp +++ b/src/modules/physics/box2d/wrap_MotorJoint.cpp @@ -132,6 +132,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_MouseJoint.cpp b/src/modules/physics/box2d/wrap_MouseJoint.cpp index bce542f36..5caa42db9 100644 --- a/src/modules/physics/box2d/wrap_MouseJoint.cpp +++ b/src/modules/physics/box2d/wrap_MouseJoint.cpp @@ -116,6 +116,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_PrismaticJoint.cpp b/src/modules/physics/box2d/wrap_PrismaticJoint.cpp index b9c26911d..04f3c6e43 100644 --- a/src/modules/physics/box2d/wrap_PrismaticJoint.cpp +++ b/src/modules/physics/box2d/wrap_PrismaticJoint.cpp @@ -193,6 +193,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_PulleyJoint.cpp b/src/modules/physics/box2d/wrap_PulleyJoint.cpp index 43f1ed94f..18a7bb883 100644 --- a/src/modules/physics/box2d/wrap_PulleyJoint.cpp +++ b/src/modules/physics/box2d/wrap_PulleyJoint.cpp @@ -79,6 +79,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_RevoluteJoint.cpp b/src/modules/physics/box2d/wrap_RevoluteJoint.cpp index c4a9534fd..f61a991fa 100644 --- a/src/modules/physics/box2d/wrap_RevoluteJoint.cpp +++ b/src/modules/physics/box2d/wrap_RevoluteJoint.cpp @@ -193,6 +193,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_RopeJoint.cpp b/src/modules/physics/box2d/wrap_RopeJoint.cpp index b64a59493..76635873c 100644 --- a/src/modules/physics/box2d/wrap_RopeJoint.cpp +++ b/src/modules/physics/box2d/wrap_RopeJoint.cpp @@ -55,6 +55,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_WeldJoint.cpp b/src/modules/physics/box2d/wrap_WeldJoint.cpp index bcea8ec93..5c4a2a6d4 100644 --- a/src/modules/physics/box2d/wrap_WeldJoint.cpp +++ b/src/modules/physics/box2d/wrap_WeldJoint.cpp @@ -81,6 +81,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_WheelJoint.cpp b/src/modules/physics/box2d/wrap_WheelJoint.cpp index 47c6ac0ae..8ccea3a1a 100644 --- a/src/modules/physics/box2d/wrap_WheelJoint.cpp +++ b/src/modules/physics/box2d/wrap_WheelJoint.cpp @@ -157,6 +157,7 @@ static const luaL_Reg functions[] = { "setUserData", w_Joint_setUserData }, { "getUserData", w_Joint_getUserData }, { "destroy", w_Joint_destroy }, + { "isDestroyed", w_Joint_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_World.cpp b/src/modules/physics/box2d/wrap_World.cpp index 051d643a1..7b433425b 100644 --- a/src/modules/physics/box2d/wrap_World.cpp +++ b/src/modules/physics/box2d/wrap_World.cpp @@ -189,6 +189,13 @@ int w_World_destroy(lua_State *L) return 0; } +int w_World_isDestroyed(lua_State *L) +{ + World *w = luax_checktype(L, 1, "World", PHYSICS_WORLD_T); + luax_pushboolean(L, !w->isValid()); + return 1; +} + static const luaL_Reg functions[] = { @@ -212,6 +219,7 @@ static const luaL_Reg functions[] = { "queryBoundingBox", w_World_queryBoundingBox }, { "rayCast", w_World_rayCast }, { "destroy", w_World_destroy }, + { "isDestroyed", w_World_isDestroyed }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_World.h b/src/modules/physics/box2d/wrap_World.h index 247ab2d09..c09dff7a1 100644 --- a/src/modules/physics/box2d/wrap_World.h +++ b/src/modules/physics/box2d/wrap_World.h @@ -55,6 +55,7 @@ int w_World_getContactList(lua_State *L); int w_World_queryBoundingBox(lua_State *L); int w_World_rayCast(lua_State *L); int w_World_destroy(lua_State *L); +int w_World_isDestroyed(lua_State *L); extern "C" int luaopen_world(lua_State *L); } // box2d