2 #include "openvrcontroller.h"
3 #include "openvrcontroller_private.h"
4 #include "openvrsystem.h"
11 OpenVRController::OpenVRController(OpenVRSystem &s):
15 name = "OpenVR Controller";
17 system.add_controller(*this);
20 OpenVRController::~OpenVRController()
22 system.remove_controller(*this);
25 string OpenVRController::get_button_name(unsigned btn) const
29 case vr::k_EButton_System: return "System";
30 case vr::k_EButton_ApplicationMenu: return "Menu";
31 case vr::k_EButton_Grip: return "Grip";
32 case vr::k_EButton_Axis0: return "Trackpad";
33 case vr::k_EButton_Axis1: return "Trigger";
36 const char *n = vr::VRSystem()->GetButtonIdNameFromEnum(static_cast<vr::EVRButtonId>(btn));
40 return MotionController::get_button_name(btn);
43 string OpenVRController::get_axis_name(unsigned axis) const
47 case 0: return "Trackpad X";
48 case 1: return "Trackpad Y";
49 case 2: return "Trigger";
52 return MotionController::get_axis_name(axis);
55 void OpenVRController::event(const Event &ev)
59 case vr::VREvent_TrackedDeviceActivated:
60 index = ev.trackedDeviceIndex;
62 case vr::VREvent_TrackedDeviceDeactivated:
65 case vr::VREvent_ButtonPress:
66 set_button_state(ev.data.controller.button, true, true);
68 case vr::VREvent_ButtonUnpress:
69 set_button_state(ev.data.controller.button, false, true);
74 void OpenVRController::update()
79 update_from_matrix(system.get_tracking_matrix(index));
82 void OpenVRController::update_input_state()
87 vr::VRControllerState_t state;
88 vr::VRSystem()->GetControllerState(index, &state);
89 if(state.unPacketNum!=last_packet_number)
91 for(unsigned i=0; i<5; ++i)
93 set_axis_value(i*2, state.rAxis[i].x, true);
94 set_axis_value(i*2+1, state.rAxis[i].y, true);
97 last_packet_number = state.unPacketNum;