diff --git a/src/modules/physics/box2d/CircleShape.cpp b/src/modules/physics/box2d/CircleShape.cpp index 227e67dc9..47bec179d 100644 --- a/src/modules/physics/box2d/CircleShape.cpp +++ b/src/modules/physics/box2d/CircleShape.cpp @@ -42,8 +42,6 @@ namespace box2d CircleShape::~CircleShape() { - body->body->DestroyShape(shape); - shape = 0; } float CircleShape::getRadius() const diff --git a/src/modules/physics/box2d/PolygonShape.cpp b/src/modules/physics/box2d/PolygonShape.cpp index d2a313ade..e887da41e 100644 --- a/src/modules/physics/box2d/PolygonShape.cpp +++ b/src/modules/physics/box2d/PolygonShape.cpp @@ -42,8 +42,6 @@ namespace box2d PolygonShape::~PolygonShape() { - body->body->DestroyShape(shape); - shape = 0; } int PolygonShape::getPoints(lua_State * L) diff --git a/src/modules/physics/box2d/Shape.cpp b/src/modules/physics/box2d/Shape.cpp index 80add6d91..071fad912 100644 --- a/src/modules/physics/box2d/Shape.cpp +++ b/src/modules/physics/box2d/Shape.cpp @@ -48,6 +48,11 @@ namespace box2d delete data; data = 0; + + body->body->DestroyShape(shape); + shape = 0; + + body->release(); } Shape::Type Shape::getType() const diff --git a/src/modules/physics/box2d/wrap_Body.cpp b/src/modules/physics/box2d/wrap_Body.cpp index a25be4f1b..88ffd18dc 100644 --- a/src/modules/physics/box2d/wrap_Body.cpp +++ b/src/modules/physics/box2d/wrap_Body.cpp @@ -400,8 +400,12 @@ namespace box2d int w_Body_destroy(lua_State * L) { - Body * t = luax_checkbody(L, 1); + Proxy * p = (Proxy *)lua_touserdata(L, 1); + p->own = false; + + Body * t = (Body *)p->data; t->release(); + return 0; } diff --git a/src/modules/physics/box2d/wrap_Joint.cpp b/src/modules/physics/box2d/wrap_Joint.cpp index 580b40425..b21967384 100644 --- a/src/modules/physics/box2d/wrap_Joint.cpp +++ b/src/modules/physics/box2d/wrap_Joint.cpp @@ -80,8 +80,12 @@ namespace box2d int w_Joint_destroy(lua_State * L) { - Joint * t = luax_checkjoint(L, 1); + Proxy * p = (Proxy *)lua_touserdata(L, 1); + p->own = false; + + Joint * t = (Joint *)p->data; t->release(); + return 0; } diff --git a/src/modules/physics/box2d/wrap_Shape.cpp b/src/modules/physics/box2d/wrap_Shape.cpp index b6ee80f07..f40701308 100644 --- a/src/modules/physics/box2d/wrap_Shape.cpp +++ b/src/modules/physics/box2d/wrap_Shape.cpp @@ -200,7 +200,10 @@ namespace box2d int w_Shape_destroy(lua_State * L) { - Shape * t = luax_checkshape(L, 1); + Proxy * p = (Proxy *)lua_touserdata(L, 1); + p->own = false; + + Shape * t = (Shape *)p->data; t->release(); return 0; }