Add love.physics.getDistance(fixtureA, fixtureB) - gets the distance between and the closest points of two fixtures

--HG--
branch : box2d-update
This commit is contained in:
Bill Meltsner
2011-09-24 17:29:42 -04:00
parent 3bd2316c6c
commit 680dd65c19
5 changed files with 42 additions and 0 deletions
+2
View File
@@ -57,6 +57,8 @@ namespace box2d
**/
class Fixture : public Object
{
friend class Physics;
protected:
Body * body;
+25
View File
@@ -208,6 +208,31 @@ namespace box2d
return new Fixture(body, shape, density);
}
int Physics::getDistance(lua_State * L)
{
Fixture * fixtureA = luax_checktype<Fixture>(L, 1, "Fixture", PHYSICS_FIXTURE_T);
Fixture * fixtureB = luax_checktype<Fixture>(L, 2, "Fixture", PHYSICS_FIXTURE_T);
b2DistanceInput i;
b2DistanceProxy pA;
pA.Set(fixtureA->fixture->GetShape(), 0);
b2DistanceProxy pB;
pB.Set(fixtureB->fixture->GetShape(), 0);
i.proxyA = pA;
i.proxyB = pB;
i.transformA = fixtureA->fixture->GetBody()->GetTransform();
i.transformB = fixtureB->fixture->GetBody()->GetTransform();
i.useRadii = true;
b2DistanceOutput o;
b2SimplexCache c;
b2Distance(&o, &c, &i);
lua_pushnumber(L, o.distance);
lua_pushnumber(L, Physics::scaleUp(o.pointA.x));
lua_pushnumber(L, Physics::scaleUp(o.pointA.y));
lua_pushnumber(L, Physics::scaleUp(o.pointB.x));
lua_pushnumber(L, Physics::scaleUp(o.pointB.y));
return 5;
}
void Physics::setMeter(int meter)
{
Physics::meter = meter;
+9
View File
@@ -258,6 +258,15 @@ namespace box2d
Fixture * newFixture(Body * body, Shape * shape, float density);
/**
* Calculates the distance between two Fixtures.
* @param fixtureA The first Fixture.
* @param fixtureB The sceond Fixture.
* @return The distance between them, and the two points closest
* to each other.
**/
int getDistance(lua_State * L);
/**
* Sets the number of pixels in one meter.
* @param pixels The number of pixels in one meter. (1m ~= 3.3ft).
@@ -272,6 +272,11 @@ namespace box2d
return 1;
}
int w_getDistance(lua_State * L)
{
return instance->getDistance(L);
}
int w_setMeter(lua_State * L)
{
int arg1 = luaL_checkint(L, 1);
+1
View File
@@ -69,6 +69,7 @@ namespace box2d
int w_newWeldJoint(lua_State * L);
int w_newWheelJoint(lua_State * L);
int w_newRopeJoint(lua_State * L);
int w_getDistance(lua_State * L);
int w_setMeter(lua_State * L);
int w_getMeter(lua_State * L);
extern "C" LOVE_EXPORT int luaopen_love_physics(lua_State * L);