Package com.jme3.input.vr
Interface VRInputAPI
- All Known Implementing Classes:
LWJGLOpenVRInput
,OculusVRInput
,OpenVRInput
,OSVRInput
public interface VRInputAPI
An interface that represents a VR input (typically a VR device such as a controller).
-
Method Summary
Modifier and TypeMethodDescriptiondefault AnalogActionState
getAnalogActionState
(String actionName) Gets the current state of the action (abstract version of a button press).default AnalogActionState
getAnalogActionState
(String actionName, String restrictToInput) Gets the current state of the action (abstract version of a button press).getAngularVelocity
(int controllerIndex) Get the controller angular velocity on all axes.getAxis
(int controllerIndex, VRInputType forAxis) Deprecated.Use action-manifest approach instead.getAxisDeltaSinceLastCall
(int controllerIndex, VRInputType forAxis) Deprecated.Use action-manifest approach instead.float
Get the controller axis multiplier.getAxisRaw
(int controllerIndex, VRInputType forAxis) Deprecated.Use the action-manifest approach.default DigitalActionState
getDigitalActionState
(String actionName) Gets the current state of the action (abstract version of a button press).default DigitalActionState
getDigitalActionState
(String actionName, String restrictToInput) Gets the current state of the action (abstract version of a button press).getFinalObserverPosition
(int index) Get the position of the input after all positional tracking is complete.getFinalObserverRotation
(int index) Get where is the controller pointing, after all rotations are combined.getOrientation
(int index) Get the orientation of the input.getPosition
(int index) Get the position of the input.getRawControllerState
(int index) Get the native wrapping of a controller state.getTrackedController
(int index) Get a tracked controller (for example, a hand controller) that is attached to the VR system.int
Get the number of tracked controllers (for example, hand controllers) attached to the VR system.getVelocity
(int controllerIndex) Get the controller velocity on all axes.boolean
init()
Initialize the input.boolean
isButtonDown
(int controllerIndex, VRInputType checkButton) Deprecated.Use the action-manifest approach instead.boolean
isInputDeviceTracking
(int index) Check if the input device is actually tracked (i-e if we can obtain a pose from the input).boolean
Check if the VR system has the focus and if it's not used by other process.default void
registerActionManifest
(String actionManifestAbsolutePath, String startingActiveActionSet) Registers an action manifest.void
Deprecated.Use the action-manifest approach instead.default void
setActiveActionSet
(String activeActionSet) Updates the active action set (the action group that will have their states available to be polled).void
setAxisMultiplier
(float set) Set the controller axis multiplier.void
Swap the two hands (exchange the hands' controller 1 and 2 indices).default void
triggerHapticAction
(String actionName, float duration, float frequency, float amplitude) Triggers a haptic action (aka a vibration).default void
triggerHapticAction
(String actionName, float duration, float frequency, float amplitude, String restrictToInput) Triggers a haptic action (aka a vibration) restricted to just one input (e.g.void
triggerHapticPulse
(int controllerIndex, float seconds) Deprecated.Use triggerHapticAction instead - it has more options and doesn't use deprecated methods.void
Update the connected controllers.void
Update the controller states.boolean
wasButtonPressedSinceLastCall
(int controllerIndex, VRInputType checkButton) Deprecated.Use the action-manifest approach instead.
-
Method Details
-
registerActionManifest
default void registerActionManifest(String actionManifestAbsolutePath, String startingActiveActionSet) Registers an action manifest. An action manifest is a file that defines "actions" a player can make. (An action is an abstract version of a button press). The action manifest may then also include references to further files that define default mappings between those actions and physical buttons on the VR controllers. Note that registering an actions manifest will deactivate legacy inputs. i.e. methods such asisButtonDown(int, com.jme3.input.vr.VRInputType)
will no longer work See https://github.com/ValveSoftware/openvr/wiki/Action-manifest for documentation on how to create an action manifest This option is only relevant to OpenVR- Parameters:
actionManifestAbsolutePath
- the absolute file path to an actions manifeststartingActiveActionSet
- the actions in the manifest are divided into action sets (groups) by their prefix (e.g. "/actions/main"). These action sets can be turned off and on per frame. This argument sets the action set that will be active now. The active action sets can be later be changed by callingsetActiveActionSet(java.lang.String)
. Note that at present only a single set at a time is supported
-
setActiveActionSet
Updates the active action set (the action group that will have their states available to be polled). Note that this update will not take effect until the next loop Note that at present only a single set at a time is supported- Parameters:
activeActionSet
- the actions in the manifest are divided into action sets (groups) by their prefix (e.g. "/actions/main"). These action sets can be turned off and on per frame. This argument sets the action set that will be active now.
-
getDigitalActionState
Gets the current state of the action (abstract version of a button press). This is called for digital style actions (a button is pressed, or not) This method is commonly called when it's not important which hand the action is bound to (e.g. if a button press is opening your inventory that could be bound to either left or right hand and that would not matter). If the handedness matters usegetDigitalActionState(String, String)
registerActionManifest(java.lang.String, java.lang.String)
must have been called before using this method.- Parameters:
actionName
- The name of the action. Will be something like /actions/main/in/openInventory- Returns:
- the DigitalActionState that has details on if the state has changed, what the state is etc.
-
getDigitalActionState
Gets the current state of the action (abstract version of a button press). This is called for digital style actions (a button is pressed, or not) This method is commonly called when it is important which hand the action is found on. For example while holding a weapon a button may be bound to "eject magazine" to allow you to load a new one, but that would only want to take effect on the hand that is holding the weapon Note that restrictToInput only restricts, it must still be bound to the input you want to receive the input from in the action manifest default bindings.registerActionManifest(java.lang.String, java.lang.String)
must have been called before using this method.- Parameters:
actionName
- The name of the action. E.g. /actions/main/in/openInventoryrestrictToInput
- the input to restrict the action to. E.g. /user/hand/right. Or null, which means "any input"- Returns:
- the DigitalActionState that has details on if the state has changed, what the state is etc.
-
getAnalogActionState
Gets the current state of the action (abstract version of a button press). This is called for analog style actions (most commonly joysticks, but button pressure can also be mapped in analog). This method is commonly called when it's not important which hand the action is bound to (e.g. if the thumb stick is controlling a third-person character in-game that could be bound to either left or right hand and that would not matter). If the handedness matters usegetAnalogActionState(String, String)
registerActionManifest(java.lang.String, java.lang.String)
must have been called before using this method.- Parameters:
actionName
- The name of the action. E.g. /actions/main/in/openInventory- Returns:
- the DigitalActionState that has details on if the state has changed, what the state is etc.
-
getAnalogActionState
Gets the current state of the action (abstract version of a button press). This is called for analog style actions (most commonly joysticks, but button pressure can also be mapped in analog). This method is commonly called when it is important which hand the action is found on. For example an "in universe" joystick that has a hat control might (while you are holding it) bind to the on-controller hat, but only on the hand holding it Note that restrictToInput only restricts, it must still be bound to the input you want to receive the input from in the action manifest default bindings.registerActionManifest(java.lang.String, java.lang.String)
must have been called before using this method.- Parameters:
actionName
- The name of the action. E.g. /actions/main/in/openInventoryrestrictToInput
- the input to restrict the action to. E.g. /user/hand/right. Or null, which means "any input"- Returns:
- the DigitalActionState that has details on if the state has changed, what the state is etc.
-
isButtonDown
Deprecated.Use the action-manifest approach instead. SeeregisterActionManifest(java.lang.String, java.lang.String)
. Note: action-manifest will only work with the OpenVR api.Check if the given button is down (more generally if the given input type is activated).- Parameters:
controllerIndex
- the index of the controller to check.checkButton
- the button / input to check.- Returns:
true
if the button / input is down / activated andfalse
otherwise.
-
wasButtonPressedSinceLastCall
Deprecated.Use the action-manifest approach instead. SeeregisterActionManifest(java.lang.String, java.lang.String)
. Note: action-manifest will only work with the OpenVR api.Check if the given button / input from the given controller has been just pressed / activated.- Parameters:
controllerIndex
- the index of the controller.checkButton
- the button / input to check.- Returns:
true
if the given input from the given controller has just been activated,false
otherwise.
-
resetInputSinceLastCall
Deprecated.Use the action-manifest approach instead. SeeregisterActionManifest(java.lang.String, java.lang.String)
. Note: action-manifest will only work with the OpenVR api.Reset the current activation of the inputs. After a call to this method, any input activation is considered a new activation. -
getAxisDeltaSinceLastCall
Deprecated.Use action-manifest approach instead. SeeregisterActionManifest(java.lang.String, java.lang.String)
. Note: action-manifest will only work with the OpenVR api.Get the controller axis delta from the last value.- Parameters:
controllerIndex
- the index of the controller.forAxis
- the axis.- Returns:
- the controller axis delta from the last call.
-
getVelocity
Get the controller velocity on all axes.- Parameters:
controllerIndex
- the index of the controller.- Returns:
- the controller velocity on all axes.
- See Also:
-
getAngularVelocity
Get the controller angular velocity on all axes.- Parameters:
controllerIndex
- the index of the controller.- Returns:
- the controller angular velocity on all axes.
- See Also:
-
getAxis
Deprecated.Use action-manifest approach instead. SeeregisterActionManifest(java.lang.String, java.lang.String)
. Note: action-manifest will only work with the OpenVR api.Get the axis value for the given input on the given controller. This value is theraw value
multiplied by theaxis multiplier
.- Parameters:
controllerIndex
- the index of the controller.forAxis
- the axis.- Returns:
- the axis value for the given input on the given controller.
- See Also:
-
getAxisRaw
Deprecated.Use the action-manifest approach. SeeregisterActionManifest(java.lang.String, java.lang.String)
. Note: action-manifest will only work with the OpenVR api.Get the axis value for the given input on the given controller.- Parameters:
controllerIndex
- the index of the controller.forAxis
- the axis.- Returns:
- the axis value for the given input on the given controller.
- See Also:
-
init
boolean init()Initialize the input.- Returns:
true
if the initialization is successful andfalse
otherwise.
-
getTrackedControllerCount
int getTrackedControllerCount()Get the number of tracked controllers (for example, hand controllers) attached to the VR system.- Returns:
- the number of controllers attached to the VR system.
- See Also:
-
getTrackedController
Get a tracked controller (for example, a hand controller) that is attached to the VR system.- Parameters:
index
- the index of the controller.- Returns:
- the tracked controller (for example, a hand controller) that is attached to the VR system.
- See Also:
-
updateConnectedControllers
void updateConnectedControllers()Update the connected controllers. This method should be used just after the initialization of the input. -
updateControllerStates
void updateControllerStates()Update the controller states. This method should be called before accessing any controller data. -
getRawControllerState
Get the native wrapping of a controller state.- Parameters:
index
- the index of the controller.- Returns:
- the native wrapping of a controller state.
-
swapHands
void swapHands()Swap the two hands (exchange the hands' controller 1 and 2 indices). -
getAxisMultiplier
float getAxisMultiplier()Get the controller axis multiplier. The controller axis raw data (trackpad, trigger, ...) value is multiplied by the one given in parameter.- Returns:
- the controller axis multiplier.
- See Also:
-
setAxisMultiplier
void setAxisMultiplier(float set) Set the controller axis multiplier. The controller axis raw data (trackpad, trigger, ...) value is multiplied by the one given in parameter.- Parameters:
set
- the controller axis multiplier.- See Also:
-
isInputFocused
boolean isInputFocused()Check if the VR system has the focus and if it's not used by other process.- Returns:
true
if the VR system has the focus andfalse
otherwise.
-
isInputDeviceTracking
boolean isInputDeviceTracking(int index) Check if the input device is actually tracked (i-e if we can obtain a pose from the input).- Parameters:
index
- the index of the controller.- Returns:
true
if the input device is actually tracked andfalse
otherwise.
-
getOrientation
Get the orientation of the input.- Parameters:
index
- the index of the controller.- Returns:
- the orientation of the input.
-
getPosition
Get the position of the input.- Parameters:
index
- the index of the controller.- Returns:
- the position of the input.
-
getFinalObserverRotation
Get where is the controller pointing, after all rotations are combined. This position should include observer rotation from the VR application.- Parameters:
index
- the index of the controller.- Returns:
- the rotation of the input after all positional tracking is complete.
-
getFinalObserverPosition
Get the position of the input after all positional tracking is complete. This position should include observer position from the VR application.- Parameters:
index
- the index of the controller.- Returns:
- the position of the input after all positional tracking is complete.
-
triggerHapticPulse
Deprecated.Use triggerHapticAction instead - it has more options and doesn't use deprecated methods.Trigger a haptic pulse on the selected controller for the duration given in parameters (in seconds).- Parameters:
controllerIndex
- the index of the controller.seconds
- the duration of the pulse in seconds.
-
triggerHapticAction
default void triggerHapticAction(String actionName, float duration, float frequency, float amplitude) Triggers a haptic action (aka a vibration). Note: if you want a haptic action in only one hand, you can either bind the action to one hand in the action manifest's standard bindings or bind to both and usetriggerHapticAction(String, float, float, float, String)
to control which input it gets set to at runtime.- Parameters:
actionName
- The name of the action. Will be something like /actions/main/out/vibrateduration
- how long in seconds thefrequency
- in cycles per secondamplitude
- between 0 and 1
-
triggerHapticAction
default void triggerHapticAction(String actionName, float duration, float frequency, float amplitude, String restrictToInput) Triggers a haptic action (aka a vibration) restricted to just one input (e.g. left or right hand). Note: restrictToInput only restricts which input is used at runtime. You must still bind the input you want to send the haptic to in the action manifest default bindings. This method is typically used by binding the haptic to both hands, and then deciding at runtime which hand it should be sent to.- Parameters:
actionName
- The name of the action. Will be something like /actions/main/out/vibrateduration
- how long in seconds thefrequency
- in cycles per secondamplitude
- between 0 and 1restrictToInput
- the input to restrict the action to, such as/user/hand/right
or/user/hand/left
.null
means "any input".
-