From 1d3f6e967d4d2b74ed6e5c7b4a3fbbad31567c9b Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Fri, 3 Jan 2014 14:06:23 -0400 Subject: [PATCH] Added CircleShape:get/setPoint. --- src/modules/physics/box2d/CircleShape.cpp | 13 +++++++++++++ src/modules/physics/box2d/CircleShape.h | 15 +++++++++++++-- .../physics/box2d/wrap_CircleShape.cpp | 19 +++++++++++++++++++ src/modules/physics/box2d/wrap_CircleShape.h | 2 ++ 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/modules/physics/box2d/CircleShape.cpp b/src/modules/physics/box2d/CircleShape.cpp index f93b3809d..51287edb3 100644 --- a/src/modules/physics/box2d/CircleShape.cpp +++ b/src/modules/physics/box2d/CircleShape.cpp @@ -53,6 +53,19 @@ void CircleShape::setRadius(float r) shape->m_radius = Physics::scaleDown(r); } +void CircleShape::getPoint(float &x_o, float &y_o) const +{ + b2CircleShape *c = (b2CircleShape *) shape; + x_o = Physics::scaleUp(c->m_p.x); + y_o = Physics::scaleUp(c->m_p.y); +} + +void CircleShape::setPoint(float x, float y) +{ + b2CircleShape *c = (b2CircleShape *) shape; + c->m_p = Physics::scaleDown(b2Vec2(x, y)); +} + } // box2d } // physics } // love diff --git a/src/modules/physics/box2d/CircleShape.h b/src/modules/physics/box2d/CircleShape.h index d96a6fc1d..5d0c2b372 100644 --- a/src/modules/physics/box2d/CircleShape.h +++ b/src/modules/physics/box2d/CircleShape.h @@ -58,10 +58,21 @@ public: float getRadius() const; /** - * Sets the radius for the circle. + * Sets the radius of the circle. **/ void setRadius(float r); -}; + + /** + * Gets the position of the circle. + **/ + void getPoint(float &x_o, float &y_o) const; + + /** + * Sets the position for the circle. + **/ + void setPoint(float x, float y); + +}; // CircleShape } // box2d } // physics diff --git a/src/modules/physics/box2d/wrap_CircleShape.cpp b/src/modules/physics/box2d/wrap_CircleShape.cpp index 8fa46de7f..38e5b170d 100644 --- a/src/modules/physics/box2d/wrap_CircleShape.cpp +++ b/src/modules/physics/box2d/wrap_CircleShape.cpp @@ -47,10 +47,29 @@ int w_CircleShape_setRadius(lua_State *L) return 0; } +int w_CircleShape_getPoint(lua_State *L) +{ + CircleShape *c = luax_checkcircleshape(L, 1); + float x, y; + c->getPoint(x, y); + lua_pushnumber(L, x); + lua_pushnumber(L, y); + return 2; +} + +int w_CircleShape_setPoint(lua_State *L) +{ + CircleShape *c = luax_checkcircleshape(L, 1); + c->setPoint((float) luaL_checknumber(L, 2), (float) luaL_checknumber(L, 3)); + return 0; +} + static const luaL_Reg functions[] = { { "getRadius", w_CircleShape_getRadius }, { "setRadius", w_CircleShape_setRadius }, + { "getPoint", w_CircleShape_getPoint }, + { "setPoint", w_CircleShape_setPoint }, // From Shape. { "getType", w_Shape_getType }, { "getRadius", w_Shape_getRadius }, diff --git a/src/modules/physics/box2d/wrap_CircleShape.h b/src/modules/physics/box2d/wrap_CircleShape.h index 6876712bb..fff7c4239 100644 --- a/src/modules/physics/box2d/wrap_CircleShape.h +++ b/src/modules/physics/box2d/wrap_CircleShape.h @@ -36,6 +36,8 @@ namespace box2d CircleShape *luax_checkcircleshape(lua_State *L, int idx); int w_CircleShape_getRadius(lua_State *L); int w_CircleShape_setRadius(lua_State *L); +int w_CircleShape_getPoint(lua_State *L); +int w_CircleShape_setPoint(lua_State *L); extern "C" int luaopen_circleshape(lua_State *L); } // box2d