galister / wlx-overlay-s

Access your Wayland/X11 desktop from Monado/WiVRn/SteamVR. Now with Vulkan!
GNU General Public License v3.0
199 stars 26 forks source link

OVR Advanced Settings Playspace Drag Major Feature Parity #50

Open CorneliusCornbread opened 5 months ago

CorneliusCornbread commented 5 months ago

This is a meta issue which lists the major features of OVR's Playspace Drag that the majority of users are going to be wanting when switching, see their motion page documentation

There are a few more features that I think users would want when switching (ex Force Bounds), but I didn't include them for now as they're going to require major upstream work before they could be implemented.

galister commented 5 months ago

Gravity: not planned Ability to change binding: see wiki Drag multiplier: this will likely happen soon, as it's quite simple Left/Right hand drag: bind the action to the other hand, it'll drag on the other hand

Baplar commented 5 months ago

Small question regarding the bindings. OVRAS also offers a binding to reset the playspace. WlxOverlay-S implements this feature, but seemingly only exposes it to be bound to UI, it is even available by default on the settings pop-up on the watch. Would it be possible to also allow binding it to a controller button through an action?

freebird1963 commented 3 months ago

how do i get ovr on here?

galister commented 3 months ago

@freebird1963 if you're on monado, you can use Wlx-S directly for space drag and space turn. See Wiki: OpenXR Bindings on how to.

If you're on SteamVR, simply grab the AppImage from the Latest Release of OpenVR Advanced Settings and run that. If it doesn't run due to a platform plugin error, try unsetting your WAYLAND_DISPLAY first.

TYTheBeast commented 3 months ago

Is there any way to force a binding such as showhide to only trigger when all inputs in the binding are pressed? I'd like to have to double-click both of my grab buttons on my Index controllers

galister commented 2 months ago

@TYTheBeast this is not possible with pure OpenXR, we'd need to implement a layer for handling composite input on top of OpenXR input.

If you're on SteamVR, it's possible to set whatever you want via SteamVR bindings.

TYTheBeast commented 2 months ago

Is there any documentation I could refer to, in order to try and implement it myself? Sounds like a fun challenge to work with OpenXR's inputs

galister commented 2 months ago

OpenXR spec - input section to get started.

The obvious limitation is that one action can be bound to any number of profiles/buttons, and it will activate if at least one of these is enabled.

As such, the workable solution would be to use combinations of actions.

Right now, wlx bindings work like this:

as such, in your file, you'd have something like:

    profile: "/interaction_profiles/oculus/touch_controller",
    [...]
    space_drag: {
      double_click: true,
      left: "/user/hand/left/input/menu/click",
    },

this binds space_drag to the oculus_controller's left/input/menu/click directly.

the advantage of this method is that any interaction profile is supported, as long as the user adds it to their json.

another solution would be to use openxr actions as raw button presses, and map them to wlx actions using an additional layer of configuration.

in this case, instead of having space_drag/left map to /user/hand/left/input/menu/click, we would have left_menu map to /user/hand/left/input/menu/click (on all controllers) and then the user would instead define that left_menu triggers left_space_drag.

relevant code: