mirror of https://github.com/bjornbytes/lovr.git
Joint limits;
This commit is contained in:
parent
39400776dc
commit
c198369c95
|
@ -64,7 +64,7 @@ int l_lovrPhysicsNewBallJoint(lua_State* L) {
|
|||
float x = luaL_checknumber(L, 3);
|
||||
float y = luaL_checknumber(L, 4);
|
||||
float z = luaL_checknumber(L, 5);
|
||||
Joint* joint = lovrBallJointCreate(a, b, x, y, z);
|
||||
BallJoint* joint = lovrBallJointCreate(a, b, x, y, z);
|
||||
luax_pushtype(L, BallJoint, joint);
|
||||
return 1;
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ int l_lovrPhysicsNewHingeJoint(lua_State* L) {
|
|||
float ax = luaL_checknumber(L, 6);
|
||||
float ay = luaL_checknumber(L, 7);
|
||||
float az = luaL_checknumber(L, 8);
|
||||
Joint* joint = lovrHingeJointCreate(a, b, x, y, z, ax, ay, az);
|
||||
HingeJoint* joint = lovrHingeJointCreate(a, b, x, y, z, ax, ay, az);
|
||||
luax_pushtype(L, HingeJoint, joint);
|
||||
return 1;
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ int l_lovrPhysicsNewSliderJoint(lua_State* L) {
|
|||
float ax = luaL_checknumber(L, 3);
|
||||
float ay = luaL_checknumber(L, 4);
|
||||
float az = luaL_checknumber(L, 5);
|
||||
Joint* joint = lovrSliderJointCreate(a, b, ax, ay, az);
|
||||
SliderJoint* joint = lovrSliderJointCreate(a, b, ax, ay, az);
|
||||
luax_pushtype(L, SliderJoint, joint);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -138,12 +138,60 @@ int l_lovrHingeJointGetAngle(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointGetLowerLimit(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetLowerLimit(hinge));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointSetLowerLimit(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
float limit = luaL_checknumber(L, 2);
|
||||
lovrHingeJointSetLowerLimit(hinge, limit);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointGetUpperLimit(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
lua_pushnumber(L, lovrHingeJointGetUpperLimit(hinge));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointSetUpperLimit(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
float limit = luaL_checknumber(L, 2);
|
||||
lovrHingeJointSetUpperLimit(hinge, 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));
|
||||
return 2;
|
||||
}
|
||||
|
||||
int l_lovrHingeJointSetLimits(lua_State* L) {
|
||||
HingeJoint* hinge = luax_checktype(L, 1, HingeJoint);
|
||||
float lower = luaL_checknumber(L, 2);
|
||||
float upper = luaL_checknumber(L, 3);
|
||||
lovrHingeJointSetLowerLimit(hinge, lower);
|
||||
lovrHingeJointSetUpperLimit(hinge, upper);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg lovrHingeJoint[] = {
|
||||
{ "getAnchors", l_lovrHingeJointGetAnchors },
|
||||
{ "setAnchor", l_lovrHingeJointSetAnchor },
|
||||
{ "getAxis", l_lovrHingeJointGetAxis },
|
||||
{ "setAxis", l_lovrHingeJointSetAxis },
|
||||
{ "getAngle", l_lovrHingeJointGetAngle },
|
||||
{ "getLowerLimit", l_lovrHingeJointGetLowerLimit },
|
||||
{ "setLowerLimit", l_lovrHingeJointSetLowerLimit },
|
||||
{ "getUpperLimit", l_lovrHingeJointGetUpperLimit },
|
||||
{ "setUpperLimit", l_lovrHingeJointSetUpperLimit },
|
||||
{ "getLimits", l_lovrHingeJointGetLimits },
|
||||
{ "setLimits", l_lovrHingeJointSetLimits },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
@ -172,9 +220,57 @@ int l_lovrSliderJointGetPosition(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointGetLowerLimit(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetLowerLimit(slider));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointSetLowerLimit(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
float limit = luaL_checknumber(L, 2);
|
||||
lovrSliderJointSetLowerLimit(slider, limit);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointGetUpperLimit(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
lua_pushnumber(L, lovrSliderJointGetUpperLimit(slider));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointSetUpperLimit(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
float limit = luaL_checknumber(L, 2);
|
||||
lovrSliderJointSetUpperLimit(slider, 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));
|
||||
return 2;
|
||||
}
|
||||
|
||||
int l_lovrSliderJointSetLimits(lua_State* L) {
|
||||
SliderJoint* slider = luax_checktype(L, 1, SliderJoint);
|
||||
float lower = luaL_checknumber(L, 2);
|
||||
float upper = luaL_checknumber(L, 3);
|
||||
lovrSliderJointSetLowerLimit(slider, lower);
|
||||
lovrSliderJointSetUpperLimit(slider, upper);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg lovrSliderJoint[] = {
|
||||
{ "getAxis", l_lovrSliderJointGetAxis },
|
||||
{ "setAxis", l_lovrSliderJointSetAxis },
|
||||
{ "getPosition", l_lovrHingeJointGetAngle },
|
||||
{ "getPosition", l_lovrSliderJointGetPosition },
|
||||
{ "getLowerLimit", l_lovrSliderJointGetLowerLimit },
|
||||
{ "setLowerLimit", l_lovrSliderJointSetLowerLimit },
|
||||
{ "getUpperLimit", l_lovrSliderJointGetUpperLimit },
|
||||
{ "setUpperLimit", l_lovrSliderJointSetUpperLimit },
|
||||
{ "getLimits", l_lovrSliderJointGetLimits },
|
||||
{ "setLimits", l_lovrSliderJointSetLimits },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
|
|
@ -973,6 +973,22 @@ float lovrHingeJointGetAngle(HingeJoint* hinge) {
|
|||
return dJointGetHingeAngle(hinge->id);
|
||||
}
|
||||
|
||||
float lovrHingeJointGetLowerLimit(HingeJoint* hinge) {
|
||||
return dJointGetHingeParam(hinge->id, dParamLoStop);
|
||||
}
|
||||
|
||||
void lovrHingeJointSetLowerLimit(HingeJoint* hinge, float limit) {
|
||||
dJointSetHingeParam(hinge->id, dParamLoStop, limit);
|
||||
}
|
||||
|
||||
float lovrHingeJointGetUpperLimit(HingeJoint* hinge) {
|
||||
return dJointGetHingeParam(hinge->id, dParamHiStop);
|
||||
}
|
||||
|
||||
void lovrHingeJointSetUpperLimit(HingeJoint* hinge, float limit) {
|
||||
dJointSetHingeParam(hinge->id, dParamHiStop, limit);
|
||||
}
|
||||
|
||||
SliderJoint* lovrSliderJointCreate(Collider* a, Collider* b, float ax, float ay, float az) {
|
||||
if (a->world != b->world) {
|
||||
error("Joint bodies must exist in same World");
|
||||
|
@ -1005,3 +1021,19 @@ void lovrSliderJointSetAxis(SliderJoint* slider, float x, float y, float z) {
|
|||
float lovrSliderJointGetPosition(SliderJoint* slider) {
|
||||
return dJointGetSliderPosition(slider->id);
|
||||
}
|
||||
|
||||
float lovrSliderJointGetLowerLimit(SliderJoint* slider) {
|
||||
return dJointGetSliderParam(slider->id, dParamLoStop);
|
||||
}
|
||||
|
||||
void lovrSliderJointSetLowerLimit(SliderJoint* slider, float limit) {
|
||||
dJointSetSliderParam(slider->id, dParamLoStop, limit);
|
||||
}
|
||||
|
||||
float lovrSliderJointGetUpperLimit(SliderJoint* slider) {
|
||||
return dJointGetSliderParam(slider->id, dParamHiStop);
|
||||
}
|
||||
|
||||
void lovrSliderJointSetUpperLimit(SliderJoint* slider, float limit) {
|
||||
dJointSetSliderParam(slider->id, dParamHiStop, limit);
|
||||
}
|
||||
|
|
|
@ -205,8 +205,16 @@ 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);
|
||||
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue