From a0c0fd8387a0927a563ea373455f58798484782a Mon Sep 17 00:00:00 2001 From: Bill Meltsner Date: Sat, 24 Sep 2011 03:39:21 -0400 Subject: [PATCH] Add Body:getWorldPoints, basically for use with PolygonShape:getPoints to facilitate easier drawing --HG-- branch : box2d-update --- src/modules/physics/box2d/Body.cpp | 19 +++++++++++++++++++ src/modules/physics/box2d/Body.h | 6 ++++++ src/modules/physics/box2d/wrap_Body.cpp | 8 ++++++++ src/modules/physics/box2d/wrap_Body.h | 1 + 4 files changed, 34 insertions(+) diff --git a/src/modules/physics/box2d/Body.cpp b/src/modules/physics/box2d/Body.cpp index c689099d8..110b95642 100644 --- a/src/modules/physics/box2d/Body.cpp +++ b/src/modules/physics/box2d/Body.cpp @@ -281,6 +281,25 @@ namespace box2d x_o = v.x; y_o = v.y; } + + int Body::getWorldPoints(lua_State * L) + { + int argc = lua_gettop(L); + int vcount = (int)argc/2; + // at least one point + love::luax_assert_argc(L, 2); + + for(int i = 0;iGetWorldPoint(Physics::scaleDown(b2Vec2(x, y)))); + lua_pushnumber(L, point.x); + lua_pushnumber(L, point.y); + } + + return argc; + } void Body::getLocalPoint(float x, float y, float & x_o, float & y_o) { diff --git a/src/modules/physics/box2d/Body.h b/src/modules/physics/box2d/Body.h index 581d42d36..416dc926a 100644 --- a/src/modules/physics/box2d/Body.h +++ b/src/modules/physics/box2d/Body.h @@ -282,6 +282,12 @@ namespace box2d * @returns The y-coordinate of the vector in world coordinates. **/ void getWorldVector(float x, float y, float & x_o, float & y_o); + + /** + * Transforms a series of points (x, y) from local coordinates + * to world coordinates. + **/ + int getWorldPoints(lua_State * L); /** * Transforms a point (x, y) from world coordinates diff --git a/src/modules/physics/box2d/wrap_Body.cpp b/src/modules/physics/box2d/wrap_Body.cpp index 71e0fb3cc..bc7883394 100644 --- a/src/modules/physics/box2d/wrap_Body.cpp +++ b/src/modules/physics/box2d/wrap_Body.cpp @@ -360,6 +360,13 @@ namespace box2d return 2; } + + int w_Body_getWorldPoints(lua_State * L) + { + Body * t = luax_checkbody(L, 1); + lua_remove(L, 1); + return t->getWorldPoints(L); + } int w_Body_getLocalPoint(lua_State * L) { @@ -557,6 +564,7 @@ namespace box2d { "setType", w_Body_setType }, { "getWorldPoint", w_Body_getWorldPoint }, { "getWorldVector", w_Body_getWorldVector }, + { "getWorldPoints", w_Body_getWorldPoints }, { "getLocalPoint", w_Body_getLocalPoint }, { "getLocalVector", w_Body_getLocalVector }, { "getLinearVelocityFromWorldPoint", w_Body_getLinearVelocityFromWorldPoint }, diff --git a/src/modules/physics/box2d/wrap_Body.h b/src/modules/physics/box2d/wrap_Body.h index b4f58d2cd..bbee3e6b6 100644 --- a/src/modules/physics/box2d/wrap_Body.h +++ b/src/modules/physics/box2d/wrap_Body.h @@ -67,6 +67,7 @@ namespace box2d int w_Body_setType(lua_State * L); int w_Body_getWorldPoint(lua_State * L); int w_Body_getWorldVector(lua_State * L); + int w_Body_getWorldPoints(lua_State * L); int w_Body_getLocalPoint(lua_State * L); int w_Body_getLocalVector(lua_State * L); int w_Body_getLinearVelocityFromWorldPoint(lua_State * L);