From 44be3608a7572f2eef7a2d9555defeb15c1bc8f7 Mon Sep 17 00:00:00 2001 From: bjorn Date: Fri, 12 Apr 2019 15:08:45 -0700 Subject: [PATCH] lovr.headset.getDirection; Controller:getDirection; --- src/api/headset.c | 14 ++++++++++++++ src/api/types/controller.c | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/api/headset.c b/src/api/headset.c index c9547ac8..d52aa9dc 100644 --- a/src/api/headset.c +++ b/src/api/headset.c @@ -228,6 +228,19 @@ static int l_lovrHeadsetGetOrientation(lua_State* L) { return 4; } +static int l_lovrHeadsetGetDirection(lua_State* L) { + float x, y, z, angle, ax, ay, az; + lovrHeadsetDriver->getPose(&x, &y, &z, &angle, &ax, &ay, &az); + float q[4]; + quat_fromAngleAxis(q, angle, ax, ay, az); + float v[3] = { 0.f, 0.f, -1.f }; + quat_rotate(q, v); + lua_pushnumber(L, v[0]); + lua_pushnumber(L, v[1]); + lua_pushnumber(L, v[2]); + return 3; +} + static int l_lovrHeadsetGetVelocity(lua_State* L) { float velocity[3]; lovrHeadsetDriver->getVelocity(&velocity[0], &velocity[1], &velocity[2]); @@ -318,6 +331,7 @@ static const luaL_Reg lovrHeadset[] = { { "getPose", l_lovrHeadsetGetPose }, { "getPosition", l_lovrHeadsetGetPosition }, { "getOrientation", l_lovrHeadsetGetOrientation }, + { "getDirection", l_lovrHeadsetGetDirection }, { "getVelocity", l_lovrHeadsetGetVelocity }, { "getAngularVelocity", l_lovrHeadsetGetAngularVelocity }, { "getControllers", l_lovrHeadsetGetControllers }, diff --git a/src/api/types/controller.c b/src/api/types/controller.c index b955706b..792c1273 100644 --- a/src/api/types/controller.c +++ b/src/api/types/controller.c @@ -52,6 +52,20 @@ static int l_lovrControllerGetOrientation(lua_State* L) { return 4; } +static int l_lovrControllerGetDirection(lua_State* L) { + Controller* controller = luax_checktype(L, 1, Controller); + float x, y, z, angle, ax, ay, az; + lovrHeadsetDriver->controllerGetPose(controller, &x, &y, &z, &angle, &ax, &ay, &az); + float q[4]; + quat_fromAngleAxis(q, angle, ax, ay, az); + float v[3] = { 0.f, 0.f, -1.f }; + quat_rotate(q, v); + lua_pushnumber(L, v[0]); + lua_pushnumber(L, v[1]); + lua_pushnumber(L, v[2]); + return 3; +} + static int l_lovrControllerGetVelocity(lua_State* L) { Controller* controller = luax_checktype(L, 1, Controller); float velocity[3]; @@ -121,6 +135,7 @@ const luaL_Reg lovrController[] = { { "getPose", l_lovrControllerGetPose }, { "getPosition", l_lovrControllerGetPosition }, { "getOrientation", l_lovrControllerGetOrientation }, + { "getDirection", l_lovrControllerGetDirection }, { "getVelocity", l_lovrControllerGetVelocity }, { "getAngularVelocity", l_lovrControllerGetAngularVelocity }, { "getAxis", l_lovrControllerGetAxis },