mirror of https://github.com/bjornbytes/lovr.git
DistanceJoint;
This commit is contained in:
parent
24a980446a
commit
1cc62a9b6d
|
@ -22,6 +22,7 @@ extern const luaL_Reg lovrController[];
|
|||
extern const luaL_Reg lovrCylinderShape[];
|
||||
extern const luaL_Reg lovrBlob[];
|
||||
extern const luaL_Reg lovrCollider[];
|
||||
extern const luaL_Reg lovrDistanceJoint[];
|
||||
extern const luaL_Reg lovrEvent[];
|
||||
extern const luaL_Reg lovrFilesystem[];
|
||||
extern const luaL_Reg lovrFont[];
|
||||
|
|
|
@ -10,6 +10,7 @@ int l_lovrPhysicsInit(lua_State* L) {
|
|||
luax_registertype(L, "World", lovrWorld);
|
||||
luax_registertype(L, "Collider", lovrCollider);
|
||||
luax_extendtype(L, "Joint", "BallJoint", lovrJoint, lovrBallJoint);
|
||||
luax_extendtype(L, "Joint", "DistanceJoint", lovrJoint, lovrDistanceJoint);
|
||||
luax_extendtype(L, "Joint", "HingeJoint", lovrJoint, lovrHingeJoint);
|
||||
luax_extendtype(L, "Joint", "SliderJoint", lovrJoint, lovrSliderJoint);
|
||||
luax_extendtype(L, "Shape", "SphereShape", lovrShape, lovrSphereShape);
|
||||
|
@ -94,6 +95,20 @@ int l_lovrPhysicsNewCylinderShape(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrPhysicsNewDistanceJoint(lua_State* L) {
|
||||
Collider* a = luax_checktype(L, 1, Collider);
|
||||
Collider* b = luax_checktype(L, 2, Collider);
|
||||
float x1 = luaL_checknumber(L, 3);
|
||||
float y1 = luaL_checknumber(L, 4);
|
||||
float z1 = luaL_checknumber(L, 5);
|
||||
float x2 = luaL_checknumber(L, 6);
|
||||
float y2 = luaL_checknumber(L, 7);
|
||||
float z2 = luaL_checknumber(L, 8);
|
||||
DistanceJoint* joint = lovrDistanceJointCreate(a, b, x1, y1, z1, x2, y2, z2);
|
||||
luax_pushtype(L, DistanceJoint, joint);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrPhysicsNewHingeJoint(lua_State* L) {
|
||||
Collider* a = luax_checktype(L, 1, Collider);
|
||||
Collider* b = luax_checktype(L, 2, Collider);
|
||||
|
@ -132,6 +147,7 @@ const luaL_Reg lovrPhysics[] = {
|
|||
{ "newBoxShape", l_lovrPhysicsNewBoxShape },
|
||||
{ "newCapsuleShape", l_lovrPhysicsNewCapsuleShape },
|
||||
{ "newCylinderShape", l_lovrPhysicsNewCylinderShape },
|
||||
{ "newDistanceJoint", l_lovrPhysicsNewDistanceJoint },
|
||||
{ "newHingeJoint", l_lovrPhysicsNewHingeJoint },
|
||||
{ "newSliderJoint", l_lovrPhysicsNewSliderJoint },
|
||||
{ "newSphereShape", l_lovrPhysicsNewSphereShape },
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
int luax_pushjoint(lua_State* L, Joint* joint) {
|
||||
switch (lovrJointGetType(joint)) {
|
||||
case JOINT_BALL: luax_pushtype(L, BallJoint, joint); return 1;
|
||||
case JOINT_DISTANCE: luax_pushtype(L, DistanceJoint, joint); return 1;
|
||||
case JOINT_HINGE: luax_pushtype(L, HingeJoint, joint); return 1;
|
||||
case JOINT_SLIDER: luax_pushtype(L, SliderJoint, joint); return 1;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
@ -64,9 +67,9 @@ const luaL_Reg lovrJoint[] = {
|
|||
};
|
||||
|
||||
int l_lovrBallJointGetAnchors(lua_State* L) {
|
||||
BallJoint* ball = luax_checktype(L, 1, BallJoint);
|
||||
BallJoint* joint = luax_checktype(L, 1, BallJoint);
|
||||
float x1, y1, z1, x2, y2, z2;
|
||||
lovrBallJointGetAnchors(ball, &x1, &y1, &z1, &x2, &y2, &z2);
|
||||
lovrBallJointGetAnchors(joint, &x1, &y1, &z1, &x2, &y2, &z2);
|
||||
lua_pushnumber(L, x1);
|
||||
lua_pushnumber(L, y1);
|
||||
lua_pushnumber(L, z1);
|
||||
|
@ -77,11 +80,11 @@ int l_lovrBallJointGetAnchors(lua_State* L) {
|
|||
}
|
||||
|
||||
int l_lovrBallJointSetAnchor(lua_State* L) {
|
||||
BallJoint* ball = luax_checktype(L, 1, BallJoint);
|
||||
BallJoint* joint = luax_checktype(L, 1, BallJoint);
|
||||
float x = luaL_checknumber(L, 2);
|
||||
float y = luaL_checknumber(L, 3);
|
||||
float z = luaL_checknumber(L, 4);
|
||||
lovrBallJointSetAnchor(ball, x, y, z);
|
||||
lovrBallJointSetAnchor(joint, x, y, z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -91,10 +94,56 @@ const luaL_Reg lovrBallJoint[] = {
|
|||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
int l_lovrHingeJointGetAnchors(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
int l_lovrDistanceJointGetAnchors(lua_State* L) {
|
||||
DistanceJoint* joint = luax_checktype(L, 1, DistanceJoint);
|
||||
float x1, y1, z1, x2, y2, z2;
|
||||
lovrHingeJointGetAnchors(hinge, &x1, &y1, &z1, &x2, &y2, &z2);
|
||||
lovrDistanceJointGetAnchors(joint, &x1, &y1, &z1, &x2, &y2, &z2);
|
||||
lua_pushnumber(L, x1);
|
||||
lua_pushnumber(L, y1);
|
||||
lua_pushnumber(L, z1);
|
||||
lua_pushnumber(L, x2);
|
||||
lua_pushnumber(L, y2);
|
||||
lua_pushnumber(L, z2);
|
||||
return 6;
|
||||
}
|
||||
|
||||
int l_lovrDistanceJointSetAnchors(lua_State* L) {
|
||||
DistanceJoint* joint = luax_checktype(L, 1, DistanceJoint);
|
||||
float x1 = luaL_checknumber(L, 2);
|
||||
float y1 = luaL_checknumber(L, 3);
|
||||
float z1 = luaL_checknumber(L, 4);
|
||||
float x2 = luaL_checknumber(L, 5);
|
||||
float y2 = luaL_checknumber(L, 6);
|
||||
float z2 = luaL_checknumber(L, 7);
|
||||
lovrDistanceJointSetAnchors(joint, x1, y1, z1, x2, y2, z2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrDistanceJointGetDistance(lua_State* L) {
|
||||
DistanceJoint* joint = luax_checktype(L, 1, DistanceJoint);
|
||||
lua_pushnumber(L, lovrDistanceJointGetDistance(joint));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrDistanceJointSetDistance(lua_State* L) {
|
||||
DistanceJoint* joint = luax_checktype(L, 1, DistanceJoint);
|
||||
float distance = luaL_checknumber(L, 2);
|
||||
lovrDistanceJointSetDistance(joint, distance);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg lovrDistanceJoint[] = {
|
||||
{ "getAnchors", l_lovrDistanceJointGetAnchors },
|
||||
{ "setAnchors", l_lovrDistanceJointSetAnchors },
|
||||
{ "getDistance", l_lovrDistanceJointGetDistance },
|
||||
{ "setDistance", l_lovrDistanceJointSetDistance },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
int l_lovrHingeJointGetAnchors(lua_State* L) {
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
float x1, y1, z1, x2, y2, z2;
|
||||
lovrHingeJointGetAnchors(joint, &x1, &y1, &z1, &x2, &y2, &z2);
|
||||
lua_pushnumber(L, x1);
|
||||
lua_pushnumber(L, y1);
|
||||
lua_pushnumber(L, z1);
|
||||
|
@ -105,18 +154,18 @@ int l_lovrHingeJointGetAnchors(lua_State* L) {
|
|||
}
|
||||
|
||||
int l_lovrHingeJointSetAnchor(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
float x = luaL_checknumber(L, 2);
|
||||
float y = luaL_checknumber(L, 3);
|
||||
float z = luaL_checknumber(L, 4);
|
||||
lovrHingeJointSetAnchor(hinge, x, y, z);
|
||||
lovrHingeJointSetAnchor(joint, x, y, z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointGetAxis(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
float x, y, z;
|
||||
lovrHingeJointGetAxis(hinge, &x, &y, &z);
|
||||
lovrHingeJointGetAxis(joint, &x, &y, &z);
|
||||
lua_pushnumber(L, x);
|
||||
lua_pushnumber(L, y);
|
||||
lua_pushnumber(L, z);
|
||||
|
@ -124,59 +173,59 @@ int l_lovrHingeJointGetAxis(lua_State* L) {
|
|||
}
|
||||
|
||||
int l_lovrHingeJointSetAxis(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
float x = luaL_checknumber(L, 2);
|
||||
float y = luaL_checknumber(L, 3);
|
||||
float z = luaL_checknumber(L, 4);
|
||||
lovrHingeJointSetAxis(hinge, x, y, z);
|
||||
lovrHingeJointSetAxis(joint, x, y, z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointGetAngle(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetAngle(hinge));
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetAngle(joint));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointGetLowerLimit(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetLowerLimit(hinge));
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetLowerLimit(joint));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointSetLowerLimit(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
float limit = luaL_checknumber(L, 2);
|
||||
lovrHingeJointSetLowerLimit(hinge, limit);
|
||||
lovrHingeJointSetLowerLimit(joint, limit);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointGetUpperLimit(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetUpperLimit(hinge));
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetUpperLimit(joint));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointSetUpperLimit(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
float limit = luaL_checknumber(L, 2);
|
||||
lovrHingeJointSetUpperLimit(hinge, limit);
|
||||
lovrHingeJointSetUpperLimit(joint, limit);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointGetLimits(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetLowerLimit(hinge));
|
||||
lua_pushnumber(L, lovrHingeJointGetUpperLimit(hinge));
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetLowerLimit(joint));
|
||||
lua_pushnumber(L, lovrHingeJointGetUpperLimit(joint));
|
||||
return 2;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointSetLimits(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
HingeJoint* joint = luax_checktype(L, 1, HingeJoint);
|
||||
float lower = luaL_checknumber(L, 2);
|
||||
float upper = luaL_checknumber(L, 3);
|
||||
lovrHingeJointSetLowerLimit(hinge, lower);
|
||||
lovrHingeJointSetUpperLimit(hinge, upper);
|
||||
lovrHingeJointSetLowerLimit(joint, lower);
|
||||
lovrHingeJointSetUpperLimit(joint, upper);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -196,9 +245,9 @@ const luaL_Reg lovrHingeJoint[] = {
|
|||
};
|
||||
|
||||
int l_lovrSliderJointGetAxis(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
SliderJoint* joint = luax_checktype(L, 1, SliderJoint);
|
||||
float x, y, z;
|
||||
lovrSliderJointGetAxis(slider, &x, &y, &z);
|
||||
lovrSliderJointGetAxis(joint, &x, &y, &z);
|
||||
lua_pushnumber(L, x);
|
||||
lua_pushnumber(L, y);
|
||||
lua_pushnumber(L, z);
|
||||
|
@ -206,59 +255,59 @@ int l_lovrSliderJointGetAxis(lua_State* L) {
|
|||
}
|
||||
|
||||
int l_lovrSliderJointSetAxis(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
SliderJoint* joint = luax_checktype(L, 1, SliderJoint);
|
||||
float x = luaL_checknumber(L, 2);
|
||||
float y = luaL_checknumber(L, 3);
|
||||
float z = luaL_checknumber(L, 4);
|
||||
lovrSliderJointSetAxis(slider, x, y, z);
|
||||
lovrSliderJointSetAxis(joint, x, y, z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointGetPosition(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetPosition(slider));
|
||||
SliderJoint* joint = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetPosition(joint));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointGetLowerLimit(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetLowerLimit(slider));
|
||||
SliderJoint* joint = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetLowerLimit(joint));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointSetLowerLimit(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
SliderJoint* joint = luax_checktype(L, 1, SliderJoint);
|
||||
float limit = luaL_checknumber(L, 2);
|
||||
lovrSliderJointSetLowerLimit(slider, limit);
|
||||
lovrSliderJointSetLowerLimit(joint, limit);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointGetUpperLimit(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetUpperLimit(slider));
|
||||
SliderJoint* joint = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetUpperLimit(joint));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointSetUpperLimit(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
SliderJoint* joint = luax_checktype(L, 1, SliderJoint);
|
||||
float limit = luaL_checknumber(L, 2);
|
||||
lovrSliderJointSetUpperLimit(slider, limit);
|
||||
lovrSliderJointSetUpperLimit(joint, limit);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointGetLimits(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetLowerLimit(slider));
|
||||
lua_pushnumber(L, lovrSliderJointGetUpperLimit(slider));
|
||||
SliderJoint* joint = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetLowerLimit(joint));
|
||||
lua_pushnumber(L, lovrSliderJointGetUpperLimit(joint));
|
||||
return 2;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointSetLimits(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
SliderJoint* joint = luax_checktype(L, 1, SliderJoint);
|
||||
float lower = luaL_checknumber(L, 2);
|
||||
float upper = luaL_checknumber(L, 3);
|
||||
lovrSliderJointSetLowerLimit(slider, lower);
|
||||
lovrSliderJointSetUpperLimit(slider, upper);
|
||||
lovrSliderJointSetLowerLimit(joint, lower);
|
||||
lovrSliderJointSetUpperLimit(joint, upper);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -899,25 +899,67 @@ BallJoint* lovrBallJointCreate(Collider* a, Collider* b, float x, float y, float
|
|||
joint->id = dJointCreateBall(a->world->id, 0);
|
||||
dJointSetData(joint->id, joint);
|
||||
dJointAttach(joint->id, a->body, b->body);
|
||||
dJointSetBallAnchor(joint->id, x, y, z);
|
||||
lovrBallJointSetAnchor(joint, x, y, z);
|
||||
|
||||
return joint;
|
||||
}
|
||||
|
||||
void lovrBallJointGetAnchors(BallJoint* ball, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2) {
|
||||
void lovrBallJointGetAnchors(BallJoint* joint, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2) {
|
||||
float anchor[3];
|
||||
dJointGetBallAnchor(ball->id, anchor);
|
||||
dJointGetBallAnchor(joint->id, anchor);
|
||||
*x1 = anchor[0];
|
||||
*y1 = anchor[1];
|
||||
*z1 = anchor[2];
|
||||
dJointGetBallAnchor2(ball->id, anchor);
|
||||
dJointGetBallAnchor2(joint->id, anchor);
|
||||
*x2 = anchor[0];
|
||||
*y2 = anchor[1];
|
||||
*z2 = anchor[2];
|
||||
}
|
||||
|
||||
void lovrBallJointSetAnchor(BallJoint* ball, float x, float y, float z) {
|
||||
dJointSetBallAnchor(ball->id, x, y, z);
|
||||
void lovrBallJointSetAnchor(BallJoint* joint, float x, float y, float z) {
|
||||
dJointSetBallAnchor(joint->id, x, y, z);
|
||||
}
|
||||
|
||||
DistanceJoint* lovrDistanceJointCreate(Collider* a, Collider* b, float x1, float y1, float z1, float x2, float y2, float z2) {
|
||||
if (a->world != b->world) {
|
||||
error("Joint bodies must exist in same World");
|
||||
}
|
||||
|
||||
DistanceJoint* joint = lovrAlloc(sizeof(DistanceJoint), lovrJointDestroy);
|
||||
if (!joint) return NULL;
|
||||
|
||||
joint->type = JOINT_DISTANCE;
|
||||
joint->id = dJointCreateDBall(a->world->id, 0);
|
||||
dJointSetData(joint->id, joint);
|
||||
dJointAttach(joint->id, a->body, b->body);
|
||||
lovrDistanceJointSetAnchors(joint, x1, y1, z1, x2, y2, z2);
|
||||
|
||||
return joint;
|
||||
}
|
||||
|
||||
void lovrDistanceJointGetAnchors(DistanceJoint* joint, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2) {
|
||||
float anchor[3];
|
||||
dJointGetDBallAnchor1(joint->id, anchor);
|
||||
*x1 = anchor[0];
|
||||
*y1 = anchor[1];
|
||||
*z1 = anchor[2];
|
||||
dJointGetDBallAnchor2(joint->id, anchor);
|
||||
*x2 = anchor[0];
|
||||
*y2 = anchor[1];
|
||||
*z2 = anchor[2];
|
||||
}
|
||||
|
||||
void lovrDistanceJointSetAnchors(DistanceJoint* joint, float x1, float y1, float z1, float x2, float y2, float z2) {
|
||||
dJointSetDBallAnchor1(joint->id, x1, y1, z1);
|
||||
dJointSetDBallAnchor2(joint->id, x2, y2, z2);
|
||||
}
|
||||
|
||||
float lovrDistanceJointGetDistance(DistanceJoint* joint) {
|
||||
return dJointGetDBallDistance(joint->id);
|
||||
}
|
||||
|
||||
void lovrDistanceJointSetDistance(DistanceJoint* joint, float distance) {
|
||||
dJointSetDBallDistance(joint->id, distance);
|
||||
}
|
||||
|
||||
HingeJoint* lovrHingeJointCreate(Collider* a, Collider* b, float x, float y, float z, float ax, float ay, float az) {
|
||||
|
@ -932,58 +974,58 @@ HingeJoint* lovrHingeJointCreate(Collider* a, Collider* b, float x, float y, flo
|
|||
joint->id = dJointCreateHinge(a->world->id, 0);
|
||||
dJointSetData(joint->id, joint);
|
||||
dJointAttach(joint->id, a->body, b->body);
|
||||
dJointSetHingeAnchor(joint->id, x, y, z);
|
||||
dJointSetHingeAxis(joint->id, ax, ay, az);
|
||||
lovrHingeJointSetAnchor(joint, x, y, z);
|
||||
lovrHingeJointSetAxis(joint, ax, ay, az);
|
||||
|
||||
return joint;
|
||||
}
|
||||
|
||||
void lovrHingeJointGetAnchors(HingeJoint* hinge, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2) {
|
||||
void lovrHingeJointGetAnchors(HingeJoint* joint, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2) {
|
||||
float anchor[3];
|
||||
dJointGetHingeAnchor(hinge->id, anchor);
|
||||
dJointGetHingeAnchor(joint->id, anchor);
|
||||
*x1 = anchor[0];
|
||||
*y1 = anchor[1];
|
||||
*z1 = anchor[2];
|
||||
dJointGetHingeAnchor2(hinge->id, anchor);
|
||||
dJointGetHingeAnchor2(joint->id, anchor);
|
||||
*x2 = anchor[0];
|
||||
*y2 = anchor[1];
|
||||
*z2 = anchor[2];
|
||||
}
|
||||
|
||||
void lovrHingeJointSetAnchor(HingeJoint* hinge, float x, float y, float z) {
|
||||
dJointSetHingeAnchor(hinge->id, x, y, z);
|
||||
void lovrHingeJointSetAnchor(HingeJoint* joint, float x, float y, float z) {
|
||||
dJointSetHingeAnchor(joint->id, x, y, z);
|
||||
}
|
||||
|
||||
void lovrHingeJointGetAxis(HingeJoint* hinge, float* x, float* y, float* z) {
|
||||
void lovrHingeJointGetAxis(HingeJoint* joint, float* x, float* y, float* z) {
|
||||
float axis[3];
|
||||
dJointGetHingeAxis(hinge->id, axis);
|
||||
dJointGetHingeAxis(joint->id, axis);
|
||||
*x = axis[0];
|
||||
*y = axis[1];
|
||||
*z = axis[2];
|
||||
}
|
||||
|
||||
void lovrHingeJointSetAxis(HingeJoint* hinge, float x, float y, float z) {
|
||||
dJointSetHingeAxis(hinge->id, x, y, z);
|
||||
void lovrHingeJointSetAxis(HingeJoint* joint, float x, float y, float z) {
|
||||
dJointSetHingeAxis(joint->id, x, y, z);
|
||||
}
|
||||
|
||||
float lovrHingeJointGetAngle(HingeJoint* hinge) {
|
||||
return dJointGetHingeAngle(hinge->id);
|
||||
float lovrHingeJointGetAngle(HingeJoint* joint) {
|
||||
return dJointGetHingeAngle(joint->id);
|
||||
}
|
||||
|
||||
float lovrHingeJointGetLowerLimit(HingeJoint* hinge) {
|
||||
return dJointGetHingeParam(hinge->id, dParamLoStop);
|
||||
float lovrHingeJointGetLowerLimit(HingeJoint* joint) {
|
||||
return dJointGetHingeParam(joint->id, dParamLoStop);
|
||||
}
|
||||
|
||||
void lovrHingeJointSetLowerLimit(HingeJoint* hinge, float limit) {
|
||||
dJointSetHingeParam(hinge->id, dParamLoStop, limit);
|
||||
void lovrHingeJointSetLowerLimit(HingeJoint* joint, float limit) {
|
||||
dJointSetHingeParam(joint->id, dParamLoStop, limit);
|
||||
}
|
||||
|
||||
float lovrHingeJointGetUpperLimit(HingeJoint* hinge) {
|
||||
return dJointGetHingeParam(hinge->id, dParamHiStop);
|
||||
float lovrHingeJointGetUpperLimit(HingeJoint* joint) {
|
||||
return dJointGetHingeParam(joint->id, dParamHiStop);
|
||||
}
|
||||
|
||||
void lovrHingeJointSetUpperLimit(HingeJoint* hinge, float limit) {
|
||||
dJointSetHingeParam(hinge->id, dParamHiStop, limit);
|
||||
void lovrHingeJointSetUpperLimit(HingeJoint* joint, float limit) {
|
||||
dJointSetHingeParam(joint->id, dParamHiStop, limit);
|
||||
}
|
||||
|
||||
SliderJoint* lovrSliderJointCreate(Collider* a, Collider* b, float ax, float ay, float az) {
|
||||
|
@ -998,39 +1040,39 @@ SliderJoint* lovrSliderJointCreate(Collider* a, Collider* b, float ax, float ay,
|
|||
joint->id = dJointCreateSlider(a->world->id, 0);
|
||||
dJointSetData(joint->id, joint);
|
||||
dJointAttach(joint->id, a->body, b->body);
|
||||
dJointSetSliderAxis(joint->id, ax, ay, az);
|
||||
lovrSliderJointSetAxis(joint, ax, ay, az);
|
||||
|
||||
return joint;
|
||||
}
|
||||
|
||||
void lovrSliderJointGetAxis(SliderJoint* slider, float* x, float* y, float* z) {
|
||||
void lovrSliderJointGetAxis(SliderJoint* joint, float* x, float* y, float* z) {
|
||||
float axis[3];
|
||||
dJointGetSliderAxis(slider->id, axis);
|
||||
dJointGetSliderAxis(joint->id, axis);
|
||||
*x = axis[0];
|
||||
*y = axis[1];
|
||||
*z = axis[2];
|
||||
}
|
||||
|
||||
void lovrSliderJointSetAxis(SliderJoint* slider, float x, float y, float z) {
|
||||
dJointSetSliderAxis(slider->id, x, y, z);
|
||||
void lovrSliderJointSetAxis(SliderJoint* joint, float x, float y, float z) {
|
||||
dJointSetSliderAxis(joint->id, x, y, z);
|
||||
}
|
||||
|
||||
float lovrSliderJointGetPosition(SliderJoint* slider) {
|
||||
return dJointGetSliderPosition(slider->id);
|
||||
float lovrSliderJointGetPosition(SliderJoint* joint) {
|
||||
return dJointGetSliderPosition(joint->id);
|
||||
}
|
||||
|
||||
float lovrSliderJointGetLowerLimit(SliderJoint* slider) {
|
||||
return dJointGetSliderParam(slider->id, dParamLoStop);
|
||||
float lovrSliderJointGetLowerLimit(SliderJoint* joint) {
|
||||
return dJointGetSliderParam(joint->id, dParamLoStop);
|
||||
}
|
||||
|
||||
void lovrSliderJointSetLowerLimit(SliderJoint* slider, float limit) {
|
||||
dJointSetSliderParam(slider->id, dParamLoStop, limit);
|
||||
void lovrSliderJointSetLowerLimit(SliderJoint* joint, float limit) {
|
||||
dJointSetSliderParam(joint->id, dParamLoStop, limit);
|
||||
}
|
||||
|
||||
float lovrSliderJointGetUpperLimit(SliderJoint* slider) {
|
||||
return dJointGetSliderParam(slider->id, dParamHiStop);
|
||||
float lovrSliderJointGetUpperLimit(SliderJoint* joint) {
|
||||
return dJointGetSliderParam(joint->id, dParamHiStop);
|
||||
}
|
||||
|
||||
void lovrSliderJointSetUpperLimit(SliderJoint* slider, float limit) {
|
||||
dJointSetSliderParam(slider->id, dParamHiStop, limit);
|
||||
void lovrSliderJointSetUpperLimit(SliderJoint* joint, float limit) {
|
||||
dJointSetSliderParam(joint->id, dParamHiStop, limit);
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ typedef enum {
|
|||
|
||||
typedef enum {
|
||||
JOINT_BALL,
|
||||
JOINT_DISTANCE,
|
||||
JOINT_HINGE,
|
||||
JOINT_SLIDER
|
||||
} JointType;
|
||||
|
@ -66,6 +67,7 @@ typedef struct {
|
|||
} Joint;
|
||||
|
||||
typedef Joint BallJoint;
|
||||
typedef Joint DistanceJoint;
|
||||
typedef Joint HingeJoint;
|
||||
typedef Joint SliderJoint;
|
||||
|
||||
|
@ -196,25 +198,31 @@ void* lovrJointGetUserData(Joint* joint);
|
|||
void lovrJointSetUserData(Joint* joint, void* data);
|
||||
|
||||
BallJoint* lovrBallJointCreate(Collider* a, Collider* b, float x, float y, float z);
|
||||
void lovrBallJointGetAnchors(BallJoint* ball, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2);
|
||||
void lovrBallJointSetAnchor(BallJoint* ball, float x, float y, float z);
|
||||
void lovrBallJointGetAnchors(BallJoint* joint, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2);
|
||||
void lovrBallJointSetAnchor(BallJoint* joint, float x, float y, float z);
|
||||
|
||||
DistanceJoint* lovrDistanceJointCreate(Collider* a, Collider* b, float x1, float y1, float z1, float x2, float y2, float z2);
|
||||
void lovrDistanceJointGetAnchors(DistanceJoint* joint, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2);
|
||||
void lovrDistanceJointSetAnchors(DistanceJoint* joint, float x1, float y1, float z1, float x2, float y2, float z2);
|
||||
float lovrDistanceJointGetDistance(DistanceJoint* joint);
|
||||
void lovrDistanceJointSetDistance(DistanceJoint* joint, float distance);
|
||||
|
||||
HingeJoint* lovrHingeJointCreate(Collider* a, Collider* b, float x, float y, float z, float ax, float ay, float az);
|
||||
void lovrHingeJointGetAnchors(HingeJoint* hinge, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2);
|
||||
void lovrHingeJointSetAnchor(HingeJoint* hinge, float x, float y, float z);
|
||||
void lovrHingeJointGetAxis(HingeJoint* hinge, float* x, float* y, float* z);
|
||||
void lovrHingeJointSetAxis(HingeJoint* hinge, float x, float y, float z);
|
||||
float lovrHingeJointGetAngle(HingeJoint* hinge);
|
||||
float lovrHingeJointGetLowerLimit(HingeJoint* hinge);
|
||||
void lovrHingeJointSetLowerLimit(HingeJoint* hinge, float limit);
|
||||
float lovrHingeJointGetUpperLimit(HingeJoint* hinge);
|
||||
void lovrHingeJointSetUpperLimit(HingeJoint* hinge, float limit);
|
||||
void lovrHingeJointGetAnchors(HingeJoint* joint, float* x1, float* y1, float* z1, float* x2, float* y2, float* z2);
|
||||
void lovrHingeJointSetAnchor(HingeJoint* joint, float x, float y, float z);
|
||||
void lovrHingeJointGetAxis(HingeJoint* joint, float* x, float* y, float* z);
|
||||
void lovrHingeJointSetAxis(HingeJoint* joint, float x, float y, float z);
|
||||
float lovrHingeJointGetAngle(HingeJoint* joint);
|
||||
float lovrHingeJointGetLowerLimit(HingeJoint* joint);
|
||||
void lovrHingeJointSetLowerLimit(HingeJoint* joint, float limit);
|
||||
float lovrHingeJointGetUpperLimit(HingeJoint* joint);
|
||||
void lovrHingeJointSetUpperLimit(HingeJoint* joint, float limit);
|
||||
|
||||
SliderJoint* lovrSliderJointCreate(Collider* a, Collider* b, float ax, float ay, float az);
|
||||
void lovrSliderJointGetAxis(SliderJoint* slider, float* x, float* y, float* z);
|
||||
void lovrSliderJointSetAxis(SliderJoint* slider, float x, float y, float z);
|
||||
float lovrSliderJointGetPosition(SliderJoint* slider);
|
||||
float lovrSliderJointGetLowerLimit(SliderJoint* slider);
|
||||
void lovrSliderJointSetLowerLimit(SliderJoint* slider, float limit);
|
||||
float lovrSliderJointGetUpperLimit(SliderJoint* slider);
|
||||
void lovrSliderJointSetUpperLimit(SliderJoint* slider, float limit);
|
||||
void lovrSliderJointGetAxis(SliderJoint* joint, float* x, float* y, float* z);
|
||||
void lovrSliderJointSetAxis(SliderJoint* joint, float x, float y, float z);
|
||||
float lovrSliderJointGetPosition(SliderJoint* joint);
|
||||
float lovrSliderJointGetLowerLimit(SliderJoint* joint);
|
||||
void lovrSliderJointSetLowerLimit(SliderJoint* joint, float limit);
|
||||
float lovrSliderJointGetUpperLimit(SliderJoint* joint);
|
||||
void lovrSliderJointSetUpperLimit(SliderJoint* joint, float limit);
|
||||
|
|
Loading…
Reference in New Issue