Collider:getWorldCenter; Jolt center of mass;

This commit is contained in:
bjorn 2024-04-22 09:58:06 -07:00
parent e4895a7f1e
commit eaf6805fc6
4 changed files with 25 additions and 2 deletions

View File

@ -439,6 +439,16 @@ static int l_lovrColliderGetLocalCenter(lua_State* L) {
return 3;
}
static int l_lovrColliderGetWorldCenter(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider);
float center[3];
lovrColliderGetWorldCenter(collider, center);
lua_pushnumber(L, center[0]);
lua_pushnumber(L, center[1]);
lua_pushnumber(L, center[2]);
return 3;
}
static int l_lovrColliderGetLocalPoint(lua_State* L) {
Collider* collider = luax_checktype(L, 1, Collider);
float world[3], local[3];
@ -635,6 +645,7 @@ const luaL_Reg lovrCollider[] = {
{ "applyLinearImpulse", l_lovrColliderApplyLinearImpulse },
{ "applyAngularImpulse", l_lovrColliderApplyAngularImpulse },
{ "getLocalCenter", l_lovrColliderGetLocalCenter },
{ "getWorldCenter", l_lovrColliderGetWorldCenter },
{ "getLocalPoint", l_lovrColliderGetLocalPoint },
{ "getWorldPoint", l_lovrColliderGetWorldPoint },
{ "getLocalVector", l_lovrColliderGetLocalVector },

View File

@ -132,6 +132,7 @@ void lovrColliderApplyLinearImpulse(Collider* collider, float impulse[3]);
void lovrColliderApplyLinearImpulseAtPosition(Collider* collider, float impulse[3], float position[3]);
void lovrColliderApplyAngularImpulse(Collider* collider, float impulse[3]);
void lovrColliderGetLocalCenter(Collider* collider, float center[3]);
void lovrColliderGetWorldCenter(Collider* collider, float center[3]);
void lovrColliderGetLocalPoint(Collider* collider, float world[3], float local[3]);
void lovrColliderGetWorldPoint(Collider* collider, float local[3], float world[3]);
void lovrColliderGetLocalVector(Collider* collider, float world[3], float local[3]);

View File

@ -711,8 +711,15 @@ void lovrColliderApplyAngularImpulse(Collider* collider, float impulse[3]) {
}
void lovrColliderGetLocalCenter(Collider* collider, float center[3]) {
// todo: applicable for CompoundShape and OffsetCenterOfMassShape
vec3_set(center, 0.f, 0.f, 0.f);
JPH_Vec3 v;
JPH_Shape_GetCenterOfMass(JPH_BodyInterface_GetShape(collider->world->bodies, collider->id), &v);
vec3_fromJolt(center, &v);
}
void lovrColliderGetWorldCenter(Collider* collider, float center[3]) {
JPH_RVec3 v;
JPH_Body_GetCenterOfMassPosition(collider->body, &v);
vec3_fromJolt(center, &v);
}
void lovrColliderGetLocalPoint(Collider* collider, float world[3], float local[3]) {

View File

@ -762,6 +762,10 @@ void lovrColliderGetLocalCenter(Collider* collider, float center[3]) {
vec3_set(center, m.c[0], m.c[1], m.c[2]);
}
void lovrColliderGetWorldCenter(Collider* collider, float center[3]) {
//
}
void lovrColliderGetLocalPoint(Collider* collider, float world[3], float local[3]) {
dReal point[4];
dBodyGetPosRelPoint(collider->body, world[0], world[1], world[2], point);