2 #include "openvrcontroller.h"
3 #include "openvrcontroller_private.h"
4 #include "openvrsystem.h"
11 OpenVRController::OpenVRController(OpenVRSystem &s):
16 name = "OpenVR Controller";
18 system.add_controller(*this);
21 OpenVRController::~OpenVRController()
23 system.remove_controller(*this);
26 string OpenVRController::get_button_name(unsigned btn) const
30 case vr::k_EButton_System: return "System";
31 case vr::k_EButton_ApplicationMenu: return "Menu";
32 case vr::k_EButton_Grip: return "Grip";
33 case vr::k_EButton_Axis0: return "Trackpad";
34 case vr::k_EButton_Axis1: return "Trigger";
37 const char *n = vr::VRSystem()->GetButtonIdNameFromEnum(static_cast<vr::EVRButtonId>(btn));
41 return MotionController::get_button_name(btn);
44 string OpenVRController::get_axis_name(unsigned axis) const
48 case 0: return "Trackpad X";
49 case 1: return "Trackpad Y";
50 case 2: return "Trigger";
53 return MotionController::get_axis_name(axis);
56 void OpenVRController::event(const Event &ev)
60 case vr::VREvent_TrackedDeviceActivated:
61 index = ev.trackedDeviceIndex;
62 signal_tracking_state_changed.emit(true);
64 case vr::VREvent_TrackedDeviceDeactivated:
66 signal_tracking_state_changed.emit(false);
68 case vr::VREvent_ButtonPress:
69 set_button_state(ev.data.controller.button, true, true);
71 case vr::VREvent_ButtonUnpress:
72 set_button_state(ev.data.controller.button, false, true);
77 void OpenVRController::update()
82 update_from_matrix(system.get_tracking_matrix(index));
85 void OpenVRController::update_input_state()
90 vr::VRControllerState_t state;
91 vr::VRSystem()->GetControllerState(index, &state);
92 if(state.unPacketNum!=last_packet_number)
94 for(unsigned i=0; i<5; ++i)
96 set_axis_value(i*2, state.rAxis[i].x, true);
97 set_axis_value(i*2+1, state.rAxis[i].y, true);
100 last_packet_number = state.unPacketNum;
104 const GL::Object *OpenVRController::get_object() const
107 unsigned len = vr::VRSystem()->GetStringTrackedDeviceProperty(index, vr::Prop_RenderModelName_String, buf, sizeof(buf));
109 return system.get_render_model(string(buf, len-1));