1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-02 20:43:35 +00:00

Controller:getOrientation;

This commit is contained in:
bjorn 2016-10-03 11:16:48 -07:00
parent a940a473bb
commit 2391185931
6 changed files with 34 additions and 0 deletions

View file

@ -63,6 +63,10 @@ void lovrHeadsetGetControllerPosition(Controller* controller, float* x, float* y
headset->interface->getControllerPosition(headset, controller, x, y, z); headset->interface->getControllerPosition(headset, controller, x, y, z);
} }
void lovrHeadsetGetControllerOrientation(Controller* controller, float* w, float* x, float* y, float* z) {
headset->interface->getControllerOrientation(headset, controller, w, x, y, z);
}
void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata) { void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata) {
headset->interface->renderTo(headset, callback, userdata); headset->interface->renderTo(headset, callback, userdata);
} }

View file

@ -26,6 +26,7 @@ typedef struct {
Controller* (*getController)(void* headset, ControllerHand hand); Controller* (*getController)(void* headset, ControllerHand hand);
char (*isControllerPresent)(void* headset, Controller* controller); char (*isControllerPresent)(void* headset, Controller* controller);
void (*getControllerPosition)(void* headset, Controller* controller, float* x, float* y, float* z); 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);
void (*renderTo)(void* headset, headsetRenderCallback callback, void* userdata); void (*renderTo)(void* headset, headsetRenderCallback callback, void* userdata);
} HeadsetInterface; } HeadsetInterface;
@ -50,4 +51,5 @@ void lovrHeadsetGetAngularVelocity(float* x, float* y, float* z);
Controller* lovrHeadsetGetController(ControllerHand hand); Controller* lovrHeadsetGetController(ControllerHand hand);
char lovrHeadsetIsControllerPresent(Controller* controller); char lovrHeadsetIsControllerPresent(Controller* controller);
void lovrHeadsetGetControllerPosition(Controller* controller, float* x, float* y, float* z); void lovrHeadsetGetControllerPosition(Controller* controller, float* x, float* y, float* z);
void lovrHeadsetGetControllerOrientation(Controller* controller, float* w, float* x, float* y, float* z);
void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata); void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata);

View file

@ -42,6 +42,7 @@ static HeadsetInterface interface = {
.getController = viveGetController, .getController = viveGetController,
.isControllerPresent = viveIsControllerPresent, .isControllerPresent = viveIsControllerPresent,
.getControllerPosition = viveGetControllerPosition, .getControllerPosition = viveGetControllerPosition,
.getControllerOrientation = viveGetControllerOrientation,
.renderTo = viveRenderTo .renderTo = viveRenderTo
}; };
@ -264,6 +265,19 @@ void viveGetControllerPosition(void* headset, Controller* controller, float* x,
*z = pose.mDeviceToAbsoluteTracking.m[2][3]; *z = pose.mDeviceToAbsoluteTracking.m[2][3];
} }
void viveGetControllerOrientation(void* headset, Controller* controller, float* w, float* x, float* y, float* z) {
Headset* this = headset;
ViveState* state = this->state;
TrackedDevicePose_t pose = viveGetPose(state, state->controllerIndex[controller->hand]);
if (!pose.bPoseIsValid || !pose.bDeviceIsConnected) {
*w = *x = *y = *z = 0.f;
return;
}
*w = *x = *y = *z = 0.f; // TODO
}
void viveRenderTo(void* headset, headsetRenderCallback callback, void* userdata) { void viveRenderTo(void* headset, headsetRenderCallback callback, void* userdata) {
Headset* this = headset; Headset* this = headset;
ViveState* state = this->state; ViveState* state = this->state;

View file

@ -17,4 +17,5 @@ void viveGetAngularVelocity(void* headset, float* x, float* y, float* z);
Controller* viveGetController(void* headset, ControllerHand hand); Controller* viveGetController(void* headset, ControllerHand hand);
char viveIsControllerPresent(void* headset, Controller* controller); char viveIsControllerPresent(void* headset, Controller* controller);
void viveGetControllerPosition(void* headset, Controller* controller, float* x, float* y, float* z); 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);
void viveRenderTo(void* headset, headsetRenderCallback callback, void* userdata); void viveRenderTo(void* headset, headsetRenderCallback callback, void* userdata);

View file

@ -18,6 +18,7 @@ Controller* luax_checkcontroller(lua_State* L, int index) {
const luaL_Reg lovrController[] = { const luaL_Reg lovrController[] = {
{ "isPresent", l_lovrControllerIsPresent }, { "isPresent", l_lovrControllerIsPresent },
{ "getPosition", l_lovrControllerGetPosition }, { "getPosition", l_lovrControllerGetPosition },
{ "getOrientation", l_lovrControllerGetOrientation },
{ NULL, NULL } { NULL, NULL }
}; };
@ -36,3 +37,14 @@ int l_lovrControllerGetPosition(lua_State* L) {
lua_pushnumber(L, z); lua_pushnumber(L, z);
return 3; return 3;
} }
int l_lovrControllerGetOrientation(lua_State* L) {
Controller* controller = luax_checkcontroller(L, 1);
float w, x, y, z;
lovrHeadsetGetControllerOrientation(controller, &w, &x, &y, &z);
lua_pushnumber(L, w);
lua_pushnumber(L, x);
lua_pushnumber(L, y);
lua_pushnumber(L, z);
return 4;
}

View file

@ -11,3 +11,4 @@ extern const luaL_Reg lovrController[];
extern const luaL_Reg lovrController[]; extern const luaL_Reg lovrController[];
int l_lovrControllerIsPresent(lua_State* L); int l_lovrControllerIsPresent(lua_State* L);
int l_lovrControllerGetPosition(lua_State* L); int l_lovrControllerGetPosition(lua_State* L);
int l_lovrControllerGetOrientation(lua_State* L);