mirror of
https://github.com/love2d/love.git
synced 2026-08-17 11:00:31 +02:00
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:
@@ -57,6 +57,8 @@ namespace box2d
|
|||||||
**/
|
**/
|
||||||
class Fixture : public Object
|
class Fixture : public Object
|
||||||
{
|
{
|
||||||
|
friend class Physics;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
Body * body;
|
Body * body;
|
||||||
|
|||||||
@@ -208,6 +208,31 @@ namespace box2d
|
|||||||
return new Fixture(body, shape, density);
|
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)
|
void Physics::setMeter(int meter)
|
||||||
{
|
{
|
||||||
Physics::meter = meter;
|
Physics::meter = meter;
|
||||||
|
|||||||
@@ -258,6 +258,15 @@ namespace box2d
|
|||||||
|
|
||||||
Fixture * newFixture(Body * body, Shape * shape, float density);
|
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.
|
* Sets the number of pixels in one meter.
|
||||||
* @param pixels The number of pixels in one meter. (1m ~= 3.3ft).
|
* @param pixels The number of pixels in one meter. (1m ~= 3.3ft).
|
||||||
|
|||||||
@@ -272,6 +272,11 @@ namespace box2d
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int w_getDistance(lua_State * L)
|
||||||
|
{
|
||||||
|
return instance->getDistance(L);
|
||||||
|
}
|
||||||
|
|
||||||
int w_setMeter(lua_State * L)
|
int w_setMeter(lua_State * L)
|
||||||
{
|
{
|
||||||
int arg1 = luaL_checkint(L, 1);
|
int arg1 = luaL_checkint(L, 1);
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ namespace box2d
|
|||||||
int w_newWeldJoint(lua_State * L);
|
int w_newWeldJoint(lua_State * L);
|
||||||
int w_newWheelJoint(lua_State * L);
|
int w_newWheelJoint(lua_State * L);
|
||||||
int w_newRopeJoint(lua_State * L);
|
int w_newRopeJoint(lua_State * L);
|
||||||
|
int w_getDistance(lua_State * L);
|
||||||
int w_setMeter(lua_State * L);
|
int w_setMeter(lua_State * L);
|
||||||
int w_getMeter(lua_State * L);
|
int w_getMeter(lua_State * L);
|
||||||
extern "C" LOVE_EXPORT int luaopen_love_physics(lua_State * L);
|
extern "C" LOVE_EXPORT int luaopen_love_physics(lua_State * L);
|
||||||
|
|||||||
Reference in New Issue
Block a user