int w_Joint_getReactionTorque(lua_State *L) { Joint *t = luax_checkjoint(L, 1); float inv_dt = (float)luaL_checknumber(L, 2); lua_pushnumber(L, t->getReactionTorque(inv_dt)); return 1; }
int w_Joint_getType(lua_State *L) { Joint *t = luax_checkjoint(L, 1); const char *type = ""; Joint::getConstant(t->getType(), type); lua_pushstring(L, type); return 1; }
int w_Joint_getBodies(lua_State *L) { Joint *t = luax_checkjoint(L, 1); Body *b1 = nullptr; Body *b2 = nullptr; luax_catchexcept(L, [&]() { b1 = t->getBodyA(); b2 = t->getBodyB(); }); luax_pushtype(L, b1); luax_pushtype(L, b2); return 2; }
int w_Joint_destroy(lua_State *L) { Joint *t = luax_checkjoint(L, 1); luax_catchexcept(L, [&](){ t->destroyJoint(); }); return 0; }
int w_Joint_getUserData(lua_State *L) { Joint *t = luax_checkjoint(L, 1); lua_remove(L, 1); return t->getUserData(L); }
int w_Joint_getCollideConnected(lua_State *L) { Joint *t = luax_checkjoint(L, 1); luax_pushboolean(L, t->getCollideConnected()); return 1; }
int w_Joint_getReactionForce(lua_State *L) { Joint *t = luax_checkjoint(L, 1); lua_remove(L, 1); return t->getReactionForce(L); }
int w_Joint_getAnchors(lua_State *L) { Joint *t = luax_checkjoint(L, 1); lua_remove(L, 1); return t->getAnchors(L); }
int w_Joint_destroy(lua_State *L) { Joint *t = luax_checkjoint(L, 1); EXCEPT_GUARD(t->destroyJoint();) return 0;