Joint:isEnabled; Joint:setEnabled;

This commit is contained in:
bjorn 2019-11-11 16:27:30 -08:00
parent 26aa87034a
commit a7e24ab28e
4 changed files with 32 additions and 1 deletions

View File

@ -7,6 +7,7 @@ void luax_pushjoint(lua_State* L, Joint* joint) {
case JOINT_DISTANCE: luax_pushtype(L, DistanceJoint, joint); break;
case JOINT_HINGE: luax_pushtype(L, HingeJoint, joint); break;
case JOINT_SLIDER: luax_pushtype(L, SliderJoint, joint); break;
default: lovrThrow("Unreachable");
}
}
@ -78,12 +79,27 @@ static int l_lovrJointSetUserData(lua_State* L) {
return 0;
}
static int l_lovrJointIsEnabled(lua_State* L) {
Joint* joint = luax_checkjoint(L, 1);
lua_pushboolean(L, lovrJointIsEnabled(joint));
return 1;
}
static int l_lovrJointSetEnabled(lua_State* L) {
Joint* joint = luax_checkjoint(L, 1);
bool enable = lua_toboolean(L, 2);
lovrJointSetEnabled(joint, enable);
return 0;
}
#define lovrJoint \
{ "destroy", l_lovrJointDestroy }, \
{ "getType", l_lovrJointGetType }, \
{ "getColliders", l_lovrJointGetColliders }, \
{ "getUserData", l_lovrJointGetUserData }, \
{ "setUserData", l_lovrJointSetUserData }
{ "setUserData", l_lovrJointSetUserData }, \
{ "isEnabled", l_lovrJointIsEnabled }, \
{ "setEnabled", l_lovrJointSetEnabled }
static int l_lovrBallJointGetAnchors(lua_State* L) {
BallJoint* joint = luax_checktype(L, 1, BallJoint);

View File

@ -7,6 +7,7 @@ void luax_pushshape(lua_State* L, Shape* shape) {
case SHAPE_BOX: luax_pushtype(L, BoxShape, shape); break;
case SHAPE_CAPSULE: luax_pushtype(L, CapsuleShape, shape); break;
case SHAPE_CYLINDER: luax_pushtype(L, CylinderShape, shape); break;
default: lovrThrow("Unreachable");
}
}

View File

@ -900,6 +900,18 @@ void lovrJointSetUserData(Joint* joint, void* data) {
joint->userdata = data;
}
bool lovrJointIsEnabled(Joint* joint) {
return dJointIsEnabled(joint->id);
}
void lovrJointSetEnabled(Joint* joint, bool enable) {
if (enable) {
dJointEnable(joint->id);
} else {
dJointDisable(joint->id);
}
}
BallJoint* lovrBallJointInit(BallJoint* joint, Collider* a, Collider* b, float x, float y, float z) {
lovrAssert(a->world == b->world, "Joint bodies must exist in same World");
joint->type = JOINT_BALL;

View File

@ -208,6 +208,8 @@ JointType lovrJointGetType(Joint* joint);
void lovrJointGetColliders(Joint* joint, Collider** a, Collider** b);
void* lovrJointGetUserData(Joint* joint);
void lovrJointSetUserData(Joint* joint, void* data);
bool lovrJointIsEnabled(Joint* joint);
void lovrJointSetEnabled(Joint* joint, bool enable);
BallJoint* lovrBallJointInit(BallJoint* joint, Collider* a, Collider* b, float x, float y, float z);
#define lovrBallJointCreate(...) lovrBallJointInit(lovrAlloc(BallJoint), __VA_ARGS__)