Body:getLocalPoint; Body:getWorldPoint;

This commit is contained in:
bjorn 2017-05-15 23:22:25 -06:00
parent f672fe77cd
commit b31970d85d
3 changed files with 46 additions and 0 deletions

View File

@ -153,6 +153,32 @@ int l_lovrBodySetKinematic(lua_State* L) {
return 0;
}
int l_lovrBodyGetLocalPoint(lua_State* L) {
Body* body = luax_checktype(L, 1, Body);
float wx = luaL_checknumber(L, 2);
float wy = luaL_checknumber(L, 3);
float wz = luaL_checknumber(L, 4);
float x, y, z;
lovrBodyGetLocalPoint(body, wx, wy, wz, &x, &y, &z);
lua_pushnumber(L, x);
lua_pushnumber(L, y);
lua_pushnumber(L, z);
return 3;
}
int l_lovrBodyGetWorldPoint(lua_State* L) {
Body* body = luax_checktype(L, 1, Body);
float x = luaL_checknumber(L, 2);
float y = luaL_checknumber(L, 3);
float z = luaL_checknumber(L, 4);
float wx, wy, wz;
lovrBodyGetWorldPoint(body, x, y, z, &wx, &wy, &wz);
lua_pushnumber(L, wx);
lua_pushnumber(L, wy);
lua_pushnumber(L, wz);
return 3;
}
const luaL_Reg lovrBody[] = {
{ "getPosition", l_lovrBodyGetPosition },
{ "setPosition", l_lovrBodySetPosition },
@ -170,5 +196,7 @@ const luaL_Reg lovrBody[] = {
{ "applyTorque", l_lovrBodyApplyForce },
{ "isKinematic", l_lovrBodyIsKinematic },
{ "setKinematic", l_lovrBodySetKinematic },
{ "getLocalPoint", l_lovrBodyGetLocalPoint },
{ "getWorldPoint", l_lovrBodyGetWorldPoint },
{ NULL, NULL }
};

View File

@ -184,3 +184,19 @@ void lovrBodySetKinematic(Body* body, int kinematic) {
dBodySetDynamic(body->id);
}
}
void lovrBodyGetLocalPoint(Body* body, float wx, float wy, float wz, float* x, float* y, float* z) {
dReal local[3];
dBodyGetPosRelPoint(body->id, wx, wy, wz, local);
*x = local[0];
*y = local[1];
*z = local[2];
}
void lovrBodyGetWorldPoint(Body* body, float x, float y, float z, float* wx, float* wy, float* wz) {
dReal world[3];
dBodyGetRelPointPos(body->id, x, y, z, world);
*wx = world[0];
*wy = world[1];
*wz = world[2];
}

View File

@ -46,3 +46,5 @@ void lovrBodyApplyForceAtPosition(Body* body, float x, float y, float z, float c
void lovrBodyApplyTorque(Body* body, float x, float y, float z);
int lovrBodyIsKinematic(Body* body);
void lovrBodySetKinematic(Body* body, int kinematic);
void lovrBodyGetLocalPoint(Body* body, float wx, float wy, float wz, float* x, float* y, float* z);
void lovrBodyGetWorldPoint(Body* body, float x, float y, float z, float* wx, float* wy, float* wz);