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);