From 40f7260dd3a18ed93368a88fe60735902888e0b1 Mon Sep 17 00:00:00 2001 From: bjorn Date: Sat, 12 Nov 2016 03:44:33 -0800 Subject: [PATCH] Start controller input; --- src/headset/headset.c | 4 ++++ src/headset/headset.h | 2 ++ src/headset/vive.c | 18 ++++++++++++++++++ src/headset/vive.h | 1 + src/lovr/types/controller.c | 7 +++++++ src/lovr/types/controller.h | 1 + 6 files changed, 33 insertions(+) diff --git a/src/headset/headset.c b/src/headset/headset.c index b53452dd..7e33e216 100644 --- a/src/headset/headset.c +++ b/src/headset/headset.c @@ -75,6 +75,10 @@ void lovrHeadsetGetControllerOrientation(Controller* controller, float* w, float headset->interface->getControllerOrientation(headset, controller, w, x, y, z); } +float lovrHeadsetGetControllerAxis(Controller* controller) { + return headset->interface->getControllerAxis(headset, controller); +} + ControllerHand lovrHeadsetGetControllerHand(Controller* controller) { return headset->interface->getControllerHand(headset, controller); } diff --git a/src/headset/headset.h b/src/headset/headset.h index 48ac281b..57385521 100644 --- a/src/headset/headset.h +++ b/src/headset/headset.h @@ -28,6 +28,7 @@ typedef struct { char (*isControllerPresent)(void* headset, Controller* controller); void (*getControllerPosition)(void* headset, Controller* controller, float* x, float* y, float* z); void (*getControllerOrientation)(void* headset, Controller* controller, float* w, float* x, float* y, float* z); + float (*getControllerAxis)(void* headset, Controller* controller); ControllerHand (*getControllerHand)(void* headset, Controller* controller); void (*renderTo)(void* headset, headsetRenderCallback callback, void* userdata); } HeadsetInterface; @@ -55,5 +56,6 @@ Controller* lovrHeadsetGetController(ControllerHand hand); char lovrHeadsetIsControllerPresent(Controller* controller); void lovrHeadsetGetControllerPosition(Controller* controller, float* x, float* y, float* z); void lovrHeadsetGetControllerOrientation(Controller* controller, float* w, float* x, float* y, float* z); +float lovrHeadsetGetControllerAxis(Controller* controller); ControllerHand lovrHeadsetGetControllerHand(Controller* controller); void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata); diff --git a/src/headset/vive.c b/src/headset/vive.c index b323ee6e..cef35145 100644 --- a/src/headset/vive.c +++ b/src/headset/vive.c @@ -7,6 +7,7 @@ #include #include "../util.h" #include "../graphics/graphics.h" +#include typedef struct { struct VR_IVRSystem_FnTable* vrSystem; @@ -48,6 +49,7 @@ static HeadsetInterface interface = { .isControllerPresent = viveIsControllerPresent, .getControllerPosition = viveGetControllerPosition, .getControllerOrientation = viveGetControllerOrientation, + .getControllerAxis = viveGetControllerAxis, .getControllerHand = viveGetControllerHand, .renderTo = viveRenderTo }; @@ -307,6 +309,22 @@ void viveGetControllerOrientation(void* headset, Controller* controller, float* mat4_getRotation(mat4_fromMat44(matrix, pose.mDeviceToAbsoluteTracking.m), w, x, y, z); } +float viveGetControllerAxis(void* headset, Controller* controller) { + Headset* this = headset; + ViveState* state = this->state; + VRControllerState_t input; + + struct VREvent_t event; + while (state->vrSystem->PollNextEvent(&event, sizeof(event))) { + printf("%d\n", event.eventType); + } + + int i = state->vrSystem->GetTrackedDeviceIndexForControllerRole(ETrackedControllerRole_TrackedControllerRole_RightHand); + printf("%d %d\n", i, state->controllerIndex[controller->hand]); + state->vrSystem->GetControllerState(i, &input); + return input.rAxis[1].x; +} + ControllerHand viveGetControllerHand(void* headset, Controller* controller) { return controller->hand; } diff --git a/src/headset/vive.h b/src/headset/vive.h index 2f0f7146..07d596b3 100644 --- a/src/headset/vive.h +++ b/src/headset/vive.h @@ -18,5 +18,6 @@ Controller* viveGetController(void* headset, ControllerHand hand); char viveIsControllerPresent(void* headset, Controller* controller); void viveGetControllerPosition(void* headset, Controller* controller, float* x, float* y, float* z); void viveGetControllerOrientation(void* headset, Controller* controller, float* w, float* x, float* y, float* z); +float viveGetControllerAxis(void* headset, Controller* controller); ControllerHand viveGetControllerHand(void* headset, Controller* controller); void viveRenderTo(void* headset, headsetRenderCallback callback, void* userdata); diff --git a/src/lovr/types/controller.c b/src/lovr/types/controller.c index ef367e49..0a5eda6c 100644 --- a/src/lovr/types/controller.c +++ b/src/lovr/types/controller.c @@ -22,6 +22,7 @@ const luaL_Reg lovrController[] = { { "isPresent", l_lovrControllerIsPresent }, { "getPosition", l_lovrControllerGetPosition }, { "getOrientation", l_lovrControllerGetOrientation }, + { "getAxis", l_lovrControllerGetAxis }, { "getHand", l_lovrControllerGetHand }, { NULL, NULL } }; @@ -53,6 +54,12 @@ int l_lovrControllerGetOrientation(lua_State* L) { return 4; } +int l_lovrControllerGetAxis(lua_State* L) { + Controller* controller = luax_checkcontroller(L, 1); + lua_pushnumber(L, lovrHeadsetGetControllerAxis(controller)); + return 1; +} + int l_lovrControllerGetHand(lua_State* L) { Controller* controller = luax_checkcontroller(L, 1); lua_pushstring(L, map_int_find(&ControllerHands, lovrHeadsetGetControllerHand(controller))); diff --git a/src/lovr/types/controller.h b/src/lovr/types/controller.h index 940af86f..b0db3475 100644 --- a/src/lovr/types/controller.h +++ b/src/lovr/types/controller.h @@ -12,4 +12,5 @@ extern const luaL_Reg lovrController[]; int l_lovrControllerIsPresent(lua_State* L); int l_lovrControllerGetPosition(lua_State* L); int l_lovrControllerGetOrientation(lua_State* L); +int l_lovrControllerGetAxis(lua_State* L); int l_lovrControllerGetHand(lua_State* L);