From eca490adfdaa6fe08af165b55520913eabb42d67 Mon Sep 17 00:00:00 2001 From: bjorn Date: Mon, 15 May 2017 23:10:17 -0600 Subject: [PATCH] Body:getPosition; Body:setPosition; --- src/api/types/body.c | 21 +++++++++++++++++++++ src/physics/physics.c | 11 +++++++++++ src/physics/physics.h | 2 ++ 3 files changed, 34 insertions(+) diff --git a/src/api/types/body.c b/src/api/types/body.c index 1ef18728..926a1435 100644 --- a/src/api/types/body.c +++ b/src/api/types/body.c @@ -1,6 +1,27 @@ #include "api/lovr.h" #include "physics/physics.h" +int l_lovrBodyGetPosition(lua_State* L) { + Body* body = luax_checktype(L, 1, Body); + float x, y, z; + lovrBodyGetPosition(body, &x, &y, &z); + lua_pushnumber(L, x); + lua_pushnumber(L, y); + lua_pushnumber(L, z); + return 3; +} + +int l_lovrBodySetPosition(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); + lovrBodySetPosition(body, x, y, z); + return 0; +} + const luaL_Reg lovrBody[] = { + { "getPosition", l_lovrBodyGetPosition }, + { "setPosition", l_lovrBodySetPosition }, { NULL, NULL } }; diff --git a/src/physics/physics.c b/src/physics/physics.c index 7daa4774..7890601a 100644 --- a/src/physics/physics.c +++ b/src/physics/physics.c @@ -93,3 +93,14 @@ void lovrBodyDestroy(const Ref* ref) { dBodyDestroy(body->id); free(body); } + +void lovrBodyGetPosition(Body* body, float* x, float* y, float* z) { + const dReal* position = dBodyGetPosition(body->id); + *x = position[0]; + *y = position[1]; + *z = position[2]; +} + +void lovrBodySetPosition(Body* body, float x, float y, float z) { + dBodySetPosition(body->id, x, y, z); +} diff --git a/src/physics/physics.h b/src/physics/physics.h index d8a523ad..76f7743a 100644 --- a/src/physics/physics.h +++ b/src/physics/physics.h @@ -29,3 +29,5 @@ void lovrWorldUpdate(World* world, float dt); Body* lovrBodyCreate(); void lovrBodyDestroy(const Ref* ref); +void lovrBodyGetPosition(Body* body, float* x, float* y, float* z); +void lovrBodySetPosition(Body* body, float x, float y, float z);