mirror of
https://github.com/bjornbytes/lovr.git
synced 2024-07-02 20:43:35 +00:00
Controller:getOrientation;
This commit is contained in:
parent
a940a473bb
commit
2391185931
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue