Body:getLocalVector; Body:getWorldVector;

This commit is contained in:
bjorn 2017-05-15 23:30:26 -06:00
parent 35bab33e54
commit 0b6788dfcb
3 changed files with 46 additions and 0 deletions

View File

@ -179,6 +179,32 @@ int l_lovrBodyGetWorldPoint(lua_State* L) {
return 3;
}
int l_lovrBodyGetLocalVector(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;
lovrBodyGetLocalVector(body, wx, wy, wz, &x, &y, &z);
lua_pushnumber(L, x);
lua_pushnumber(L, y);
lua_pushnumber(L, z);
return 3;
}
int l_lovrBodyGetWorldVector(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;
lovrBodyGetWorldVector(body, x, y, z, &wx, &wy, &wz);
lua_pushnumber(L, wx);
lua_pushnumber(L, wy);
lua_pushnumber(L, wz);
return 3;
}
int l_lovrBodyGetLinearVelocityFromLocalPoint(lua_State* L) {
Body* body = luax_checktype(L, 1, Body);
float x = luaL_checknumber(L, 2);
@ -224,6 +250,8 @@ const luaL_Reg lovrBody[] = {
{ "setKinematic", l_lovrBodySetKinematic },
{ "getLocalPoint", l_lovrBodyGetLocalPoint },
{ "getWorldPoint", l_lovrBodyGetWorldPoint },
{ "getLocalVector", l_lovrBodyGetLocalVector },
{ "getWorldVector", l_lovrBodyGetWorldVector },
{ "getLinearVelocityFromLocalPoint", l_lovrBodyGetLinearVelocityFromLocalPoint },
{ "getLinearVelocityFromWorldPoint", l_lovrBodyGetLinearVelocityFromWorldPoint },
{ NULL, NULL }

View File

@ -201,6 +201,22 @@ void lovrBodyGetWorldPoint(Body* body, float x, float y, float z, float* wx, flo
*wz = world[2];
}
void lovrBodyGetLocalVector(Body* body, float wx, float wy, float wz, float* x, float* y, float* z) {
dReal local[3];
dBodyVectorFromWorld(body->id, wx, wy, wz, local);
*x = local[0];
*y = local[1];
*z = local[2];
}
void lovrBodyGetWorldVector(Body* body, float x, float y, float z, float* wx, float* wy, float* wz) {
dReal world[3];
dBodyVectorToWorld(body->id, x, y, z, world);
*wx = world[0];
*wy = world[1];
*wz = world[2];
}
void lovrBodyGetLinearVelocityFromLocalPoint(Body* body, float x, float y, float z, float* vx, float* vy, float* vz) {
dReal velocity[3];
dBodyGetRelPointVel(body->id, x, y, z, velocity);

View File

@ -48,5 +48,7 @@ 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);
void lovrBodyGetLocalVector(Body* body, float wx, float wy, float wz, float* x, float* y, float* z);
void lovrBodyGetWorldVector(Body* body, float x, float y, float z, float* wx, float* wy, float* wz);
void lovrBodyGetLinearVelocityFromLocalPoint(Body* body, float x, float y, float z, float* vx, float* vy, float* vz);
void lovrBodyGetLinearVelocityFromWorldPoint(Body* body, float wx, float wy, float wz, float* vx, float* vy, float* vz);