Add second body anchor point to FrictionJoint/WeldJoint constructors

--HG--
branch : box2d-update
This commit is contained in:
Bill Meltsner
2011-10-02 10:06:31 -04:00
parent 735c52b228
commit f38655a934
7 changed files with 50 additions and 24 deletions
+3 -2
View File
@@ -33,11 +33,12 @@ namespace physics
{
namespace box2d
{
FrictionJoint::FrictionJoint(Body * body1, Body * body2, float x, float y, bool collideConnected)
FrictionJoint::FrictionJoint(Body * body1, Body * body2, float xA, float yA, float xB, float yB, bool collideConnected)
: Joint(body1, body2), joint(NULL)
{
b2FrictionJointDef def;
def.Initialize(body1->body, body2->body, Physics::scaleDown(b2Vec2(x,y)));
def.Initialize(body1->body, body2->body, Physics::scaleDown(b2Vec2(xA,yA)));
def.localAnchorB = Physics::scaleDown(b2Vec2(xB, yB));
def.collideConnected = collideConnected;
joint = (b2FrictionJoint*)createJoint(&def);
}
+1 -1
View File
@@ -45,7 +45,7 @@ namespace box2d
/**
* Creates a new FrictionJoint connecting body1 and body2.
**/
FrictionJoint(Body * body1, Body * body2, float x, float y, bool collideConnected);
FrictionJoint(Body * body1, Body * body2, float xA, float yA, float xB, float yB, bool collideConnected);
virtual ~FrictionJoint();
+4 -4
View File
@@ -182,14 +182,14 @@ namespace box2d
return new GearJoint(joint1, joint2, ratio, collideConnected);
}
FrictionJoint * Physics::newFrictionJoint(Body * body1, Body * body2, float x, float y, bool collideConnected)
FrictionJoint * Physics::newFrictionJoint(Body * body1, Body * body2, float xA, float yA, float xB, float yB, bool collideConnected)
{
return new FrictionJoint(body1, body2, x, y, collideConnected);
return new FrictionJoint(body1, body2, xA, yA, xB, yB, collideConnected);
}
WeldJoint * Physics::newWeldJoint(Body * body1, Body * body2, float x, float y, bool collideConnected)
WeldJoint * Physics::newWeldJoint(Body * body1, Body * body2, float xA, float yA, float xB, float yB, bool collideConnected)
{
return new WeldJoint(body1, body2, x, y, collideConnected);
return new WeldJoint(body1, body2, xA, yA, xB, yB, collideConnected);
}
WheelJoint * Physics::newWheelJoint(Body * body1, Body * body2, float xA, float yA, float xB, float yB, float ax, float ay, bool collideConnected)
+10 -6
View File
@@ -215,19 +215,23 @@ namespace box2d
/**
* Creates a new FrictionJoint connecting body1 with body2.
* @param x Anchor along the x-axis. (World coordinates)
* @param y Anchor along the y-axis. (World coordinates)
* @param xA Anchor for body 1 along the x-axis. (World coordinates)
* @param yA Anchor for body 1 along the y-axis. (World coordinates)
* @param xB Anchor for body 2 along the x-axis. (World coordinates)
* @param yB Anchor for body 2 along the y-axis. (World coordinates)
* @param collideConnected Whether the connected bodies should collide with each other. Defaults to false.
**/
FrictionJoint * newFrictionJoint(Body * body1, Body * body2, float x, float y, bool collideConnected);
FrictionJoint * newFrictionJoint(Body * body1, Body * body2, float xA, float yA, float xB, float yB, bool collideConnected);
/**
* Creates a new WeldJoint connecting body1 with body2.
* @param x Anchor along the x-axis. (World coordinates)
* @param y Anchor along the y-axis. (World coordinates)
* @param xA Anchor for body 1 along the x-axis. (World coordinates)
* @param yA Anchor for body 1 along the y-axis. (World coordinates)
* @param xB Anchor for body 2 along the x-axis. (World coordinates)
* @param yB Anchor for body 2 along the y-axis. (World coordinates)
* @param collideConnected Whether the connected bodies should collide with each other. Defaults to false.
**/
WeldJoint * newWeldJoint(Body * body1, Body * body2, float x, float y, bool collideConnected);
WeldJoint * newWeldJoint(Body * body1, Body * body2, float xA, float yA, float xB, float yB, bool collideConnected);
/**
* Creates a new WheelJoint connecting body1 with body2.
+3 -2
View File
@@ -33,11 +33,12 @@ namespace physics
{
namespace box2d
{
WeldJoint::WeldJoint(Body * body1, Body * body2, float x, float y, bool collideConnected)
WeldJoint::WeldJoint(Body * body1, Body * body2, float xA, float yA, float xB, float yB, bool collideConnected)
: Joint(body1, body2), joint(NULL)
{
b2WeldJointDef def;
def.Initialize(body1->body, body2->body, Physics::scaleDown(b2Vec2(x,y)));
def.Initialize(body1->body, body2->body, Physics::scaleDown(b2Vec2(xA,yA)));
def.localAnchorB = Physics::scaleDown(b2Vec2(xB, yB));
def.collideConnected = collideConnected;
joint = (b2WeldJoint*)createJoint(&def);
}
+1 -1
View File
@@ -45,7 +45,7 @@ namespace box2d
/**
* Creates a new WeldJoint connecting body1 and body2.
**/
WeldJoint(Body * body1, Body * body2, float x, float y, bool collideConnected);
WeldJoint(Body * body1, Body * body2, float xA, float yA, float xB, float yB, bool collideConnected);
virtual ~WeldJoint();
+28 -8
View File
@@ -234,10 +234,20 @@ namespace box2d
{
Body * body1 = luax_checktype<Body>(L, 1, "Body", PHYSICS_BODY_T);
Body * body2 = luax_checktype<Body>(L, 2, "Body", PHYSICS_BODY_T);
float x = (float)luaL_checknumber(L, 3);
float y = (float)luaL_checknumber(L, 4);
bool collideConnected = luax_optboolean(L, 5, false);
FrictionJoint * j = instance->newFrictionJoint(body1, body2, x, y, collideConnected);
float xA = (float)luaL_checknumber(L, 3);
float yA = (float)luaL_checknumber(L, 4);
float xB, yB;
bool collideConnected;
if (lua_gettop(L) >= 6) {
xB = (float)luaL_checknumber(L, 5);
yB = (float)luaL_checknumber(L, 6);
collideConnected = luax_optboolean(L, 7, false);
} else {
xB = xA;
yB = yA;
collideConnected = luax_optboolean(L, 5, false);
}
FrictionJoint * j = instance->newFrictionJoint(body1, body2, xA, yA, xB, yB, collideConnected);
luax_newtype(L, "FrictionJoint", PHYSICS_FRICTION_JOINT_T, (void*)j);
return 1;
}
@@ -246,10 +256,20 @@ namespace box2d
{
Body * body1 = luax_checktype<Body>(L, 1, "Body", PHYSICS_BODY_T);
Body * body2 = luax_checktype<Body>(L, 2, "Body", PHYSICS_BODY_T);
float x = (float)luaL_checknumber(L, 3);
float y = (float)luaL_checknumber(L, 4);
bool collideConnected = luax_optboolean(L, 5, false);
WeldJoint * j = instance->newWeldJoint(body1, body2, x, y, collideConnected);
float xA = (float)luaL_checknumber(L, 3);
float yA = (float)luaL_checknumber(L, 4);
float xB, yB;
bool collideConnected;
if (lua_gettop(L) >= 6) {
xB = (float)luaL_checknumber(L, 5);
yB = (float)luaL_checknumber(L, 6);
collideConnected = luax_optboolean(L, 7, false);
} else {
xB = xA;
yB = yA;
collideConnected = luax_optboolean(L, 5, false);
}
WeldJoint * j = instance->newWeldJoint(body1, body2, xA, yA, xB, yB, collideConnected);
luax_newtype(L, "WeldJoint", PHYSICS_WELD_JOINT_T, (void*)j);
return 1;
}