Body:getLinearVelocityFromLocalPoint; Body:getLinearVelocityFromWorldPoint;

This commit is contained in:
bjorn 2017-05-15 23:27:33 -06:00
parent b31970d85d
commit 35bab33e54
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_lovrBodyGetLinearVelocityFromLocalPoint(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 vx, vy, vz;
lovrBodyGetLinearVelocityFromLocalPoint(body, x, y, z, &vx, &vy, &vz);
lua_pushnumber(L, vx);
lua_pushnumber(L, vy);
lua_pushnumber(L, vz);
return 3;
}
int l_lovrBodyGetLinearVelocityFromWorldPoint(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 vx, vy, vz;
lovrBodyGetLinearVelocityFromWorldPoint(body, x, y, z, &vx, &vy, &vz);
lua_pushnumber(L, vx);
lua_pushnumber(L, vy);
lua_pushnumber(L, vz);
return 3;
}
const luaL_Reg lovrBody[] = {
{ "getPosition", l_lovrBodyGetPosition },
{ "setPosition", l_lovrBodySetPosition },
@ -198,5 +224,7 @@ const luaL_Reg lovrBody[] = {
{ "setKinematic", l_lovrBodySetKinematic },
{ "getLocalPoint", l_lovrBodyGetLocalPoint },
{ "getWorldPoint", l_lovrBodyGetWorldPoint },
{ "getLinearVelocityFromLocalPoint", l_lovrBodyGetLinearVelocityFromLocalPoint },
{ "getLinearVelocityFromWorldPoint", l_lovrBodyGetLinearVelocityFromWorldPoint },
{ NULL, NULL }
};

View File

@ -200,3 +200,19 @@ void lovrBodyGetWorldPoint(Body* body, float x, float y, float z, float* wx, flo
*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);
*vx = velocity[0];
*vy = velocity[1];
*vz = velocity[2];
}
void lovrBodyGetLinearVelocityFromWorldPoint(Body* body, float wx, float wy, float wz, float* vx, float* vy, float* vz) {
dReal velocity[3];
dBodyGetPointVel(body->id, wx, wy, wz, velocity);
*vx = velocity[0];
*vy = velocity[1];
*vz = velocity[2];
}

View File

@ -48,3 +48,5 @@ 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 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);