diff --git a/src/api/types/collider.c b/src/api/types/collider.c index c82b2327..f7d2dd87 100644 --- a/src/api/types/collider.c +++ b/src/api/types/collider.c @@ -296,6 +296,16 @@ int l_lovrColliderApplyTorque(lua_State* L) { return 0; } +int l_lovrColliderGetLocalCenter(lua_State* L) { + Collider* collider = luax_checktype(L, 1, Collider); + float x, y, z; + lovrColliderGetLocalCenter(collider, &x, &y, &z); + lua_pushnumber(L, x); + lua_pushnumber(L, y); + lua_pushnumber(L, z); + return 3; +} + int l_lovrColliderGetLocalPoint(lua_State* L) { Collider* collider = luax_checktype(L, 1, Collider); float wx = luaL_checknumber(L, 2); @@ -406,6 +416,7 @@ const luaL_Reg lovrCollider[] = { { "setAngularDamping", l_lovrColliderSetAngularDamping }, { "applyForce", l_lovrColliderApplyForce }, { "applyTorque", l_lovrColliderApplyForce }, + { "getLocalCenter", l_lovrColliderGetLocalCenter }, { "getLocalPoint", l_lovrColliderGetLocalPoint }, { "getWorldPoint", l_lovrColliderGetWorldPoint }, { "getLocalVector", l_lovrColliderGetLocalVector }, diff --git a/src/physics/physics.c b/src/physics/physics.c index ab34819d..737a429d 100644 --- a/src/physics/physics.c +++ b/src/physics/physics.c @@ -347,6 +347,14 @@ void lovrColliderApplyTorque(Collider* collider, float x, float y, float z) { dBodyAddTorque(collider->body, x, y, z); } +void lovrColliderGetLocalCenter(Collider* collider, float* x, float* y, float* z) { + dMass m; + dBodyGetMass(collider->body, &m); + *x = m.c[0]; + *y = m.c[1]; + *z = m.c[2]; +} + void lovrColliderGetLocalPoint(Collider* collider, float wx, float wy, float wz, float* x, float* y, float* z) { dReal local[3]; dBodyGetPosRelPoint(collider->body, wx, wy, wz, local); diff --git a/src/physics/physics.h b/src/physics/physics.h index af287390..b12138b8 100644 --- a/src/physics/physics.h +++ b/src/physics/physics.h @@ -96,6 +96,7 @@ void lovrColliderSetAngularDamping(Collider* collider, float damping, float thre void lovrColliderApplyForce(Collider* collider, float x, float y, float z); void lovrColliderApplyForceAtPosition(Collider* collider, float x, float y, float z, float cx, float cy, float cz); void lovrColliderApplyTorque(Collider* collider, float x, float y, float z); +void lovrColliderGetLocalCenter(Collider* collider, float* x, float* y, float* z); void lovrColliderGetLocalPoint(Collider* collider, float wx, float wy, float wz, float* x, float* y, float* z); void lovrColliderGetWorldPoint(Collider* collider, float x, float y, float z, float* wx, float* wy, float* wz); void lovrColliderGetLocalVector(Collider* collider, float wx, float wy, float wz, float* x, float* y, float* z);