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);
}
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) {
headset->interface->renderTo(headset, callback, userdata);
}

View File

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

View File

@ -42,6 +42,7 @@ static HeadsetInterface interface = {
.getController = viveGetController,
.isControllerPresent = viveIsControllerPresent,
.getControllerPosition = viveGetControllerPosition,
.getControllerOrientation = viveGetControllerOrientation,
.renderTo = viveRenderTo
};
@ -264,6 +265,19 @@ void viveGetControllerPosition(void* headset, Controller* controller, float* x,
*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) {
Headset* this = headset;
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);
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);
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[] = {
{ "isPresent", l_lovrControllerIsPresent },
{ "getPosition", l_lovrControllerGetPosition },
{ "getOrientation", l_lovrControllerGetOrientation },
{ NULL, NULL }
};
@ -36,3 +37,14 @@ int l_lovrControllerGetPosition(lua_State* L) {
lua_pushnumber(L, z);
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[];
int l_lovrControllerIsPresent(lua_State* L);
int l_lovrControllerGetPosition(lua_State* L);
int l_lovrControllerGetOrientation(lua_State* L);