WebVR Controllers;

This commit is contained in:
bjorn 2017-04-22 18:20:12 -07:00
parent c9be126b6b
commit c1afd6ca33
4 changed files with 28 additions and 9 deletions

View File

@ -48,7 +48,8 @@ int l_lovrControllerIsDown(lua_State* L) {
int l_lovrControllerVibrate(lua_State* L) {
Controller* controller = luax_checktype(L, 1, Controller);
float duration = luaL_optnumber(L, 2, .5);
lovrHeadsetControllerVibrate(controller, duration);
float power = luaL_optnumber(L, 3, 1);
lovrHeadsetControllerVibrate(controller, duration, power);
return 0;
}

View File

@ -57,7 +57,7 @@ void lovrHeadsetControllerGetPosition(Controller* controller, float* x, float* y
void lovrHeadsetControllerGetOrientation(Controller* controller, float* angle, float* x, float* y, float* z);
float lovrHeadsetControllerGetAxis(Controller* controller, ControllerAxis axis);
int lovrHeadsetControllerIsDown(Controller* controller, ControllerButton button);
void lovrHeadsetControllerVibrate(Controller* controller, float duration);
void lovrHeadsetControllerVibrate(Controller* controller, float duration, float power);
ModelData* lovrHeadsetControllerNewModelData(Controller* controller);
TextureData* lovrHeadsetControllerNewTextureData(Controller* controller);
void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata);

View File

@ -490,7 +490,7 @@ int lovrHeadsetControllerIsDown(Controller* controller, ControllerButton button)
return 0;
}
void lovrHeadsetControllerVibrate(Controller* controller, float duration) {
void lovrHeadsetControllerVibrate(Controller* controller, float duration, float power) {
if (!state.isInitialized || !controller || duration <= 0) return;
uint32_t axis = 0;

View File

@ -170,12 +170,14 @@ vec_controller_t* lovrHeadsetGetControllers() {
int controllerCount = emscripten_vr_get_controller_count();
while (state.controllers.length > controllerCount) {
lovrRelease(&state.controllers.data[i]->ref);
Controller* controller = vec_last(&state.controllers);
lovrRelease(&controller->ref);
vec_pop(&state.controllers);
}
while (state.controllers.length < controllerCount) {
Controller* controller = lovrAlloc(sizeof(Controller), lovrControllerDestroy);
controller->id = state.controllers.length;
vec_push(&state.controllers, controller);
}
@ -183,7 +185,7 @@ vec_controller_t* lovrHeadsetGetControllers() {
}
int lovrHeadsetControllerIsPresent(Controller* controller) {
return 0;
return emscripten_vr_controller_is_present(controller->id);
}
void lovrHeadsetControllerGetPosition(Controller* controller, float* x, float* y, float* z) {
@ -205,15 +207,31 @@ void lovrHeadsetControllerGetOrientation(Controller* controller, float* angle, f
}
float lovrHeadsetControllerGetAxis(Controller* controller, ControllerAxis axis) {
return 0;
switch (axis) {
case CONTROLLER_AXIS_TRIGGER: return emscripten_vr_controller_get_axis(controller->id, -1);
case CONTROLLER_AXIS_TOUCHPAD_X: return emscripten_vr_controller_get_axis(controller->id, 0);
case CONTROLLER_AXIS_TOUCHPAD_Y: return emscripten_vr_controller_get_axis(controller->id, 1);
default: return 0;
}
}
int lovrHeadsetControllerIsDown(Controller* controller, ControllerButton button) {
return 0;
switch (button) {
case CONTROLLER_BUTTON_TOUCHPAD:
return emscripten_vr_controller_is_down(controller->id, 0);
case CONTROLLER_BUTTON_GRIP:
return emscripten_vr_controller_is_down(controller->id, 2);
case CONTROLLER_BUTTON_MENU:
return emscripten_vr_controller_is_down(controller->id, 3);
default: return 0;
}
}
void lovrHeadsetControllerVibrate(Controller* controller, float duration) {
//
void lovrHeadsetControllerVibrate(Controller* controller, float duration, float power) {
emscripten_vr_controller_vibrate(controller->id, duration * 1000, power);
}
ModelData* lovrHeadsetControllerNewModelData(Controller* controller) {