From f58e58d172cb8aba4f6543dabe471b94d8931c90 Mon Sep 17 00:00:00 2001 From: bjorn Date: Sun, 26 Feb 2017 16:54:55 -0800 Subject: [PATCH] Improve headset safety; --- src/headset/vive.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/headset/vive.c b/src/headset/vive.c index 2c15f589..3b18c6ab 100644 --- a/src/headset/vive.c +++ b/src/headset/vive.c @@ -393,6 +393,8 @@ void lovrHeadsetControllerGetOrientation(Controller* controller, float* angle, f } float lovrHeadsetControllerGetAxis(Controller* controller, ControllerAxis axis) { + if (!state.isInitialized || !controller) return 0.f; + VRControllerState_t input; state.system->GetControllerState(controller->id, &input, sizeof(input)); @@ -414,6 +416,8 @@ float lovrHeadsetControllerGetAxis(Controller* controller, ControllerAxis axis) } int lovrHeadsetControllerIsDown(Controller* controller, ControllerButton button) { + if (!state.isInitialized || !controller) return 0; + VRControllerState_t input; state.system->GetControllerState(controller->id, &input, sizeof(input)); @@ -438,9 +442,7 @@ int lovrHeadsetControllerIsDown(Controller* controller, ControllerButton button) } void lovrHeadsetControllerVibrate(Controller* controller, float duration) { - if (duration <= 0) { - return; - } + if (!state.isInitialized || !controller || duration <= 0) return; uint32_t axis = 0; unsigned short uSeconds = (unsigned short) (duration * 1e6); @@ -448,6 +450,8 @@ void lovrHeadsetControllerVibrate(Controller* controller, float duration) { } ModelData* lovrHeadsetControllerNewModelData(Controller* controller) { + if (!state.isInitialized || !controller) return NULL; + int id = controller->id; // Return the model if it's already loaded @@ -541,6 +545,8 @@ ModelData* lovrHeadsetControllerNewModelData(Controller* controller) { } TextureData* lovrHeadsetControllerNewTextureData(Controller* controller) { + if (!state.isInitialized || !controller) return NULL; + int id = controller->id; // Textures are loaded alongside models to simplify the implementation. @@ -552,6 +558,8 @@ TextureData* lovrHeadsetControllerNewTextureData(Controller* controller) { } void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata) { + if (!state.isInitialized) return; + float head[16], transform[16], projection[16]; float (*matrix)[4];