@ -5,7 +5,6 @@
* /
package com.jme3.input.vr ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
@ -184,50 +183,28 @@ public class OpenVRInput implements VRInputAPI {
@Override
public Vector3f getVelocity ( int controllerIndex ) {
if ( environment ! = null ) {
if ( environment . getVRHardware ( ) instanceof OpenVR ) {
int index = OpenVRInput . controllerIndex [ controllerIndex ] ;
if ( needsNewVelocity [ index ] ) {
( ( OpenVR ) environment . getVRHardware ( ) ) . hmdTrackedDevicePoses [ index ] . readField ( "vVelocity" ) ;
OpenVR . hmdTrackedDevicePoses [ index ] . readField ( "vVelocity" ) ;
needsNewVelocity [ index ] = false ;
}
tempVel . x = ( ( OpenVR ) environment . getVRHardware ( ) ) . hmdTrackedDevicePoses [ index ] . vVelocity . v [ 0 ] ;
tempVel . y = ( ( OpenVR ) environment . getVRHardware ( ) ) . hmdTrackedDevicePoses [ index ] . vVelocity . v [ 1 ] ;
tempVel . z = ( ( OpenVR ) environment . getVRHardware ( ) ) . hmdTrackedDevicePoses [ index ] . vVelocity . v [ 2 ] ;
tempVel . x = OpenVR . hmdTrackedDevicePoses [ index ] . vVelocity . v [ 0 ] ;
tempVel . y = OpenVR . hmdTrackedDevicePoses [ index ] . vVelocity . v [ 1 ] ;
tempVel . z = OpenVR . hmdTrackedDevicePoses [ index ] . vVelocity . v [ 2 ] ;
return tempVel ;
} else {
throw new IllegalStateException ( "VR hardware " + environment . getVRHardware ( ) . getClass ( ) . getSimpleName ( ) + " is not a subclass of " + OpenVR . class . getSimpleName ( ) ) ;
}
} else {
throw new IllegalStateException ( "VR input is not attached to a VR environment." ) ;
}
}
@Override
public Vector3f getAngularVelocity ( int controllerIndex ) {
if ( environment ! = null ) {
if ( environment . getVRHardware ( ) instanceof OpenVR ) {
int index = OpenVRInput . controllerIndex [ controllerIndex ] ;
if ( needsNewAngVelocity [ index ] ) {
( ( OpenVR ) environment . getVRHardware ( ) ) . hmdTrackedDevicePoses [ index ] . readField ( "vAngularVelocity" ) ;
OpenVR . hmdTrackedDevicePoses [ index ] . readField ( "vAngularVelocity" ) ;
needsNewAngVelocity [ index ] = false ;
}
tempVel . x = ( ( OpenVR ) environment . getVRHardware ( ) ) . hmdTrackedDevicePoses [ index ] . vAngularVelocity . v [ 0 ] ;
tempVel . y = ( ( OpenVR ) environment . getVRHardware ( ) ) . hmdTrackedDevicePoses [ index ] . vAngularVelocity . v [ 1 ] ;
tempVel . z = ( ( OpenVR ) environment . getVRHardware ( ) ) . hmdTrackedDevicePoses [ index ] . vAngularVelocity . v [ 2 ] ;
tempVel . x = OpenVR . hmdTrackedDevicePoses [ index ] . vAngularVelocity . v [ 0 ] ;
tempVel . y = OpenVR . hmdTrackedDevicePoses [ index ] . vAngularVelocity . v [ 1 ] ;
tempVel . z = OpenVR . hmdTrackedDevicePoses [ index ] . vAngularVelocity . v [ 2 ] ;
return tempVel ;
} else {
throw new IllegalStateException ( "VR hardware " + environment . getVRHardware ( ) . getClass ( ) . getSimpleName ( ) + " is not a subclass of " + OpenVR . class . getSimpleName ( ) ) ;
}
} else {
throw new IllegalStateException ( "VR input is not attached to a VR environment." ) ;
}
}
@Override
@ -332,16 +309,7 @@ public class OpenVRInput implements VRInputAPI {
return false ;
}
if ( environment ! = null ) {
if ( environment . getVRHardware ( ) instanceof OpenVR ) {
return ( ( OpenVR ) environment . getVRHardware ( ) ) . hmdTrackedDevicePoses [ controllerIndex [ index ] ] . bPoseIsValid ! = 0 ;
} else {
throw new IllegalStateException ( "VR hardware " + environment . getVRHardware ( ) . getClass ( ) . getSimpleName ( ) + " is not a subclass of " + OpenVR . class . getSimpleName ( ) ) ;
}
} else {
throw new IllegalStateException ( "VR input is not attached to a VR environment." ) ;
}
return OpenVR . hmdTrackedDevicePoses [ controllerIndex [ index ] ] . bPoseIsValid ! = 0 ;
}
@Override
@ -349,19 +317,9 @@ public class OpenVRInput implements VRInputAPI {
if ( isInputDeviceTracking ( index ) = = false ) {
return null ;
}
if ( environment ! = null ) {
if ( environment . getVRHardware ( ) instanceof OpenVR ) {
index = controllerIndex [ index ] ;
VRUtil . convertMatrix4toQuat ( ( ( OpenVR ) environment . getVRHardware ( ) ) . poseMatrices [ index ] , rotStore [ index ] ) ;
VRUtil . convertMatrix4toQuat ( OpenVR . poseMatrices [ index ] , rotStore [ index ] ) ;
return rotStore [ index ] ;
} else {
throw new IllegalStateException ( "VR hardware " + environment . getVRHardware ( ) . getClass ( ) . getSimpleName ( ) + " is not a subclass of " + OpenVR . class . getSimpleName ( ) ) ;
}
} else {
throw new IllegalStateException ( "VR input is not attached to a VR environment." ) ;
}
}
@Override
@ -370,23 +328,12 @@ public class OpenVRInput implements VRInputAPI {
return null ;
}
if ( environment ! = null ) {
if ( environment . getVRHardware ( ) instanceof OpenVR ) {
// the hmdPose comes in rotated funny, fix that here
index = controllerIndex [ index ] ;
( ( OpenVR ) environment . getVRHardware ( ) ) . poseMatrices [ index ] . toTranslationVector ( posStore [ index ] ) ;
OpenVR . poseMatrices [ index ] . toTranslationVector ( posStore [ index ] ) ;
posStore [ index ] . x = - posStore [ index ] . x ;
posStore [ index ] . z = - posStore [ index ] . z ;
return posStore [ index ] ;
} else {
throw new IllegalStateException ( "VR hardware " + environment . getVRHardware ( ) . getClass ( ) . getSimpleName ( ) + " is not a subclass of " + OpenVR . class . getSimpleName ( ) ) ;
}
} else {
throw new IllegalStateException ( "VR input is not attached to a VR environment." ) ;
}
}
@Override
@ -464,7 +411,8 @@ public class OpenVRInput implements VRInputAPI {
if ( environment ! = null ) {
controllerCount = 0 ;
for ( int i = 0 ; i < JOpenVRLibrary . k_unMaxTrackedDeviceCount ; i + + ) {
if ( ( ( OpenVR ) environment . getVRHardware ( ) ) . getVRSystem ( ) . GetTrackedDeviceClass . apply ( i ) = = JOpenVRLibrary . ETrackedDeviceClass . ETrackedDeviceClass_TrackedDeviceClass_Controller ) {
int classCallback = ( ( OpenVR ) environment . getVRHardware ( ) ) . getVRSystem ( ) . GetTrackedDeviceClass . apply ( i ) ;
if ( classCallback = = JOpenVRLibrary . ETrackedDeviceClass . ETrackedDeviceClass_TrackedDeviceClass_Controller | | classCallback = = JOpenVRLibrary . ETrackedDeviceClass . ETrackedDeviceClass_TrackedDeviceClass_GenericTracker ) {
String controllerName = "Unknown" ;
String manufacturerName = "Unknown" ;
@ -477,12 +425,6 @@ public class OpenVRInput implements VRInputAPI {
controllerIndex [ controllerCount ] = i ;
// Adding tracked controller to control.
if ( trackedControllers = = null ) {
trackedControllers = new ArrayList < VRTrackedController > ( JOpenVRLibrary . k_unMaxTrackedDeviceCount ) ;
}
trackedControllers . add ( new OpenVRTrackedController ( i , this , controllerName , manufacturerName , environment ) ) ;
// Send an Haptic pulse to the controller
triggerHapticPulse ( controllerCount , 1 . 0f ) ;
@ -503,7 +445,7 @@ public class OpenVRInput implements VRInputAPI {
if ( environment ! = null ) {
for ( int i = 0 ; i < controllerCount ; i + + ) {
int index = controllerIndex [ i ] ;
( ( OpenVR ) environment . getVRHardware ( ) ) . getVRSystem ( ) . GetControllerState . apply ( index , cStates [ index ] , 5 ) ;
( ( OpenVR ) environment . getVRHardware ( ) ) . getVRSystem ( ) . GetControllerState . apply ( index , cStates [ index ] , 64 ) ;
cStates [ index ] . readField ( "ulButtonPressed" ) ;
cStates [ index ] . readField ( "rAxis" ) ;
needsNewVelocity [ index ] = true ;