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 x = luaL_checknumber(L, 3);
|
||||||
float y = luaL_checknumber(L, 4);
|
float y = luaL_checknumber(L, 4);
|
||||||
float z = luaL_checknumber(L, 5);
|
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);
|
luax_pushtype(L, BallJoint, joint);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@ int l_lovrPhysicsNewHingeJoint(lua_State* L) {
|
||||||
float ax = luaL_checknumber(L, 6);
|
float ax = luaL_checknumber(L, 6);
|
||||||
float ay = luaL_checknumber(L, 7);
|
float ay = luaL_checknumber(L, 7);
|
||||||
float az = luaL_checknumber(L, 8);
|
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);
|
luax_pushtype(L, HingeJoint, joint);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ int l_lovrPhysicsNewSliderJoint(lua_State* L) {
|
||||||
float ax = luaL_checknumber(L, 3);
|
float ax = luaL_checknumber(L, 3);
|
||||||
float ay = luaL_checknumber(L, 4);
|
float ay = luaL_checknumber(L, 4);
|
||||||
float az = luaL_checknumber(L, 5);
|
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);
|
luax_pushtype(L, SliderJoint, joint);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,12 +138,60 @@ int l_lovrHingeJointGetAngle(lua_State* L) {
|
||||||
return 1;
|
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[] = {
|
const luaL_Reg lovrHingeJoint[] = {
|
||||||
{ "getAnchors", l_lovrHingeJointGetAnchors },
|
{ "getAnchors", l_lovrHingeJointGetAnchors },
|
||||||
{ "setAnchor", l_lovrHingeJointSetAnchor },
|
{ "setAnchor", l_lovrHingeJointSetAnchor },
|
||||||
{ "getAxis", l_lovrHingeJointGetAxis },
|
{ "getAxis", l_lovrHingeJointGetAxis },
|
||||||
{ "setAxis", l_lovrHingeJointSetAxis },
|
{ "setAxis", l_lovrHingeJointSetAxis },
|
||||||
{ "getAngle", l_lovrHingeJointGetAngle },
|
{ "getAngle", l_lovrHingeJointGetAngle },
|
||||||
|
{ "getLowerLimit", l_lovrHingeJointGetLowerLimit },
|
||||||
|
{ "setLowerLimit", l_lovrHingeJointSetLowerLimit },
|
||||||
|
{ "getUpperLimit", l_lovrHingeJointGetUpperLimit },
|
||||||
|
{ "setUpperLimit", l_lovrHingeJointSetUpperLimit },
|
||||||
|
{ "getLimits", l_lovrHingeJointGetLimits },
|
||||||
|
{ "setLimits", l_lovrHingeJointSetLimits },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -172,9 +220,57 @@ int l_lovrSliderJointGetPosition(lua_State* L) {
|
||||||
return 1;
|
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[] = {
|
const luaL_Reg lovrSliderJoint[] = {
|
||||||
{ "getAxis", l_lovrSliderJointGetAxis },
|
{ "getAxis", l_lovrSliderJointGetAxis },
|
||||||
{ "setAxis", l_lovrSliderJointSetAxis },
|
{ "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 }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
|
@ -973,6 +973,22 @@ float lovrHingeJointGetAngle(HingeJoint* hinge) {
|
||||||
return dJointGetHingeAngle(hinge->id);
|
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) {
|
SliderJoint* lovrSliderJointCreate(Collider* a, Collider* b, float ax, float ay, float az) {
|
||||||
if (a->world != b->world) {
|
if (a->world != b->world) {
|
||||||
error("Joint bodies must exist in same 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) {
|
float lovrSliderJointGetPosition(SliderJoint* slider) {
|
||||||
return dJointGetSliderPosition(slider->id);
|
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 lovrHingeJointGetAxis(HingeJoint* hinge, float* x, float* y, float* z);
|
||||||
void lovrHingeJointSetAxis(HingeJoint* hinge, float x, float y, float z);
|
void lovrHingeJointSetAxis(HingeJoint* hinge, float x, float y, float z);
|
||||||
float lovrHingeJointGetAngle(HingeJoint* hinge);
|
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);
|
SliderJoint* lovrSliderJointCreate(Collider* a, Collider* b, float ax, float ay, float az);
|
||||||
void lovrSliderJointGetAxis(SliderJoint* slider, float* x, float* y, float* z);
|
void lovrSliderJointGetAxis(SliderJoint* slider, float* x, float* y, float* z);
|
||||||
void lovrSliderJointSetAxis(SliderJoint* slider, float x, float y, float z);
|
void lovrSliderJointSetAxis(SliderJoint* slider, float x, float y, float z);
|
||||||
float lovrSliderJointGetPosition(SliderJoint* slider);
|
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