1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-08 23:23:38 +00:00
lovr/src/resources/openxr_actions.h
bjorn 5ab8dffd8d Fix OpenXR axis actions;
2D axes can't be used as 2D actions and instead need to be represented
as two 1D axes.  Also fixup oculus touch / valve index action paths.
2020-08-23 16:11:20 -06:00

173 lines
9 KiB
C

#pragma once
enum {
PROFILE_SIMPLE,
PROFILE_VIVE,
PROFILE_TOUCH,
PROFILE_GO,
PROFILE_INDEX,
MAX_PROFILES
};
enum {
ACTION_HAND_POSE,
ACTION_TRIGGER_DOWN,
ACTION_TRIGGER_TOUCH,
ACTION_TRIGGER_AXIS,
ACTION_TRACKPAD_DOWN,
ACTION_TRACKPAD_TOUCH,
ACTION_TRACKPAD_X,
ACTION_TRACKPAD_Y,
ACTION_THUMBSTICK_DOWN,
ACTION_THUMBSTICK_TOUCH,
ACTION_THUMBSTICK_X,
ACTION_THUMBSTICK_Y,
ACTION_MENU_DOWN,
ACTION_MENU_TOUCH,
ACTION_GRIP_DOWN,
ACTION_GRIP_TOUCH,
ACTION_GRIP_AXIS,
ACTION_VIBRATE,
MAX_ACTIONS
};
static const char* interactionProfiles[] = {
[PROFILE_SIMPLE] = "/interaction_profiles/khr/simple_controller",
[PROFILE_VIVE] = "/interaction_profiles/htc/vive_controller",
[PROFILE_TOUCH] = "/interaction_profiles/oculus/touch_controller",
[PROFILE_GO] = "/interaction_profiles/oculus/go_controller",
[PROFILE_INDEX] = "/interaction_profiles/valve/index_controller"
};
#define action(id, name, type) { XR_TYPE_ACTION_CREATE_INFO, NULL, id, type, 2, NULL, name }
static XrActionCreateInfo actionCreateInfo[] = {
[ACTION_HAND_POSE] = action("hand_pose", "Hand Pose", XR_ACTION_TYPE_POSE_INPUT),
[ACTION_TRIGGER_DOWN] = action("trigger_down", "Trigger Down", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_TRIGGER_TOUCH] = action("trigger_touch", "Trigger Touch", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_TRIGGER_AXIS] = action("trigger_axis", "Trigger Axis", XR_ACTION_TYPE_FLOAT_INPUT),
[ACTION_TRACKPAD_DOWN] = action("trackpad_down", "Trackpad Down", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_TRACKPAD_TOUCH] = action("trackpad_touch", "Trackpad Touch", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_TRACKPAD_X] = action("trackpad_x", "Trackpad X", XR_ACTION_TYPE_FLOAT_INPUT),
[ACTION_TRACKPAD_Y] = action("trackpad_y", "Trackpad Y", XR_ACTION_TYPE_FLOAT_INPUT),
[ACTION_THUMBSTICK_DOWN] = action("thumbstick_down", "Thumbstick Down", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_THUMBSTICK_TOUCH] = action("thumbstick_touch", "Thumbstick Touch", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_THUMBSTICK_X] = action("thumbstick_x", "Thumbstick X", XR_ACTION_TYPE_FLOAT_INPUT),
[ACTION_THUMBSTICK_Y] = action("thumbstick_y", "Thumbstick Y", XR_ACTION_TYPE_FLOAT_INPUT),
[ACTION_MENU_DOWN] = action("menu_down", "Menu Down", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_MENU_TOUCH] = action("menu_touch", "Menu Touch", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_GRIP_DOWN] = action("grip_down", "Grip Down", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_GRIP_TOUCH] = action("grip_touch", "Grip Touch", XR_ACTION_TYPE_BOOLEAN_INPUT),
[ACTION_GRIP_AXIS] = action("grip_axis", "Grip Axis", XR_ACTION_TYPE_FLOAT_INPUT),
[ACTION_VIBRATE] = action("vibrate", "Vibrate", XR_ACTION_TYPE_VIBRATION_OUTPUT),
};
#undef action
static const char* bindings[MAX_PROFILES][MAX_ACTIONS][2] = {
[PROFILE_SIMPLE] = {
[ACTION_HAND_POSE][0] = "/user/hand/left/input/grip/pose",
[ACTION_HAND_POSE][1] = "/user/hand/right/input/grip/pose",
[ACTION_TRIGGER_DOWN][0] = "/user/hand/left/input/select/click",
[ACTION_TRIGGER_DOWN][1] = "/user/hand/right/input/select/click",
[ACTION_MENU_DOWN][0] = "/user/hand/left/input/menu/click",
[ACTION_MENU_DOWN][1] = "/user/hand/right/input/menu/click",
[ACTION_VIBRATE][0] = "/user/hand/left/output/haptic",
[ACTION_VIBRATE][1] = "/user/hand/right/output/haptic"
},
[PROFILE_VIVE] = {
[ACTION_HAND_POSE][0] = "/user/hand/left/input/grip/pose",
[ACTION_HAND_POSE][1] = "/user/hand/right/input/grip/pose",
[ACTION_TRIGGER_DOWN][0] = "/user/hand/left/input/trigger/click",
[ACTION_TRIGGER_DOWN][1] = "/user/hand/right/input/trigger/click",
[ACTION_TRIGGER_AXIS][0] = "/user/hand/left/input/trigger/value",
[ACTION_TRIGGER_AXIS][1] = "/user/hand/right/input/trigger/value",
[ACTION_TRACKPAD_DOWN][0] = "/user/hand/left/input/trackpad/click",
[ACTION_TRACKPAD_DOWN][1] = "/user/hand/right/input/trackpad/click",
[ACTION_TRACKPAD_TOUCH][0] = "/user/hand/left/input/trackpad/touch",
[ACTION_TRACKPAD_TOUCH][1] = "/user/hand/right/input/trackpad/touch",
[ACTION_TRACKPAD_X][0] = "/user/hand/left/input/trackpad/x",
[ACTION_TRACKPAD_X][1] = "/user/hand/right/input/trackpad/x",
[ACTION_TRACKPAD_Y][0] = "/user/hand/left/input/trackpad/y",
[ACTION_TRACKPAD_Y][1] = "/user/hand/right/input/trackpad/y",
[ACTION_MENU_DOWN][0] = "/user/hand/left/input/menu/click",
[ACTION_MENU_DOWN][1] = "/user/hand/right/input/menu/click",
[ACTION_GRIP_DOWN][0] = "/user/hand/left/input/squeeze/click",
[ACTION_GRIP_DOWN][1] = "/user/hand/right/input/squeeze/click",
[ACTION_VIBRATE][0] = "/user/hand/left/output/haptic",
[ACTION_VIBRATE][1] = "/user/hand/right/output/haptic"
},
[PROFILE_TOUCH] = {
[ACTION_HAND_POSE][0] = "/user/hand/left/input/grip/pose",
[ACTION_HAND_POSE][1] = "/user/hand/right/input/grip/pose",
[ACTION_TRIGGER_DOWN][0] = "/user/hand/left/input/trigger/value",
[ACTION_TRIGGER_DOWN][1] = "/user/hand/right/input/trigger/value",
[ACTION_TRIGGER_TOUCH][0] = "/user/hand/left/input/trigger/touch",
[ACTION_TRIGGER_TOUCH][1] = "/user/hand/right/input/trigger/touch",
[ACTION_TRIGGER_AXIS][0] = "/user/hand/left/input/trigger/value",
[ACTION_TRIGGER_AXIS][1] = "/user/hand/right/input/trigger/value",
[ACTION_THUMBSTICK_DOWN][0] = "/user/hand/left/input/thumbstick/click",
[ACTION_THUMBSTICK_DOWN][1] = "/user/hand/right/input/thumbstick/click",
[ACTION_THUMBSTICK_TOUCH][0] = "/user/hand/left/input/thumbstick/touch",
[ACTION_THUMBSTICK_TOUCH][1] = "/user/hand/right/input/thumbstick/touch",
[ACTION_THUMBSTICK_X][0] = "/user/hand/left/input/thumbstick/x",
[ACTION_THUMBSTICK_X][1] = "/user/hand/right/input/thumbstick/x",
[ACTION_THUMBSTICK_Y][0] = "/user/hand/left/input/thumbstick/y",
[ACTION_THUMBSTICK_Y][1] = "/user/hand/right/input/thumbstick/y",
[ACTION_MENU_DOWN][0] = "/user/hand/left/input/menu/click",
[ACTION_MENU_DOWN][1] = "/user/hand/right/input/system/click",
[ACTION_GRIP_DOWN][0] = "/user/hand/left/input/squeeze/value",
[ACTION_GRIP_DOWN][1] = "/user/hand/right/input/squeeze/value",
[ACTION_GRIP_AXIS][0] = "/user/hand/left/input/squeeze/value",
[ACTION_GRIP_AXIS][1] = "/user/hand/right/input/squeeze/value",
[ACTION_VIBRATE][0] = "/user/hand/left/output/haptic",
[ACTION_VIBRATE][1] = "/user/hand/right/output/haptic"
},
[PROFILE_GO] = {
[ACTION_HAND_POSE][0] = "/user/hand/left/input/grip/pose",
[ACTION_HAND_POSE][1] = "/user/hand/right/input/grip/pose",
[ACTION_TRIGGER_DOWN][0] = "/user/hand/left/input/trigger/click",
[ACTION_TRIGGER_DOWN][1] = "/user/hand/right/input/trigger/click",
[ACTION_TRACKPAD_DOWN][0] = "/user/hand/left/input/trackpad/click",
[ACTION_TRACKPAD_DOWN][1] = "/user/hand/right/input/trackpad/click",
[ACTION_TRACKPAD_TOUCH][0] = "/user/hand/left/input/trackpad/touch",
[ACTION_TRACKPAD_TOUCH][1] = "/user/hand/right/input/trackpad/touch",
[ACTION_TRACKPAD_X][0] = "/user/hand/left/input/trackpad/x",
[ACTION_TRACKPAD_X][1] = "/user/hand/right/input/trackpad/x",
[ACTION_TRACKPAD_Y][0] = "/user/hand/left/input/trackpad/y",
[ACTION_TRACKPAD_Y][1] = "/user/hand/right/input/trackpad/y"
},
[PROFILE_INDEX] = {
[ACTION_HAND_POSE][0] = "/user/hand/left/input/grip/pose",
[ACTION_HAND_POSE][1] = "/user/hand/right/input/grip/pose",
[ACTION_TRIGGER_DOWN][0] = "/user/hand/left/input/trigger/click",
[ACTION_TRIGGER_DOWN][1] = "/user/hand/right/input/trigger/click",
[ACTION_TRIGGER_TOUCH][0] = "/user/hand/left/input/trigger/touch",
[ACTION_TRIGGER_TOUCH][1] = "/user/hand/right/input/trigger/touch",
[ACTION_TRIGGER_AXIS][0] = "/user/hand/left/input/trigger/value",
[ACTION_TRIGGER_AXIS][1] = "/user/hand/right/input/trigger/value",
[ACTION_TRACKPAD_DOWN][0] = "/user/hand/left/input/trackpad/force",
[ACTION_TRACKPAD_DOWN][1] = "/user/hand/right/input/trackpad/force",
[ACTION_TRACKPAD_TOUCH][0] = "/user/hand/left/input/trackpad/touch",
[ACTION_TRACKPAD_TOUCH][1] = "/user/hand/right/input/trackpad/touch",
[ACTION_TRACKPAD_X][0] = "/user/hand/left/input/trackpad/x",
[ACTION_TRACKPAD_X][1] = "/user/hand/right/input/trackpad/x",
[ACTION_TRACKPAD_Y][0] = "/user/hand/left/input/trackpad/y",
[ACTION_TRACKPAD_Y][1] = "/user/hand/right/input/trackpad/y",
[ACTION_THUMBSTICK_DOWN][0] = "/user/hand/left/input/thumbstick/click",
[ACTION_THUMBSTICK_DOWN][1] = "/user/hand/right/input/thumbstick/click",
[ACTION_THUMBSTICK_TOUCH][0] = "/user/hand/left/input/thumbstick/touch",
[ACTION_THUMBSTICK_TOUCH][1] = "/user/hand/right/input/thumbstick/touch",
[ACTION_THUMBSTICK_X][0] = "/user/hand/left/input/thumbstick/x",
[ACTION_THUMBSTICK_X][1] = "/user/hand/right/input/thumbstick/x",
[ACTION_THUMBSTICK_Y][0] = "/user/hand/left/input/thumbstick/y",
[ACTION_THUMBSTICK_Y][1] = "/user/hand/right/input/thumbstick/y",
[ACTION_GRIP_AXIS][0] = "/user/hand/left/input/squeeze/value",
[ACTION_GRIP_AXIS][1] = "/user/hand/right/input/squeeze/value",
[ACTION_VIBRATE][0] = "/user/hand/left/output/haptic",
[ACTION_VIBRATE][1] = "/user/hand/right/output/haptic"
}
};