From b840fb0a44f53ad6014e4e8e43fdd2681a16cd77 Mon Sep 17 00:00:00 2001 From: bjorn Date: Mon, 15 May 2017 23:05:48 -0600 Subject: [PATCH] World:getLinearDamping; World:setLinearDamping; --- src/api/types/world.c | 19 +++++++++++++++++++ src/physics/physics.c | 10 ++++++++++ src/physics/physics.h | 2 ++ 3 files changed, 31 insertions(+) diff --git a/src/api/types/world.c b/src/api/types/world.c index 1444f87f..42b9d508 100644 --- a/src/api/types/world.c +++ b/src/api/types/world.c @@ -20,6 +20,23 @@ int l_lovrWorldSetGravity(lua_State* L) { return 0; } +int l_lovrWorldGetLinearDamping(lua_State* L) { + World* world = luax_checktype(L, 1, World); + float damping, threshold; + lovrWorldGetLinearDamping(world, &damping, &threshold); + lua_pushnumber(L, damping); + lua_pushnumber(L, threshold); + return 2; +} + +int l_lovrWorldSetLinearDamping(lua_State* L) { + World* world = luax_checktype(L, 1, World); + float damping = luaL_checknumber(L, 2); + float threshold = luaL_optnumber(L, 3, .01); + lovrWorldSetLinearDamping(world, damping, threshold); + return 0; +} + int l_lovrWorldUpdate(lua_State* L) { World* world = luax_checktype(L, 1, World); float dt = luaL_checknumber(L, 2); @@ -30,6 +47,8 @@ int l_lovrWorldUpdate(lua_State* L) { const luaL_Reg lovrWorld[] = { { "getGravity", l_lovrWorldGetGravity }, { "setGravity", l_lovrWorldSetGravity }, + { "getLinearDamping", l_lovrWorldGetLinearDamping }, + { "setLinearDamping", l_lovrWorldSetLinearDamping }, { "update", l_lovrWorldUpdate }, { NULL, NULL } }; diff --git a/src/physics/physics.c b/src/physics/physics.c index ef7ef8d3..d261da20 100644 --- a/src/physics/physics.c +++ b/src/physics/physics.c @@ -42,6 +42,16 @@ void lovrWorldSetGravity(World* world, float x, float y, float z) { dWorldSetGravity(world->id, x, y, z); } +void lovrWorldGetLinearDamping(World* world, float* damping, float* threshold) { + *damping = dWorldGetLinearDamping(world->id); + *threshold = dWorldGetLinearDampingThreshold(world->id); +} + +void lovrWorldSetLinearDamping(World* world, float damping, float threshold) { + dWorldSetLinearDamping(world->id, damping); + dWorldSetLinearDampingThreshold(world->id, threshold); +} + void lovrWorldUpdate(World* world, float dt) { dWorldQuickStep(world->id, dt); } diff --git a/src/physics/physics.h b/src/physics/physics.h index a3417caa..b8800cb0 100644 --- a/src/physics/physics.h +++ b/src/physics/physics.h @@ -13,4 +13,6 @@ World* lovrWorldCreate(); void lovrWorldDestroy(const Ref* ref); void lovrWorldGetGravity(World* world, float* x, float* y, float* z); void lovrWorldSetGravity(World* world, float x, float y, float z); +void lovrWorldGetLinearDamping(World* world, float* damping, float* threshold); +void lovrWorldSetLinearDamping(World* world, float damping, float threshold); void lovrWorldUpdate(World* world, float dt);