Universal (XR) Input Manager
Developing with a multiplatform approach or with just one platform but multiple possible interaction devices, comes with diverse challenges. You will need a solution providing certain compatibility between input devices, modularizing device dependent code, separating it from other game systems, while providing a unified interface to the rest of the application.
The biggest challenge in developing Gooze was to provide compatibility for very diverse input devices, while maintaining an almost identical set of possible interactions for the player. On the one side, this challenge required a sophisticated interaction design. On the other side it also required a technical approach, which needed to modularize device dependent code and separate it from the other game systems as well as possible. These systems should instead access an abstracted interface, the FTXRInputManager singleton (see the image). Although this universal input manager could not abstract all device specific features, it is nevertheless an essential solution to unifying the majority of possible input actions and haptic feedback options.
FTXRInputManager offers a standardized but extendable way of implementing any number of diverse input devices (see Keyboard, Mouse and Gamepad etc. in pink highlight). This is feasible by providing a set of abstract internal interfaces and rules, which the device specific code needs to conform to.
It is further possible to add an arbitrary number of abstracted input actions (see movement, rotation and grab etc. in pink highlight) and each input device should provide device specific implementations for as many of them as possible. Nevertheless, the system pragmatically accepts that different input devices do not offer the same number of sub-controls or output parameters. E.g. a gamepad provides various buttons, triggers and sticks, whereas the ROVR1 omnidirectional treadmill only outputs a single one-dimensional parameter. In turn, for every device, individual general device settings and all input actions can be individually fine-tuned and configured (e.g. device vibration multiplier and action sensitivity). This includes completely or partially deactivating an action or setting it up to fully support a specific device.
Regarding the other game systems though, FTXRInputManager works as a central access point for all input related matters with a standardized interface for most of the possible input actions. When there is an exception it can also provide direct access, by passing through the specific device controller instance (see specific input managers in the image). Additionally, it internally handles setting up and possibly switching the input mode, via hotkeys, too (see yellow highlight). An input mode is a certain configuration of active and inactive devices and/or actions.
Furthermore, FTXRInputManager includes a sophisticated haptic feedback system using the vibration capabilities of the input devices. A vibration effect consists of several parameters, including an intensity graph, a duration and several more device dependent options. Additionally to typical graphs like full vibration and sine wave, it is possible to define custom vibration intensity look up graphs, to create very individually feeling vibrations (see green highlight). A haptic effect will then adjust its intensity according to the graph over a freely configurable effect duration. Selecting from these graphs, it is possible to create vibration templates, which can be easily triggered as a vibration effect from anywhere in the code (see light blue highlight). These effects can be applied to either the left and/or right vibration channel/s, to provide possibly hand specific haptic feedback.