diff --git a/src/modules/physics/box2d/EdgeShape.cpp b/src/modules/physics/box2d/EdgeShape.cpp index 1416419b1..2795d2d11 100644 --- a/src/modules/physics/box2d/EdgeShape.cpp +++ b/src/modules/physics/box2d/EdgeShape.cpp @@ -23,6 +23,7 @@ // Module #include "Body.h" #include "World.h" +#include "Physics.h" #include @@ -43,6 +44,19 @@ namespace box2d delete shape; shape = NULL; } + + int EdgeShape::getPoints(lua_State * L) + { + b2EdgeShape * e = (b2EdgeShape *)shape; + b2Vec2 v1 = Physics::scaleUp(e->m_vertex1); + b2Vec2 v2 = Physics::scaleUp(e->m_vertex2); + lua_pushnumber(L, v1.x); + lua_pushnumber(L, v1.y); + lua_pushnumber(L, v2.x); + lua_pushnumber(L, v2.y); + return 4; + + } } // box2d } // physics diff --git a/src/modules/physics/box2d/EdgeShape.h b/src/modules/physics/box2d/EdgeShape.h index 67569b51b..6f51c2008 100644 --- a/src/modules/physics/box2d/EdgeShape.h +++ b/src/modules/physics/box2d/EdgeShape.h @@ -45,6 +45,14 @@ namespace box2d EdgeShape(b2EdgeShape * e); virtual ~EdgeShape(); + + /** + * Returns the transformed points of the edge shape. + * This function is useful for debug drawing and such. + * + * The result can be directly passed into love.graphics.line(). + **/ + int getPoints(lua_State * L); }; } // box2d diff --git a/src/modules/physics/box2d/wrap_EdgeShape.cpp b/src/modules/physics/box2d/wrap_EdgeShape.cpp index 3a8f23276..5d4d113d1 100644 --- a/src/modules/physics/box2d/wrap_EdgeShape.cpp +++ b/src/modules/physics/box2d/wrap_EdgeShape.cpp @@ -30,8 +30,16 @@ namespace box2d { return luax_checktype(L, idx, "EdgeShape", PHYSICS_EDGE_SHAPE_T); } + + int w_EdgeShape_getPoints(lua_State * L) + { + EdgeShape * t = luax_checkedgeshape(L, 1); + lua_remove(L, 1); + return t->getPoints(L); + } static const luaL_Reg functions[] = { + { "getPoints", w_EdgeShape_getPoints }, // From Shape. { "getType", w_Shape_getType }, { "getRadius", w_Shape_getRadius }, diff --git a/src/modules/physics/box2d/wrap_EdgeShape.h b/src/modules/physics/box2d/wrap_EdgeShape.h index 4b9cba3b4..9a5a39be0 100644 --- a/src/modules/physics/box2d/wrap_EdgeShape.h +++ b/src/modules/physics/box2d/wrap_EdgeShape.h @@ -33,6 +33,7 @@ namespace physics namespace box2d { EdgeShape * luax_checkedgeshape(lua_State * L, int idx); + int w_EdgeShape_getPoints(lua_State * L); int luaopen_edgeshape(lua_State * L); } // box2d