From afd0ef1d9eafc95bb7068c43ed77aa94902aff8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20Sj=C3=B6gren?= Date: Tue, 10 Jan 2012 04:14:17 +0100 Subject: [PATCH 1/2] Add a custom Body:setMass function. --- src/modules/physics/box2d/Body.cpp | 8 ++++++++ src/modules/physics/box2d/Body.h | 6 ++++++ src/modules/physics/box2d/wrap_Body.cpp | 9 +++++++++ src/modules/physics/box2d/wrap_Body.h | 1 + 4 files changed, 24 insertions(+) diff --git a/src/modules/physics/box2d/Body.cpp b/src/modules/physics/box2d/Body.cpp index 13152100d..378e44a80 100644 --- a/src/modules/physics/box2d/Body.cpp +++ b/src/modules/physics/box2d/Body.cpp @@ -253,6 +253,14 @@ namespace box2d body->SetMassData(&massData); } + int Body::setMass(float m) + { + b2MassData data; + body->GetMassData(&data); + data.mass = m; + body->SetMassData(&data); + } + void Body::setInertia(float i) { b2MassData massData; diff --git a/src/modules/physics/box2d/Body.h b/src/modules/physics/box2d/Body.h index 1bf465f7c..888ea509a 100644 --- a/src/modules/physics/box2d/Body.h +++ b/src/modules/physics/box2d/Body.h @@ -242,6 +242,12 @@ namespace box2d **/ void setMassData(float x, float y, float m, float i); + /** + * Sets just the mass. This is provided as a LOVE bonus. Lovely! + * @param m The mass. + **/ + void setMass(float m); + /** * Sets the inertia while keeping the other properties * (mass and local center). diff --git a/src/modules/physics/box2d/wrap_Body.cpp b/src/modules/physics/box2d/wrap_Body.cpp index 7e3bc65ac..e53db62c2 100644 --- a/src/modules/physics/box2d/wrap_Body.cpp +++ b/src/modules/physics/box2d/wrap_Body.cpp @@ -294,6 +294,14 @@ namespace box2d return 0; } + int w_Body_setMass(lua_State * L) + { + Body * t = luax_checkbody(L, 1); + float m = (float)luaL_checknumber(L, 2); + t->setMass(m); + return 0; + } + int w_Body_setInertia(lua_State * L) { Body * t = luax_checkbody(L, 1); @@ -552,6 +560,7 @@ namespace box2d { "setPosition", w_Body_setPosition }, { "resetMassData", w_Body_resetMassData }, { "setMassData", w_Body_setMassData }, + { "setMass", w_Body_setMass }, { "setInertia", w_Body_setInertia }, { "setAngularDamping", w_Body_setAngularDamping }, { "setLinearDamping", w_Body_setLinearDamping }, diff --git a/src/modules/physics/box2d/wrap_Body.h b/src/modules/physics/box2d/wrap_Body.h index 647d6d3a5..bd8d4ec1c 100644 --- a/src/modules/physics/box2d/wrap_Body.h +++ b/src/modules/physics/box2d/wrap_Body.h @@ -60,6 +60,7 @@ namespace box2d int w_Body_setPosition(lua_State * L); int w_Body_resetMassData(lua_State * L); int w_Body_setMassData(lua_State * L); + int w_Body_setMass(lua_State * L); int w_Body_setInertia(lua_State * L); int w_Body_setAngularDamping(lua_State * L); int w_Body_setLinearDamping(lua_State * L); From 7f13fc47c787b2162ed4cb19d6cb74ff90cbefb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20Sj=C3=B6gren?= Date: Tue, 10 Jan 2012 04:24:13 +0100 Subject: [PATCH 2/2] Damn you, copy paste! --- src/modules/physics/box2d/Body.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/physics/box2d/Body.cpp b/src/modules/physics/box2d/Body.cpp index 378e44a80..5397e5ce7 100644 --- a/src/modules/physics/box2d/Body.cpp +++ b/src/modules/physics/box2d/Body.cpp @@ -253,7 +253,7 @@ namespace box2d body->SetMassData(&massData); } - int Body::setMass(float m) + void Body::setMass(float m) { b2MassData data; body->GetMassData(&data);