mirror of https://github.com/bjornbytes/lovr.git
WebVR Controllers;
This commit is contained in:
parent
c9be126b6b
commit
c1afd6ca33
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue