diff --git a/.gitignore b/.gitignore
index 065ad23112..03507b6786 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,10 +22,9 @@
.DS_Store
/jme3-core/src/main/resources/com/jme3/system/version.properties
/jme3-*/build/
-/jme3-bullet-native/bullet.zip
/jme3-bullet-native/bullet3.zip
-/jme3-bullet-native/bullet-2.82-r2704/
-/jme3-bullet-native/bullet3-2.83.7/
+/jme3-bullet-native/bullet3-2.86.1/
+/jme3-bullet-native/src/native/cpp/com_jme3_bullet_*.h
/jme3-android-native/openal-soft/
/jme3-android-native/OpenALSoft.zip
/jme3-android-native/src/native/jme_decode/STBI/
diff --git a/.travis.yml b/.travis.yml
index 00aed0854f..fc586f6397 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,5 @@
language: java
-sudo: false
-dist: precise
+sudo: true
branches:
only:
@@ -15,7 +14,9 @@ matrix:
env: UPLOAD=true UPLOAD_NATIVE=true
- os: linux
jdk: openjdk7
+ dist: precise
- os: osx
+ osx_image: xcode9.3
env: UPLOAD_NATIVE=true
addons:
diff --git a/appveyor.yml b/appveyor.yml
index dc36e789eb..036db80012 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -41,6 +41,8 @@ deploy: off
on_success:
- cmd: >-
+ if not defined encrypted_f0a0b284e2e8_key appveyor exit
+
openssl aes-256-cbc -K %encrypted_f0a0b284e2e8_key% -iv %encrypted_f0a0b284e2e8_iv% -in private\key.enc -out c:\users\appveyor\.ssh\id_rsa -d
git config --global user.email "appveyor"
diff --git a/build.gradle b/build.gradle
index 14d97755e2..3ccd202a90 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,10 +1,11 @@
buildscript {
repositories {
+ google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.1.0'
- classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5'
+ classpath 'com.android.tools.build:gradle:3.1.4'
+ classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
}
}
@@ -115,10 +116,6 @@ task mergedSource(type: Copy){
}
-task wrapper(type: Wrapper, description: 'Creates and deploys the Gradle wrapper to the current directory.') {
- gradleVersion = '4.1'
-}
-
ext {
ndkCommandPath = ""
ndkExists = false
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 51288f9c2f..7a3265ee94 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 3a174dff1c..76e4690af0 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Sun Sep 17 22:55:30 EDT 2017
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-bin.zip
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip
diff --git a/gradlew b/gradlew
index 4453ccea33..cccdd3d517 100755
--- a/gradlew
+++ b/gradlew
@@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
-warn ( ) {
+warn () {
echo "$*"
}
-die ( ) {
+die () {
echo
echo "$*"
echo
@@ -155,7 +155,7 @@ if $cygwin ; then
fi
# Escape application args
-save ( ) {
+save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
diff --git a/jme3-bullet-native/build.gradle b/jme3-bullet-native/build.gradle
index b94769943f..55273f09e9 100644
--- a/jme3-bullet-native/build.gradle
+++ b/jme3-bullet-native/build.gradle
@@ -11,6 +11,16 @@ if (!hasProperty('mainClass')) {
dependencies {
compile project(':jme3-bullet')
}
+clean { dependsOn 'cleanHeaders', 'cleanUnzipped' }
+
+// clean up auto-generated C++ headers
+task cleanHeaders(type: Delete) {
+ delete fileTree(dir: 'src/native/cpp', include: 'com_jme3_bullet_*.h')
+}
+// clean up unzipped files
+task cleanUnzipped(type: Delete) {
+ delete bulletFolder
+}
model {
components {
@@ -77,6 +87,7 @@ model {
return
}
+ cppCompiler.define('BT_NO_PROFILE')
if (toolChain in VisualCpp) {
cppCompiler.args "/I$javaHome\\include"
} else{
@@ -115,7 +126,10 @@ model {
cppCompiler.define('WIN32')
}
- tasks.all { dependsOn unzipBulletIfNeeded }
+ tasks.all {
+ dependsOn unzipBulletIfNeeded
+ dependsOn ':jme3-bullet:generateNativeHeaders'
+ }
// Add output to jar file
jar.into("native/${os}/${arch}") {
@@ -199,7 +213,7 @@ unzipBulletIfNeeded.dependsOn {
}
}
-// Helper class to wrap ant dowload task
+// Helper class to wrap ant download task
class MyDownload extends DefaultTask {
@Input
String sourceUrl
diff --git a/jme3-bullet-native/libs/native/linux/x86/libbulletjme.so b/jme3-bullet-native/libs/native/linux/x86/libbulletjme.so
index 9296f0a930..9aa3d7a26c 100755
Binary files a/jme3-bullet-native/libs/native/linux/x86/libbulletjme.so and b/jme3-bullet-native/libs/native/linux/x86/libbulletjme.so differ
diff --git a/jme3-bullet-native/libs/native/linux/x86_64/libbulletjme.so b/jme3-bullet-native/libs/native/linux/x86_64/libbulletjme.so
index 2d41558d41..ae2e70eb0b 100755
Binary files a/jme3-bullet-native/libs/native/linux/x86_64/libbulletjme.so and b/jme3-bullet-native/libs/native/linux/x86_64/libbulletjme.so differ
diff --git a/jme3-bullet-native/libs/native/osx/x86/libbulletjme.dylib b/jme3-bullet-native/libs/native/osx/x86/libbulletjme.dylib
index 3ace9e9461..953b2eade2 100755
Binary files a/jme3-bullet-native/libs/native/osx/x86/libbulletjme.dylib and b/jme3-bullet-native/libs/native/osx/x86/libbulletjme.dylib differ
diff --git a/jme3-bullet-native/libs/native/osx/x86_64/libbulletjme.dylib b/jme3-bullet-native/libs/native/osx/x86_64/libbulletjme.dylib
index 594501d671..1a9432c8dc 100755
Binary files a/jme3-bullet-native/libs/native/osx/x86_64/libbulletjme.dylib and b/jme3-bullet-native/libs/native/osx/x86_64/libbulletjme.dylib differ
diff --git a/jme3-bullet-native/libs/native/windows/x86/bulletjme.dll b/jme3-bullet-native/libs/native/windows/x86/bulletjme.dll
index ab0ef06dac..f4556c5ad5 100755
Binary files a/jme3-bullet-native/libs/native/windows/x86/bulletjme.dll and b/jme3-bullet-native/libs/native/windows/x86/bulletjme.dll differ
diff --git a/jme3-bullet-native/libs/native/windows/x86_64/bulletjme.dll b/jme3-bullet-native/libs/native/windows/x86_64/bulletjme.dll
index f73fc45c4c..8a4ac5c807 100755
Binary files a/jme3-bullet-native/libs/native/windows/x86_64/bulletjme.dll and b/jme3-bullet-native/libs/native/windows/x86_64/bulletjme.dll differ
diff --git a/jme3-bullet-native/src/native/cpp/com_jme3_bullet_PhysicsSpace.h b/jme3-bullet-native/src/native/cpp/com_jme3_bullet_PhysicsSpace.h
deleted file mode 100644
index b7b932df9c..0000000000
--- a/jme3-bullet-native/src/native/cpp/com_jme3_bullet_PhysicsSpace.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public class BulletAppState implements AppState, PhysicsTickListener {
+ /**
+ * true if-and-only-if the physics simulation is running (started but not
+ * yet stopped)
+ */
protected boolean initialized = false;
protected Application app;
+ /**
+ * manager that manages this state, set during attach
+ */
protected AppStateManager stateManager;
+ /**
+ * executor service for physics tasks, or null if parallel simulation is not
+ * running
+ */
protected ScheduledThreadPoolExecutor executor;
+ /**
+ * physics space managed by this state, or null if no simulation running
+ */
protected PhysicsSpace pSpace;
+ /**
+ * threading mode to use (not null)
+ */
protected ThreadingType threadingType = ThreadingType.SEQUENTIAL;
+ /**
+ * broadphase collision-detection algorithm for the physics space to use
+ * (not null)
+ */
protected BroadphaseType broadphaseType = BroadphaseType.DBVT;
+ /**
+ * minimum coordinate values for the physics space when using AXIS_SWEEP
+ * broadphase algorithms (not null)
+ */
protected Vector3f worldMin = new Vector3f(-10000f, -10000f, -10000f);
+ /**
+ * maximum coordinate values for the physics space when using AXIS_SWEEP
+ * broadphase algorithms (not null)
+ */
protected Vector3f worldMax = new Vector3f(10000f, 10000f, 10000f);
+ /**
+ * simulation speed multiplier (default=1, paused=0)
+ */
protected float speed = 1;
+ /**
+ * true if-and-only-if this state is enabled
+ */
protected boolean active = true;
+ /**
+ * true if-and-only-if debug visualization is enabled
+ */
protected boolean debugEnabled = false;
+ /**
+ * app state to manage the debug visualization, or null if none
+ */
protected BulletDebugAppState debugAppState;
+ /**
+ * time interval between frames (in seconds) from the most recent update
+ */
protected float tpf;
+ /**
+ * current physics task, or null if none
+ */
protected Future physicsFuture;
/**
- * Creates a new BulletAppState running a PhysicsSpace for physics
- * simulation, use getStateManager().attach(bulletAppState) to enable
- * physics for an Application.
+ * Instantiate an app state to manage a new PhysicsSpace with DBVT collision
+ * detection.
+ *
+ * Use getStateManager().addState(bulletAppState) to start physics.
*/
public BulletAppState() {
}
/**
- * Creates a new BulletAppState running a PhysicsSpace for physics
- * simulation, use getStateManager().attach(bulletAppState) to enable
- * physics for an Application.
+ * Instantiate an app state to manage a new PhysicsSpace.
+ *
+ * Use getStateManager().addState(bulletAppState) to start physics.
*
- * @param broadphaseType The type of broadphase collision detection,
- * BroadphaseType.DVBT is the default
+ * @param broadphaseType which broadphase collision-detection algorithm to
+ * use (not null)
*/
public BulletAppState(BroadphaseType broadphaseType) {
this(new Vector3f(-10000f, -10000f, -10000f), new Vector3f(10000f, 10000f, 10000f), broadphaseType);
}
/**
- * Creates a new BulletAppState running a PhysicsSpace for physics
- * simulation, use getStateManager().attach(bulletAppState) to enable
- * physics for an Application. An AxisSweep broadphase is used.
+ * Instantiate an app state to manage a new PhysicsSpace with AXIS_SWEEP_3
+ * collision detection.
+ *
+ * Use getStateManager().addState(bulletAppState) to start physics.
*
- * @param worldMin The minimum world extent
- * @param worldMax The maximum world extent
+ * @param worldMin the desired minimum coordinate values (not null,
+ * unaffected, default=-10k,-10k,-10k)
+ * @param worldMax the desired maximum coordinate values (not null,
+ * unaffected, default=10k,10k,10k)
*/
public BulletAppState(Vector3f worldMin, Vector3f worldMax) {
this(worldMin, worldMax, BroadphaseType.AXIS_SWEEP_3);
}
+ /**
+ * Instantiate an app state to manage a new PhysicsSpace.
+ *
+ * Use getStateManager().addState(bulletAppState) to enable physics.
+ *
+ * @param worldMin the desired minimum coordinate values (not null,
+ * unaffected, default=-10k,-10k,-10k)
+ * @param worldMax the desired maximum coordinate values (not null,
+ * unaffected, default=10k,10k,10k)
+ * @param broadphaseType which broadphase collision-detection algorithm to
+ * use (not null)
+ */
public BulletAppState(Vector3f worldMin, Vector3f worldMax, BroadphaseType broadphaseType) {
this.worldMin.set(worldMin);
this.worldMax.set(worldMax);
this.broadphaseType = broadphaseType;
}
+ /**
+ * Allocate the physics space and start physics for ThreadingType.PARALLEL.
+ *
+ * @return true if successful, otherwise false
+ */
private boolean startPhysicsOnExecutor() {
if (executor != null) {
executor.shutdown();
@@ -145,28 +215,49 @@ public Boolean call() throws Exception {
}
};
+ /**
+ * Access the PhysicsSpace managed by this state. Normally there is none
+ * until the state is attached.
+ *
+ * @return the pre-existing instance, or null if no simulation running
+ */
public PhysicsSpace getPhysicsSpace() {
return pSpace;
}
/**
- * The physics system is started automatically on attaching, if you want to
- * start it before for some reason, you can use this method.
+ * Allocate a physics space and start physics.
+ *
+ * Physics starts automatically after the state is attached. To start it
+ * sooner, invoke this method.
*/
public void startPhysics() {
if (initialized) {
return;
}
- //start physics thread(pool)
- if (threadingType == ThreadingType.PARALLEL) {
- startPhysicsOnExecutor();
- } else {
- pSpace = new PhysicsSpace(worldMin, worldMax, broadphaseType);
+
+ switch (threadingType) {
+ case PARALLEL:
+ boolean success = startPhysicsOnExecutor();
+ assert success;
+ assert pSpace != null;
+ break;
+
+ case SEQUENTIAL:
+ pSpace = new PhysicsSpace(worldMin, worldMax, broadphaseType);
+ pSpace.addTickListener(this);
+ break;
+
+ default:
+ throw new IllegalStateException(threadingType.toString());
}
- pSpace.addTickListener(this);
+
initialized = true;
}
+ /**
+ * Stop physics after this state is detached.
+ */
public void stopPhysics() {
if(!initialized){
return;
@@ -180,32 +271,72 @@ public void stopPhysics() {
initialized = false;
}
+ /**
+ * Initialize this state prior to its 1st update. Should be invoked only by
+ * a subclass or by the AppStateManager.
+ *
+ * @param stateManager the manager for this state (not null)
+ * @param app the application which owns this state (not null)
+ */
public void initialize(AppStateManager stateManager, Application app) {
this.app = app;
this.stateManager = stateManager;
startPhysics();
}
+ /**
+ * Test whether the physics simulation is running (started but not yet
+ * stopped).
+ *
+ * @return true if running, otherwise false
+ */
public boolean isInitialized() {
return initialized;
}
+ /**
+ * Enable or disable this state.
+ *
+ * @param enabled true → enable, false → disable
+ */
public void setEnabled(boolean enabled) {
this.active = enabled;
}
+ /**
+ * Test whether this state is enabled.
+ *
+ * @return true if enabled, otherwise false
+ */
public boolean isEnabled() {
return active;
}
+ /**
+ * Alter whether debug visualization is enabled.
+ *
+ * @param debugEnabled true → enable, false → disable
+ */
public void setDebugEnabled(boolean debugEnabled) {
this.debugEnabled = debugEnabled;
}
+
+ /**
+ * Test whether debug visualization is enabled.
+ *
+ * @return true if enabled, otherwise false
+ */
public boolean isDebugEnabled() {
return debugEnabled;
}
+ /**
+ * Transition this state from detached to initializing. Should be invoked
+ * only by a subclass or by the AppStateManager.
+ *
+ * @param stateManager (not null)
+ */
public void stateAttached(AppStateManager stateManager) {
if (!initialized) {
startPhysics();
@@ -219,9 +350,22 @@ public void stateAttached(AppStateManager stateManager) {
}
}
+ /**
+ * Transition this state from running to terminating. Should be invoked only
+ * by a subclass or by the AppStateManager.
+ *
+ * @param stateManager (not null)
+ */
public void stateDetached(AppStateManager stateManager) {
}
+ /**
+ * Update this state prior to rendering. Should be invoked only by a
+ * subclass or by the AppStateManager. Invoked once per frame, provided the
+ * state is attached and enabled.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
public void update(float tpf) {
if (debugEnabled && debugAppState == null && pSpace != null) {
debugAppState = new BulletDebugAppState(pSpace);
@@ -237,6 +381,13 @@ public void update(float tpf) {
this.tpf = tpf;
}
+ /**
+ * Render this state. Should be invoked only by a subclass or by the
+ * AppStateManager. Invoked once per frame, provided the state is attached
+ * and enabled.
+ *
+ * @param rm the render manager (not null)
+ */
public void render(RenderManager rm) {
if (!active) {
return;
@@ -249,6 +400,11 @@ public void render(RenderManager rm) {
}
}
+ /**
+ * Update this state after all rendering commands are flushed. Should be
+ * invoked only by a subclass or by the AppStateManager. Invoked once per
+ * frame, provided the state is attached and enabled.
+ */
public void postRender() {
if (physicsFuture != null) {
try {
@@ -262,6 +418,12 @@ public void postRender() {
}
}
+ /**
+ * Transition this state from terminating to detached. Should be invoked
+ * only by a subclass or by the AppStateManager. Invoked once for each time
+ * {@link #initialize(com.jme3.app.state.AppStateManager, com.jme3.app.Application)}
+ * is invoked.
+ */
public void cleanup() {
if (debugAppState != null) {
stateManager.detach(debugAppState);
@@ -271,67 +433,106 @@ public void cleanup() {
}
/**
- * @return the threadingType
+ * Read which type of threading this app state uses.
+ *
+ * @return the threadingType (not null)
*/
public ThreadingType getThreadingType() {
return threadingType;
}
/**
- * Use before attaching state
+ * Alter which type of threading this app state uses. Not allowed after
+ * attaching the app state.
*
- * @param threadingType the threadingType to set
+ * @param threadingType the desired type (not null, default=SEQUENTIAL)
*/
public void setThreadingType(ThreadingType threadingType) {
this.threadingType = threadingType;
}
/**
- * Use before attaching state
+ * Alter the broadphase type the physics space will use. Not allowed after
+ * attaching the app state.
+ *
+ * @param broadphaseType an enum value (not null, default=DBVT)
*/
public void setBroadphaseType(BroadphaseType broadphaseType) {
this.broadphaseType = broadphaseType;
}
/**
- * Use before attaching state
+ * Alter the coordinate range. Not allowed after attaching the app state.
+ *
+ * @param worldMin the desired minimum coordinate values when using
+ * AXIS_SWEEP broadphase algorithms (not null, alias created,
+ * default=-10k,-10k,-10k)
*/
public void setWorldMin(Vector3f worldMin) {
this.worldMin = worldMin;
}
/**
- * Use before attaching state
+ * Alter the coordinate range. Not allowed after attaching the app state.
+ *
+ * @param worldMax the desired maximum coordinate values when using
+ * AXIS_SWEEP broadphase algorithms (not null, alias created,
+ * default=10k,10k,10k)
*/
public void setWorldMax(Vector3f worldMax) {
this.worldMax = worldMax;
}
+ /**
+ * Read the simulation speed.
+ *
+ * @return speed (≥0, default=1)
+ */
public float getSpeed() {
return speed;
}
+ /**
+ * Alter the simulation speed.
+ *
+ * @param speed the desired speed (≥0, default=1)
+ */
public void setSpeed(float speed) {
this.speed = speed;
}
-
+ /**
+ * Callback from Bullet, invoked just before the physics is stepped. A good
+ * time to clear/apply forces.
+ *
+ * @param space the space that is about to be stepped (not null)
+ * @param f the time per physics step (in seconds, ≥0)
+ */
public void prePhysicsTick(PhysicsSpace space, float f) {
}
+ /**
+ * Callback from Bullet, invoked just after the physics is stepped. A good
+ * time to clear/apply forces.
+ *
+ * @param space the space that is about to be stepped (not null)
+ * @param f the time per physics step (in seconds, ≥0)
+ */
public void physicsTick(PhysicsSpace space, float f) {
}
+ /**
+ * Enumerate threading modes.
+ */
public enum ThreadingType {
/**
- * Default mode; user update, physics update and rendering happen
- * sequentially (single threaded)
+ * Default mode: user update, physics update, and rendering happen
+ * sequentially. (single threaded)
*/
SEQUENTIAL,
/**
- * Parallel threaded mode; physics update and rendering are executed in
- * parallel, update order is kept.
+ * This interface is shared between JBullet and Native Bullet.
+ *
* @author normenhansen
*/
public interface PhysicsTickListener {
/**
- * Called before the physics is actually stepped, use to apply forces etc.
- * @param space the physics space
- * @param tpf the time per frame in seconds
+ * Callback from Bullet, invoked just before the physics is stepped. A good
+ * time to clear/apply forces.
+ *
+ * @param space the space that is about to be stepped (not null)
+ * @param tpf the time per physics step (in seconds, ≥0)
*/
public void prePhysicsTick(PhysicsSpace space, float tpf);
/**
- * Called after the physics has been stepped, use to check for forces etc.
- * @param space the physics space
- * @param tpf the time per frame in seconds
+ * Callback from Bullet, invoked just after the physics has been stepped,
+ * use to check for forces etc.
+ *
+ * @param space the space that was just stepped (not null)
+ * @param tpf the time per physics step (in seconds, ≥0)
*/
public void physicsTick(PhysicsSpace space, float tpf);
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/collision/PhysicsCollisionGroupListener.java b/jme3-bullet/src/common/java/com/jme3/bullet/collision/PhysicsCollisionGroupListener.java
index d5d010d873..4a7a0432d6 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/collision/PhysicsCollisionGroupListener.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/collision/PhysicsCollisionGroupListener.java
@@ -32,18 +32,25 @@
package com.jme3.bullet.collision;
/**
+ * Interface to receive notifications whenever an object in a particular
+ * collision group is about to collide.
+ *
+ * This interface is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public interface PhysicsCollisionGroupListener {
/**
- * Called when two physics objects of the registered group are about to collide, called from physics thread.
+ * This interface is shared between JBullet and Native Bullet.
+ *
* @author normenhansen
*/
public interface PhysicsCollisionListener {
/**
- * Called when a collision happened in the PhysicsSpace, called from render thread.
- *
- * Do not store the event object as it will be cleared after the method has finished.
- * @param event the CollisionEvent
+ * Invoked when a collision happened in the PhysicsSpace. Invoked on the
+ * render thread.
+ *
+ * Do not retain the event object, as it will be reused after the
+ * collision() method returns. Copy any data you need during the collide()
+ * method.
+ *
+ * @param event the event that occurred (not null, reusable)
*/
public void collision(PhysicsCollisionEvent event);
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/collision/RagdollCollisionListener.java b/jme3-bullet/src/common/java/com/jme3/bullet/collision/RagdollCollisionListener.java
index cb00aeff3c..84e50cdaed 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/collision/RagdollCollisionListener.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/collision/RagdollCollisionListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,11 +34,22 @@
import com.jme3.animation.Bone;
/**
+ * Interface to receive notifications whenever a KinematicRagdollControl
+ * collides with another physics object.
+ *
+ * This interface is shared between JBullet and Native Bullet.
*
* @author Nehon
*/
public interface RagdollCollisionListener {
+ /**
+ * Invoked when a collision involving a KinematicRagdollControl occurs.
+ *
+ * @param bone the ragdoll bone that collided (not null)
+ * @param object the collision object that collided with the bone (not null)
+ * @param event other event details (not null)
+ */
public void collide(Bone bone, PhysicsCollisionObject object, PhysicsCollisionEvent event);
}
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/collision/shapes/infos/ChildCollisionShape.java b/jme3-bullet/src/common/java/com/jme3/bullet/collision/shapes/infos/ChildCollisionShape.java
index ac71962585..1ca8bc37c4 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/collision/shapes/infos/ChildCollisionShape.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/collision/shapes/infos/ChildCollisionShape.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -39,24 +39,56 @@
import java.io.IOException;
/**
+ * An element of a CompoundCollisionShape, consisting of a (non-compound) child
+ * shape, offset and rotated with respect to its parent.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public class ChildCollisionShape implements Savable {
+ /**
+ * translation relative to parent shape (not null)
+ */
public Vector3f location;
+ /**
+ * rotation relative to parent shape (not null)
+ */
public Matrix3f rotation;
+ /**
+ * base shape (not null, not a compound shape)
+ */
public CollisionShape shape;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public ChildCollisionShape() {
}
+ /**
+ * Instantiate a child shape for use in a compound shape.
+ *
+ * @param location translation relative to the parent (not null, alias
+ * created)
+ * @param rotation rotation relative to the parent (not null, alias created)
+ * @param shape the base shape (not null, not a compound shape, alias
+ * created)
+ */
public ChildCollisionShape(Vector3f location, Matrix3f rotation, CollisionShape shape) {
this.location = location;
this.rotation = rotation;
this.shape = shape;
}
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
OutputCapsule capsule = ex.getCapsule(this);
capsule.write(location, "location", new Vector3f());
@@ -64,6 +96,12 @@ public void write(JmeExporter ex) throws IOException {
capsule.write(shape, "shape", new BoxCollisionShape(new Vector3f(1, 1, 1)));
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
public void read(JmeImporter im) throws IOException {
InputCapsule capsule = im.getCapsule(this);
location = (Vector3f) capsule.readSavable("location", new Vector3f());
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/control/AbstractPhysicsControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/control/AbstractPhysicsControl.java
index 4f6eef4884..f858d0e00e 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/control/AbstractPhysicsControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/control/AbstractPhysicsControl.java
@@ -47,82 +47,113 @@
import java.io.IOException;
/**
- * AbstractPhysicsControl manages the lifecycle of a physics object that is
- * attached to a spatial in the SceneGraph.
+ * Manage the life cycle of a physics object linked to a spatial in a scene
+ * graph.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public abstract class AbstractPhysicsControl implements PhysicsControl, JmeCloneable {
+ /**
+ * temporary storage during calculations
+ */
private final Quaternion tmp_inverseWorldRotation = new Quaternion();
+ /**
+ * spatial to which this control is added, or null if none
+ */
protected Spatial spatial;
+ /**
+ * true→control is enabled, false→control is disabled
+ */
protected boolean enabled = true;
+ /**
+ * true→body is added to the physics space, false→not added
+ */
protected boolean added = false;
+ /**
+ * space to which the physics object is (or would be) added
+ */
protected PhysicsSpace space = null;
+ /**
+ * true → physics coordinates match local transform, false →
+ * physics coordinates match world transform
+ */
protected boolean applyLocal = false;
/**
- * Called when the control is added to a new spatial, create any
- * spatial-dependent data here.
+ * Create spatial-dependent data. Invoked when this control is added to a
+ * spatial.
*
- * @param spat The new spatial, guaranteed not to be null
+ * @param spat the controlled spatial (not null)
*/
protected abstract void createSpatialData(Spatial spat);
/**
- * Called when the control is removed from a spatial, remove any
- * spatial-dependent data here.
+ * Destroy spatial-dependent data. Invoked when this control is removed from
+ * a spatial.
*
- * @param spat The old spatial, guaranteed not to be null
+ * @param spat the previously controlled spatial (not null)
*/
protected abstract void removeSpatialData(Spatial spat);
/**
- * Called when the physics object is supposed to move to the spatial
- * position.
+ * Translate the physics object to the specified location.
*
- * @param vec
+ * @param vec desired location (not null, unaffected)
*/
protected abstract void setPhysicsLocation(Vector3f vec);
/**
- * Called when the physics object is supposed to move to the spatial
- * rotation.
+ * Rotate the physics object to the specified orientation.
*
- * @param quat
+ * @param quat desired orientation (not null, unaffected)
*/
protected abstract void setPhysicsRotation(Quaternion quat);
/**
- * Called when the physics object is supposed to add all objects it needs to
- * manage to the physics space.
+ * Add all managed physics objects to the specified space.
*
- * @param space
+ * @param space which physics space to add to (not null)
*/
protected abstract void addPhysics(PhysicsSpace space);
/**
- * Called when the physics object is supposed to remove all objects added to
- * the physics space.
+ * Remove all managed physics objects from the specified space.
*
- * @param space
+ * @param space which physics space to remove from (not null)
*/
protected abstract void removePhysics(PhysicsSpace space);
+ /**
+ * Test whether physics-space coordinates should match the spatial's local
+ * coordinates.
+ *
+ * @return true if matching local coordinates, false if matching world
+ * coordinates
+ */
public boolean isApplyPhysicsLocal() {
return applyLocal;
}
/**
- * When set to true, the physics coordinates will be applied to the local
- * translation of the Spatial
+ * Alter whether physics-space coordinates should match the spatial's local
+ * coordinates.
*
- * @param applyPhysicsLocal
+ * @param applyPhysicsLocal true→match local coordinates,
+ * false→match world coordinates (default=false)
*/
public void setApplyPhysicsLocal(boolean applyPhysicsLocal) {
applyLocal = applyPhysicsLocal;
}
+ /**
+ * Access whichever spatial translation corresponds to the physics location.
+ *
+ * @return the pre-existing location vector (in physics-space coordinates,
+ * not null)
+ */
protected Vector3f getSpatialTranslation() {
if (applyLocal) {
return spatial.getLocalTranslation();
@@ -130,6 +161,12 @@ protected Vector3f getSpatialTranslation() {
return spatial.getWorldTranslation();
}
+ /**
+ * Access whichever spatial rotation corresponds to the physics rotation.
+ *
+ * @return the pre-existing quaternion (in physics-space coordinates, not
+ * null)
+ */
protected Quaternion getSpatialRotation() {
if (applyLocal) {
return spatial.getLocalRotation();
@@ -138,10 +175,12 @@ protected Quaternion getSpatialRotation() {
}
/**
- * Applies a physics transform to the spatial
+ * Apply a physics transform to the spatial.
*
- * @param worldLocation
- * @param worldRotation
+ * @param worldLocation location vector (in physics-space coordinates, not
+ * null, unaffected)
+ * @param worldRotation orientation (in physics-space coordinates, not null,
+ * unaffected)
*/
protected void applyPhysicsTransform(Vector3f worldLocation, Quaternion worldRotation) {
if (enabled && spatial != null) {
@@ -170,12 +209,28 @@ public Control cloneForSpatial(Spatial spatial) {
throw new UnsupportedOperationException();
}
+ /**
+ * Callback from {@link com.jme3.util.clone.Cloner} to convert this
+ * shallow-cloned control into a deep-cloned one, using the specified cloner
+ * and original to resolve copied fields.
+ *
+ * @param cloner the cloner that's cloning this control (not null)
+ * @param original the control from which this control was shallow-cloned
+ * (unused)
+ */
@Override
public void cloneFields( Cloner cloner, Object original ) {
this.spatial = cloner.clone(spatial);
createSpatialData(this.spatial);
}
+ /**
+ * Alter which spatial is controlled. Invoked when the control is added to
+ * or removed from a spatial. Should be invoked only by a subclass or from
+ * Spatial. Do not invoke directly from user code.
+ *
+ * @param spatial the spatial to control (or null)
+ */
public void setSpatial(Spatial spatial) {
if (this.spatial != null && this.spatial != spatial) {
removeSpatialData(this.spatial);
@@ -191,6 +246,15 @@ public void setSpatial(Spatial spatial) {
setPhysicsRotation(getSpatialRotation());
}
+ /**
+ * Enable or disable this control.
+ *
+ * When the control is disabled, the physics object is removed from physics
+ * space. When the control is enabled again, the physics object is moved to
+ * the spatial's location and then added to the physics space.
+ *
+ * @param enabled true→enable the control, false→disable it
+ */
public void setEnabled(boolean enabled) {
this.enabled = enabled;
if (space != null) {
@@ -208,6 +272,11 @@ public void setEnabled(boolean enabled) {
}
}
+ /**
+ * Test whether this control is enabled.
+ *
+ * @return true if enabled, otherwise false
+ */
public boolean isEnabled() {
return enabled;
}
@@ -218,28 +287,48 @@ public void update(float tpf) {
public void render(RenderManager rm, ViewPort vp) {
}
- public void setPhysicsSpace(PhysicsSpace space) {
- if (space == null) {
- if (this.space != null) {
- removePhysics(this.space);
- added = false;
- }
- } else {
- if (this.space == space) {
- return;
- } else if (this.space != null) {
- removePhysics(this.space);
- }
- addPhysics(space);
+ /**
+ * If enabled, add this control's physics object to the specified physics
+ * space. If not enabled, alter where the object would be added. The object
+ * is removed from any other space it's in.
+ *
+ * @param newSpace where to add, or null to simply remove
+ */
+ @Override
+ public void setPhysicsSpace(PhysicsSpace newSpace) {
+ if (space == newSpace) {
+ return;
+ }
+ if (added) {
+ removePhysics(space);
+ added = false;
+ }
+ if (newSpace != null && isEnabled()) {
+ addPhysics(newSpace);
added = true;
}
- this.space = space;
+ /*
+ * If this control isn't enabled, its physics object will be
+ * added to the new space when the control becomes enabled.
+ */
+ space = newSpace;
}
+ /**
+ * Access the physics space to which the object is (or would be) added.
+ *
+ * @return the pre-existing space, or null for none
+ */
public PhysicsSpace getPhysicsSpace() {
return space;
}
+ /**
+ * Serialize this object, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
OutputCapsule oc = ex.getCapsule(this);
@@ -248,6 +337,13 @@ public void write(JmeExporter ex) throws IOException {
oc.write(spatial, "spatial", null);
}
+ /**
+ * De-serialize this control from the specified importer, for example when
+ * loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
InputCapsule ic = im.getCapsule(this);
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/control/BetterCharacterControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/control/BetterCharacterControl.java
index 660b7f559d..027d00f330 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/control/BetterCharacterControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/control/BetterCharacterControl.java
@@ -56,15 +56,18 @@
import java.util.logging.Logger;
/**
- * This is intended to be a replacement for the internal bullet character class.
- * A RigidBody with cylinder collision shape is used and its velocity is set
- * continuously, a ray test is used to check if the character is on the ground.
- *
- * The character keeps his own local coordinate system which adapts based on the
- * gravity working on the character so the character will always stand upright.
- *
- * Forces in the local x/z plane are dampened while those in the local y
- * direction are applied fully (e.g. jumping, falling).
+ * This class is intended to replace the CharacterControl class.
+ *
+ * A rigid body with cylinder collision shape is used and its velocity is set
+ * continuously. A ray test is used to test whether the character is on the
+ * ground.
+ *
+ * The character keeps their own local coordinate system which adapts based on
+ * the gravity working on the character so they will always stand upright.
+ *
+ * Motion in the local X-Z plane is damped.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
@@ -74,10 +77,16 @@ public class BetterCharacterControl extends AbstractPhysicsControl implements Ph
protected PhysicsRigidBody rigidBody;
protected float radius;
protected float height;
+ /**
+ * mass of this character (>0)
+ */
protected float mass;
+ /**
+ * relative height when ducked (1=full height)
+ */
protected float duckedFactor = 0.6f;
/**
- * Local up direction, derived from gravity.
+ * local up direction, derived from gravity
*/
protected final Vector3f localUp = new Vector3f(0, 1, 0);
/**
@@ -94,22 +103,27 @@ public class BetterCharacterControl extends AbstractPhysicsControl implements Ph
*/
protected final Quaternion localForwardRotation = new Quaternion(Quaternion.DIRECTION_Z);
/**
- * Is a z-forward vector based on the view direction and the current local
- * x/z plane.
+ * a Z-forward vector based on the view direction and the local X-Z plane.
*/
protected final Vector3f viewDirection = new Vector3f(0, 0, 1);
/**
- * Stores final spatial location, corresponds to RigidBody location.
+ * spatial location, corresponds to RigidBody location.
*/
protected final Vector3f location = new Vector3f();
/**
- * Stores final spatial rotation, is a z-forward rotation based on the view
- * direction and the current local x/z plane. See also rotatedViewDirection.
+ * spatial rotation, a Z-forward rotation based on the view direction and
+ * local X-Z plane.
+ *
+ * @see #rotatedViewDirection
*/
protected final Quaternion rotation = new Quaternion(Quaternion.DIRECTION_Z);
protected final Vector3f rotatedViewDirection = new Vector3f(0, 0, 1);
protected final Vector3f walkDirection = new Vector3f();
protected final Vector3f jumpForce;
+ /**
+ * X-Z motion damping factor (0→no damping, 1=no external forces,
+ * default=0.9)
+ */
protected float physicsDamping = 0.9f;
protected final Vector3f scale = new Vector3f(1, 1, 1);
protected final Vector3f velocity = new Vector3f();
@@ -119,20 +133,23 @@ public class BetterCharacterControl extends AbstractPhysicsControl implements Ph
protected boolean wantToUnDuck = false;
/**
- * Only used for serialization, do not use this constructor.
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
*/
public BetterCharacterControl() {
jumpForce = new Vector3f();
}
/**
- * Creates a new character with the given properties. Note that to avoid
- * issues the final height when ducking should be larger than 2x radius. The
- * jumpForce will be set to an upwards force of 5x mass.
+ * Instantiate an enabled control with the specified properties.
+ *
+ * The final height when ducking must be larger than 2x radius. The
+ * jumpForce will be set to an upward force of 5x mass.
*
- * @param radius
- * @param height
- * @param mass
+ * @param radius the radius of the character's collision shape (>0)
+ * @param height the height of the character's collision shape
+ * (>2*radius)
+ * @param mass the character's mass (≥0)
*/
public BetterCharacterControl(float radius, float height, float mass) {
this.radius = radius;
@@ -143,6 +160,13 @@ public BetterCharacterControl(float radius, float height, float mass) {
rigidBody.setAngularFactor(0);
}
+ /**
+ * Update this control. Invoked once per frame during the logical-state
+ * update, provided the control is added to a scene graph. Do not invoke
+ * directly from user code.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
@Override
public void update(float tpf) {
super.update(tpf);
@@ -151,16 +175,24 @@ public void update(float tpf) {
applyPhysicsTransform(location, rotation);
}
+ /**
+ * Render this control. Invoked once per view port per frame, provided the
+ * control is added to a scene. Should be invoked only by a subclass or by
+ * the RenderManager.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port to render (not null)
+ */
@Override
public void render(RenderManager rm, ViewPort vp) {
super.render(rm, vp);
}
/**
- * Used internally, don't call manually
+ * Callback from Bullet, invoked just before the physics is stepped.
*
- * @param space
- * @param tpf
+ * @param space the space that is about to be stepped (not null)
+ * @param tpf the time per physics step (in seconds, ≥0)
*/
public void prePhysicsTick(PhysicsSpace space, float tpf) {
checkOnGround();
@@ -172,8 +204,8 @@ public void prePhysicsTick(PhysicsSpace space, float tpf) {
TempVars vars = TempVars.get();
Vector3f currentVelocity = vars.vect2.set(velocity);
-
- // dampen existing x/z forces
+
+ // Attenuate any existing X-Z motion.
float existingLeftVelocity = velocity.dot(localLeft);
float existingForwardVelocity = velocity.dot(localForward);
Vector3f counter = vars.vect1;
@@ -208,20 +240,20 @@ public void prePhysicsTick(PhysicsSpace space, float tpf) {
}
/**
- * Used internally, don't call manually
+ * Callback from Bullet, invoked just after the physics has been stepped.
*
- * @param space
- * @param tpf
+ * @param space the space that was just stepped (not null)
+ * @param tpf the time per physics step (in seconds, ≥0)
*/
public void physicsTick(PhysicsSpace space, float tpf) {
rigidBody.getLinearVelocity(velocity);
}
/**
- * Move the character somewhere. Note the character also takes the location
- * of any spatial its being attached to in the moment it is attached.
+ * Move the character somewhere. Note the character also warps to the
+ * location of the spatial when the control is added.
*
- * @param vec The new character location.
+ * @param vec the desired character location (not null)
*/
public void warp(Vector3f vec) {
setPhysicsLocation(vec);
@@ -239,32 +271,32 @@ public void jump() {
}
/**
- * Set the jump force as a Vector3f. The jump force is local to the
- * characters coordinate system, which normally is always z-forward (in
- * world coordinates, parent coordinates when set to applyLocalPhysics)
+ * Alter the jump force. The jump force is local to the character's
+ * coordinate system, which normally is always z-forward (in world
+ * coordinates, parent coordinates when set to applyLocalPhysics)
*
- * @param jumpForce The new jump force
+ * @param jumpForce the desired jump force (not null, unaffected,
+ * default=5*mass in +Y direction)
*/
public void setJumpForce(Vector3f jumpForce) {
this.jumpForce.set(jumpForce);
}
/**
- * Gets the current jump force. The default is 5 * character mass in y
- * direction.
+ * Access the jump force.
*
- * @return
+ * @return the pre-existing vector (not null)
*/
public Vector3f getJumpForce() {
return jumpForce;
}
/**
- * Check if the character is on the ground. This is determined by a ray test
- * in the center of the character and might return false even if the
- * character is not falling yet.
+ * Test whether the character is supported. Uses a ray test from the center
+ * of the character and might return false even if the character is not
+ * falling yet.
*
- * @return
+ * @return true if on the ground, otherwise false
*/
public boolean isOnGround() {
return onGround;
@@ -274,10 +306,10 @@ public boolean isOnGround() {
* Toggle character ducking. When ducked the characters capsule collision
* shape height will be multiplied by duckedFactor to make the capsule
* smaller. When unducking, the character will check with a ray test if it
- * can in fact unduck and only do so when its possible. You can check the
- * state of the unducking by checking isDucked().
+ * can in fact unduck and only do so when its possible. You can test the
+ * state using isDucked().
*
- * @param enabled
+ * @param enabled true→duck, false→unduck
*/
public void setDucked(boolean enabled) {
if (enabled) {
@@ -298,33 +330,33 @@ public void setDucked(boolean enabled) {
* Check if the character is ducking, either due to user input or due to
* unducking being impossible at the moment (obstacle above).
*
- * @return
+ * @return true if ducking, otherwise false
*/
public boolean isDucked() {
return ducked;
}
/**
- * Sets the height multiplication factor for ducking.
+ * Alter the height multiplier for ducking.
*
- * @param factor The factor by which the height should be multiplied when
- * ducking
+ * @param factor the factor by which the height should be multiplied when
+ * ducking (≥0, ≤1)
*/
public void setDuckedFactor(float factor) {
duckedFactor = factor;
}
/**
- * Gets the height multiplication factor for ducking.
+ * Read the height multiplier for ducking.
*
- * @return
+ * @return the factor (≥0, ≤1)
*/
public float getDuckedFactor() {
return duckedFactor;
}
/**
- * Sets the walk direction of the character. This parameter is framerate
+ * Alter the character's the walk direction. This parameter is framerate
* independent and the character will move continuously in the direction
* given by the vector with the speed given by the vector length in m/s.
*
@@ -335,20 +367,19 @@ public void setWalkDirection(Vector3f vec) {
}
/**
- * Gets the current walk direction and speed of the character. The length of
- * the vector defines the speed.
+ * Read the walk velocity. The length of the vector defines the speed.
*
- * @return
+ * @return the pre-existing vector (not null)
*/
public Vector3f getWalkDirection() {
return walkDirection;
}
/**
- * Sets the view direction for the character. Note this only defines the
- * rotation of the spatial in the local x/z plane of the character.
+ * Alter the character's view direction. Note this only defines the
+ * orientation in the local X-Z plane.
*
- * @param vec
+ * @param vec a direction vector (not null, unaffected)
*/
public void setViewDirection(Vector3f vec) {
viewDirection.set(vec);
@@ -356,10 +387,10 @@ public void setViewDirection(Vector3f vec) {
}
/**
- * Gets the current view direction, note this doesn't need to correspond
- * with the spatials forward direction.
+ * Access the view direction. This need not agree with the spatial's forward
+ * direction.
*
- * @return
+ * @return the pre-existing vector (not null)
*/
public Vector3f getViewDirection() {
return viewDirection;
@@ -367,15 +398,15 @@ public Vector3f getViewDirection() {
/**
* Realign the local forward vector to given direction vector, if null is
- * supplied Vector3f.UNIT_Z is used. Input vector has to be perpendicular to
- * current gravity vector. This normally only needs to be called when the
+ * supplied Vector3f.UNIT_Z is used. The input vector must be perpendicular
+ * to gravity vector. This normally only needs to be invoked when the
* gravity direction changed continuously and the local forward vector is
* off due to drift. E.g. after walking around on a sphere "planet" for a
- * while and then going back to a y-up coordinate system the local z-forward
- * might not be 100% alinged with Z axis.
+ * while and then going back to a Y-up coordinate system the local Z-forward
+ * might not be 100% aligned with the Z axis.
*
- * @param vec The new forward vector, has to be perpendicular to the current
- * gravity vector!
+ * @param vec the desired forward vector (perpendicular to the gravity
+ * vector, may be null, default=0,0,1)
*/
public void resetForward(Vector3f vec) {
if (vec == null) {
@@ -386,23 +417,21 @@ public void resetForward(Vector3f vec) {
}
/**
- * Get the current linear velocity along the three axes of the character.
- * This is prepresented in world coordinates, parent coordinates when the
- * control is set to applyLocalPhysics.
+ * Access the character's linear velocity in physics-space coordinates.
*
- * @return The current linear velocity of the character
+ * @return the pre-existing vector (not null)
*/
public Vector3f getVelocity() {
return velocity;
}
/**
- * Set the gravity for this character. Note that this also realigns the
- * local coordinate system of the character so that continuous changes in
- * gravity direction are possible while maintaining a sensible control over
- * the character.
+ * Alter the gravity acting on this character. Note that this also realigns
+ * the local coordinate system of the character so that continuous changes
+ * in gravity direction are possible while maintaining a sensible control
+ * over the character.
*
- * @param gravity
+ * @param gravity an acceleration vector (not null, unaffected)
*/
public void setGravity(Vector3f gravity) {
rigidBody.setGravity(gravity);
@@ -411,46 +440,48 @@ public void setGravity(Vector3f gravity) {
}
/**
- * Get the current gravity of the character.
+ * Copy the character's gravity vector.
*
- * @return
+ * @return a new acceleration vector (not null)
*/
public Vector3f getGravity() {
return rigidBody.getGravity();
}
/**
- * Get the current gravity of the character.
+ * Copy the character's gravity vector.
*
- * @param store The vector to store the result in
- * @return
+ * @param store storage for the result (modified if not null)
+ * @return an acceleration vector (either the provided storage or a new
+ * vector, not null)
*/
public Vector3f getGravity(Vector3f store) {
return rigidBody.getGravity(store);
}
/**
- * Sets how much the physics forces in the local x/z plane should be
- * dampened.
- * @param physicsDamping The dampening value, 0 = no dampening, 1 = no external force, default = 0.9
+ * Alter how much motion in the local X-Z plane is damped.
+ *
+ * @param physicsDamping the desired damping factor (0→no damping, 1=no
+ * external forces, default=0.9)
*/
public void setPhysicsDamping(float physicsDamping) {
this.physicsDamping = physicsDamping;
}
/**
- * Gets how much the physics forces in the local x/z plane should be
- * dampened.
+ * Read how much motion in the local X-Z plane is damped.
+ *
+ * @return the damping factor (0→no damping, 1=no external forces)
*/
public float getPhysicsDamping() {
return physicsDamping;
}
/**
- * This actually sets a new collision shape to the character to change the
- * height of the capsule.
+ * Alter the height of collision shape.
*
- * @param percent
+ * @param percent the desired height, as a percentage of the full height
*/
protected void setHeightPercent(float percent) {
scale.setY(percent);
@@ -458,7 +489,7 @@ protected void setHeightPercent(float percent) {
}
/**
- * This checks if the character is on the ground by doing a ray test.
+ * Test whether the character is on the ground, by means of a ray test.
*/
protected void checkOnGround() {
TempVars vars = TempVars.get();
@@ -499,12 +530,10 @@ protected boolean checkCanUnDuck() {
}
/**
- * Gets a new collision shape based on the current scale parameter. The
- * created collisionshape is a capsule collision shape that is attached to a
- * compound collision shape with an offset to set the object center at the
- * bottom of the capsule.
+ * Create a collision shape based on the scale parameter. The new shape is a
+ * compound shape containing an offset capsule.
*
- * @return
+ * @return a new compound shape (not null)
*/
protected CollisionShape getShape() {
//TODO: cleanup size mess..
@@ -516,18 +545,18 @@ protected CollisionShape getShape() {
}
/**
- * Gets the scaled height.
+ * Calculate the character's scaled height.
*
- * @return
+ * @return the height
*/
protected float getFinalHeight() {
return height * scale.getY();
}
/**
- * Gets the scaled radius.
+ * Calculate the character's scaled radius.
*
- * @return
+ * @return the radius
*/
protected float getFinalRadius() {
return radius * scale.getZ();
@@ -536,7 +565,7 @@ protected float getFinalRadius() {
/**
* Updates the local coordinate system from the localForward and localUp
* vectors, adapts localForward, sets localForwardRotation quaternion to
- * local z-forward rotation.
+ * local Z-forward rotation.
*/
protected void updateLocalCoordinateSystem() {
//gravity vector has possibly changed, calculate new world forward (UNIT_Z)
@@ -547,8 +576,8 @@ protected void updateLocalCoordinateSystem() {
}
/**
- * Updates the local x/z-flattened view direction and the corresponding
- * rotation quaternion for the spatial.
+ * Updates the local X-Z view direction and the corresponding rotation
+ * quaternion for the spatial.
*/
protected void updateLocalViewDirection() {
//update local rotation quaternion to use for view rotation
@@ -568,7 +597,6 @@ protected void updateLocalViewDirection() {
* set to the new direction
* @param worldUpVector The up vector to use, the result direction will be
* perpendicular to this
- * @return
*/
protected final void calculateNewForward(Quaternion rotation, Vector3f direction, Vector3f worldUpVector) {
if (direction == null) {
@@ -600,10 +628,9 @@ protected final void calculateNewForward(Quaternion rotation, Vector3f direction
}
/**
- * This is implemented from AbstractPhysicsControl and called when the
- * spatial is attached for example.
+ * Translate the character to the specified location.
*
- * @param vec
+ * @param vec desired location (not null, unaffected)
*/
@Override
protected void setPhysicsLocation(Vector3f vec) {
@@ -612,12 +639,12 @@ protected void setPhysicsLocation(Vector3f vec) {
}
/**
- * This is implemented from AbstractPhysicsControl and called when the
- * spatial is attached for example. We don't set the actual physics rotation
- * but the view rotation here. It might actually be altered by the
- * calculateNewForward method.
+ * Rotate the physics object to the specified orientation.
+ *
+ * We don't set the actual physics rotation but the view rotation here. It
+ * might actually be altered by the calculateNewForward method.
*
- * @param quat
+ * @param quat desired orientation (not null, unaffected)
*/
@Override
protected void setPhysicsRotation(Quaternion quat) {
@@ -627,10 +654,9 @@ protected void setPhysicsRotation(Quaternion quat) {
}
/**
- * This is implemented from AbstractPhysicsControl and called when the
- * control is supposed to add all objects to the physics space.
+ * Add all managed physics objects to the specified space.
*
- * @param space
+ * @param space which physics space to add to (not null)
*/
@Override
protected void addPhysics(PhysicsSpace space) {
@@ -642,10 +668,9 @@ protected void addPhysics(PhysicsSpace space) {
}
/**
- * This is implemented from AbstractPhysicsControl and called when the
- * control is supposed to remove all objects from the physics space.
+ * Remove all managed physics objects from the specified space.
*
- * @param space
+ * @param space which physics space to remove from (not null)
*/
@Override
protected void removePhysics(PhysicsSpace space) {
@@ -653,16 +678,33 @@ protected void removePhysics(PhysicsSpace space) {
space.removeTickListener(this);
}
+ /**
+ * Create spatial-dependent data. Invoked when this control is added to a
+ * spatial.
+ *
+ * @param spat the controlled spatial (not null, alias created)
+ */
@Override
protected void createSpatialData(Spatial spat) {
rigidBody.setUserObject(spatial);
}
+ /**
+ * Destroy spatial-dependent data. Invoked when this control is removed from
+ * a spatial.
+ *
+ * @param spat the previously controlled spatial (not null)
+ */
@Override
protected void removeSpatialData(Spatial spat) {
rigidBody.setUserObject(null);
}
+ /**
+ * Create a shallow clone for the JME cloner.
+ *
+ * @return a new control (not null)
+ */
@Override
public Object jmeClone() {
BetterCharacterControl control = new BetterCharacterControl(radius, height, mass);
@@ -671,6 +713,12 @@ public Object jmeClone() {
return control;
}
+ /**
+ * Serialize this control, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
super.write(ex);
@@ -682,6 +730,12 @@ public void write(JmeExporter ex) throws IOException {
oc.write(physicsDamping, "physicsDamping", 0.9f);
}
+ /**
+ * De-serialize this control, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
super.read(im);
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/control/CharacterControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/control/CharacterControl.java
index 5291c4f40f..85dcf1a955 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/control/CharacterControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/control/CharacterControl.java
@@ -190,21 +190,31 @@ public void update(float tpf) {
public void render(RenderManager rm, ViewPort vp) {
}
- public void setPhysicsSpace(PhysicsSpace space) {
- if (space == null) {
- if (this.space != null) {
- this.space.removeCollisionObject(this);
- added = false;
- }
- } else {
- if(this.space == space) return;
- // if this object isn't enabled, it will be added when it will be enabled.
- if (isEnabled()) {
- space.addCollisionObject(this);
- added = true;
- }
+ /**
+ * If enabled, add this control's physics object to the specified physics
+ * space. If not enabled, alter where the object would be added. The object
+ * is removed from any other space it's currently in.
+ *
+ * @param newSpace where to add, or null to simply remove
+ */
+ @Override
+ public void setPhysicsSpace(PhysicsSpace newSpace) {
+ if (space == newSpace) {
+ return;
+ }
+ if (added) {
+ space.removeCollisionObject(this);
+ added = false;
+ }
+ if (newSpace != null && isEnabled()) {
+ newSpace.addCollisionObject(this);
+ added = true;
}
- this.space = space;
+ /*
+ * If this control isn't enabled, its physics object will be
+ * added to the new space when the control becomes enabled.
+ */
+ space = newSpace;
}
public PhysicsSpace getPhysicsSpace() {
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/control/GhostControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/control/GhostControl.java
index 4aae0f9678..7ff51670d2 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/control/GhostControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/control/GhostControl.java
@@ -49,38 +49,82 @@
import java.io.IOException;
/**
- * A GhostControl moves with the spatial it is attached to and can be used to check
- * overlaps with other physics objects (e.g. aggro radius).
+ * A physics control to link a PhysicsGhostObject to a spatial.
+ *
+ * The ghost object moves with the spatial it is attached to and can be used to
+ * detect overlaps with other physics objects (e.g. aggro radius).
+ *
+ * This class is shared between JBullet and Native Bullet.
+ *
* @author normenhansen
*/
public class GhostControl extends PhysicsGhostObject implements PhysicsControl, JmeCloneable {
+ /**
+ * spatial to which this control is added, or null if none
+ */
protected Spatial spatial;
+ /**
+ * true→control is enabled, false→control is disabled
+ */
protected boolean enabled = true;
+ /**
+ * true→body is added to the physics space, false→not added
+ */
protected boolean added = false;
+ /**
+ * space to which the ghost object is (or would be) added
+ */
protected PhysicsSpace space = null;
+ /**
+ * true → physics coordinates match local transform, false →
+ * physics coordinates match world transform
+ */
protected boolean applyLocal = false;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public GhostControl() {
}
+ /**
+ * Instantiate an enabled control with the specified shape.
+ *
+ * @param shape (not null)
+ */
public GhostControl(CollisionShape shape) {
super(shape);
}
+ /**
+ * Test whether physics-space coordinates should match the spatial's local
+ * coordinates.
+ *
+ * @return true if matching local coordinates, false if matching world
+ * coordinates
+ */
public boolean isApplyPhysicsLocal() {
return applyLocal;
}
/**
- * When set to true, the physics coordinates will be applied to the local
- * translation of the Spatial
- * @param applyPhysicsLocal
+ * Alter whether physics-space coordinates should match the spatial's local
+ * coordinates.
+ *
+ * @param applyPhysicsLocal true→match local coordinates,
+ * false→match world coordinates (default=false)
*/
public void setApplyPhysicsLocal(boolean applyPhysicsLocal) {
applyLocal = applyPhysicsLocal;
}
+ /**
+ * Access whichever spatial translation corresponds to the physics location.
+ *
+ * @return the pre-existing vector (not null)
+ */
private Vector3f getSpatialTranslation() {
if (applyLocal) {
return spatial.getLocalTranslation();
@@ -88,6 +132,11 @@ private Vector3f getSpatialTranslation() {
return spatial.getWorldTranslation();
}
+ /**
+ * Access whichever spatial rotation corresponds to the physics rotation.
+ *
+ * @return the pre-existing quaternion (not null)
+ */
private Quaternion getSpatialRotation() {
if (applyLocal) {
return spatial.getLocalRotation();
@@ -95,12 +144,23 @@ private Quaternion getSpatialRotation() {
return spatial.getWorldRotation();
}
+ /**
+ * Clone this control for a different spatial. No longer used as of JME 3.1.
+ *
+ * @param spatial the spatial for the clone to control (or null)
+ * @return a new control (not null)
+ */
@Deprecated
@Override
public Control cloneForSpatial(Spatial spatial) {
throw new UnsupportedOperationException();
}
+ /**
+ * Create a shallow clone for the JME cloner.
+ *
+ * @return a new control (not null)
+ */
@Override
public Object jmeClone() {
GhostControl control = new GhostControl(collisionShape);
@@ -115,11 +175,27 @@ public Object jmeClone() {
return control;
}
+ /**
+ * Callback from {@link com.jme3.util.clone.Cloner} to convert this
+ * shallow-cloned control into a deep-cloned one, using the specified cloner
+ * and original to resolve copied fields.
+ *
+ * @param cloner the cloner that's cloning this control (not null)
+ * @param original the control from which this control was shallow-cloned
+ * (unused)
+ */
@Override
public void cloneFields( Cloner cloner, Object original ) {
this.spatial = cloner.clone(spatial);
}
+ /**
+ * Alter which spatial is controlled. Invoked when the control is added to
+ * or removed from a spatial. Should be invoked only by a subclass or from
+ * Spatial. Do not invoke directly from user code.
+ *
+ * @param spatial the spatial to control (or null)
+ */
public void setSpatial(Spatial spatial) {
this.spatial = spatial;
setUserObject(spatial);
@@ -130,6 +206,15 @@ public void setSpatial(Spatial spatial) {
setPhysicsRotation(getSpatialRotation());
}
+ /**
+ * Enable or disable this control.
+ *
+ * When the control is disabled, the ghost object is removed from physics
+ * space. When the control is enabled again, the object is moved to the
+ * current location of the spatial and then added to the physics space.
+ *
+ * @param enabled true→enable the control, false→disable it
+ */
public void setEnabled(boolean enabled) {
this.enabled = enabled;
if (space != null) {
@@ -147,10 +232,22 @@ public void setEnabled(boolean enabled) {
}
}
+ /**
+ * Test whether this control is enabled.
+ *
+ * @return true if enabled, otherwise false
+ */
public boolean isEnabled() {
return enabled;
}
+ /**
+ * Update this control. Invoked once per frame during the logical-state
+ * update, provided the control is added to a scene. Do not invoke directly
+ * from user code.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
public void update(float tpf) {
if (!enabled) {
return;
@@ -159,29 +256,60 @@ public void update(float tpf) {
setPhysicsRotation(getSpatialRotation());
}
+ /**
+ * Render this control. Invoked once per view port per frame, provided the
+ * control is added to a scene. Should be invoked only by a subclass or by
+ * the RenderManager.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port to render (not null)
+ */
public void render(RenderManager rm, ViewPort vp) {
}
- public void setPhysicsSpace(PhysicsSpace space) {
- if (space == null) {
- if (this.space != null) {
- this.space.removeCollisionObject(this);
- added = false;
- }
- } else {
- if (this.space == space) {
- return;
- }
- space.addCollisionObject(this);
+ /**
+ * If enabled, add this control's physics object to the specified physics
+ * space. If not enabled, alter where the object would be added. The object
+ * is removed from any other space it's currently in.
+ *
+ * @param newSpace where to add, or null to simply remove
+ */
+ @Override
+ public void setPhysicsSpace(PhysicsSpace newSpace) {
+ if (space == newSpace) {
+ return;
+ }
+ if (added) {
+ space.removeCollisionObject(this);
+ added = false;
+ }
+ if (newSpace != null && isEnabled()) {
+ newSpace.addCollisionObject(this);
added = true;
}
- this.space = space;
+ /*
+ * If this control isn't enabled, its physics object will be
+ * added to the new space when the control becomes enabled.
+ */
+ space = newSpace;
}
+ /**
+ * Access the physics space to which the ghost object is (or would be)
+ * added.
+ *
+ * @return the pre-existing space, or null for none
+ */
public PhysicsSpace getPhysicsSpace() {
return space;
}
+ /**
+ * Serialize this control, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
super.write(ex);
@@ -191,6 +319,12 @@ public void write(JmeExporter ex) throws IOException {
oc.write(spatial, "spatial", null);
}
+ /**
+ * De-serialize this control, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
super.read(im);
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/control/KinematicRagdollControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/control/KinematicRagdollControl.java
index 49c0e0f341..8a99ddc226 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/control/KinematicRagdollControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/control/KinematicRagdollControl.java
@@ -43,11 +43,11 @@
import com.jme3.math.*;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort;
+import com.jme3.scene.Mesh;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.util.TempVars;
import com.jme3.util.clone.JmeCloneable;
-
import java.io.IOException;
import java.util.*;
import java.util.logging.Level;
@@ -58,32 +58,39 @@
* use this control you need a model with an AnimControl and a
* SkeletonControl. This control creates collision
- * shapes for each bones of the skeleton when you call
- * spatial.addControl(ragdollControl). BulletAppState allows using bullet physics in an Application.
+ * An app state to manage a single Bullet physics space.
+ *
Multiple BulletAppStates will
- * execute in parallel in this mode.
+ * Parallel threaded mode: physics update and rendering are executed in
+ * parallel, update order is maintained.
*/
PARALLEL,
}
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/PhysicsTickListener.java b/jme3-bullet/src/common/java/com/jme3/bullet/PhysicsTickListener.java
index 0a52a51195..7bbd704aa1 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/PhysicsTickListener.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/PhysicsTickListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,22 +32,29 @@
package com.jme3.bullet;
/**
- * Implement this interface to be called from the physics thread on a physics update.
+ * Callback interface from the physics thread, used to clear/apply forces.
+ *
- * This is only called when the collision will happen based on the collisionGroup and collideWithGroups
- * settings in the PhysicsCollisionObject. That is the case when one of the parties has the
- * collisionGroup of the other in its collideWithGroups set.
- * @param nodeA CollisionObject #1
- * @param nodeB CollisionObject #2
+ * Invoked when two physics objects of the registered group are about to
+ * collide. invoked on the physics thread.
+ * This is only invoked when the collision will happen based on the
+ * collisionGroup and collideWithGroups settings in the
+ * PhysicsCollisionObject. That is the case when one of the parties
+ * has the collisionGroup of the other in its collideWithGroups set.
+ *
+ * @param nodeA collision object #1
+ * @param nodeB collision object #2
* @return true if the collision should happen, false otherwise
*/
public boolean collide(PhysicsCollisionObject nodeA, PhysicsCollisionObject nodeB);
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/collision/PhysicsCollisionListener.java b/jme3-bullet/src/common/java/com/jme3/bullet/collision/PhysicsCollisionListener.java
index b49e3627fd..8bcaf4e22d 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/collision/PhysicsCollisionListener.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/collision/PhysicsCollisionListener.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,16 +32,24 @@
package com.jme3.bullet.collision;
/**
- * Interface for Objects that want to be informed about collision events in the physics space
+ * Interface to receive notifications whenever an object in a particular physics
+ * space collides.
+ *
This should be the case if you imported an animated
* model from Ogre or blender.
Note enabling/disabling the control
- * add/removes it from the physics space
By using this method, bone that are not used to create
- * a shape, are "merged" to their parent to create the collision shape.
There are 2 modes for this control :
+ * This control creates collision shapes for each bones of the skeleton when you + * invoke spatial.addControl(ragdollControl).
+ * There are 2 modes for this control :
+ * This class is shared between JBullet and Native Bullet.
*
- * TODO this needs to be redone with the new animation system
+ * @author Normen Hansen and Rémy Bouquet (Nehon)
*/
@Deprecated
public class KinematicRagdollControl extends AbstractPhysicsControl implements PhysicsCollisionListener, JmeCloneable {
+ /**
+ * list of registered collision listeners
+ */
protected static final Logger logger = Logger.getLogger(KinematicRagdollControl.class.getName());
protected List
+ * Not allowed after attaching the control.
*
- * @param name
+ * @param name the name of the bone to add
*/
public void addBoneName(String name) {
boneList.add(name);
}
+ /**
+ * Generate physics shapes and bone links for the skeleton.
+ *
+ * @param model the spatial with the model's SkeletonControl (not null)
+ */
protected void scanSpatial(Spatial model) {
AnimControl animControl = model.getControl(AnimControl.class);
Map
+ * This interface is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public interface PhysicsControl extends Control {
/**
- * Only used internally, do not call.
- * @param space
+ * If enabled, add this control's physics object to the specified physics
+ * space. In not enabled, alter where the object would be added. The object
+ * is removed from any other space it's currently in.
+ *
+ * @param space where to add, or null to simply remove
*/
public void setPhysicsSpace(PhysicsSpace space);
+ /**
+ * Access the physics space to which the object is (or would be) added.
+ *
+ * @return the pre-existing space, or null for none
+ */
public PhysicsSpace getPhysicsSpace();
/**
- * The physics object is removed from the physics space when the control
- * is disabled. When the control is enabled again the physics object is
- * moved to the current location of the spatial and then added to the physics
- * space. This allows disabling/enabling physics to move the spatial freely.
- * @param state
+ * Enable or disable this control.
+ *
+ * The physics object is removed from its physics space when the control is
+ * disabled. When the control is enabled again, the physics object is moved
+ * to the current location of the spatial and then added to the physics
+ * space.
+ *
+ * @param state true→enable the control, false→disable it
*/
public void setEnabled(boolean state);
/**
- * Returns the current enabled state of the physics control
- * @return current enabled state
+ * Test whether this control is enabled.
+ *
+ * @return true if enabled, otherwise false
*/
public boolean isEnabled();
}
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/control/RigidBodyControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/control/RigidBodyControl.java
index 51675b72a3..6b8714da8d 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/control/RigidBodyControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/control/RigidBodyControl.java
@@ -56,47 +56,91 @@
import java.io.IOException;
/**
+ * A physics control to link a PhysicsRigidBody to a spatial.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public class RigidBodyControl extends PhysicsRigidBody implements PhysicsControl, JmeCloneable {
+ /**
+ * spatial to which this control is added, or null if none
+ */
protected Spatial spatial;
+ /**
+ * true→control is enabled, false→control is disabled
+ */
protected boolean enabled = true;
+ /**
+ * true→body is added to the physics space, false→not added
+ */
protected boolean added = false;
+ /**
+ * space to which the body is (or would be) added
+ */
protected PhysicsSpace space = null;
+ /**
+ * true→body is kinematic, false→body is static or dynamic
+ */
protected boolean kinematicSpatial = true;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public RigidBodyControl() {
}
/**
- * When using this constructor, the CollisionShape for the RigidBody is generated
- * automatically when the Control is added to a Spatial.
- * @param mass When not 0, a HullCollisionShape is generated, otherwise a MeshCollisionShape is used. For geometries with box or sphere meshes the proper box or sphere collision shape is used.
+ * When using this constructor, the CollisionShape for the RigidBody is
+ * generated automatically when the control is added to a spatial.
+ *
+ * @param mass When not 0, a HullCollisionShape is generated, otherwise a
+ * MeshCollisionShape is used. For geometries with box or sphere meshes the
+ * proper box or sphere collision shape is used.
*/
public RigidBodyControl(float mass) {
this.mass = mass;
}
/**
- * Creates a new PhysicsNode with the supplied collision shape and mass 1
- * @param shape
+ * Instantiate an enabled control with mass=1 and the specified collision
+ * shape.
+ *
+ * @param shape the desired shape (not null, alias created)
*/
public RigidBodyControl(CollisionShape shape) {
super(shape);
}
+ /**
+ * Instantiate an enabled control with the specified collision shape and
+ * mass.
+ *
+ * @param shape the desired shape (not null, alias created)
+ * @param mass the desired mass (≥0)
+ */
public RigidBodyControl(CollisionShape shape, float mass) {
super(shape, mass);
}
- @Deprecated
+ /**
+ * Clone this control for a different spatial. No longer used as of JME 3.1.
+ *
+ * @param spatial the spatial for the clone to control (or null)
+ * @return a new control (not null)
+ */
@Override
public Control cloneForSpatial(Spatial spatial) {
throw new UnsupportedOperationException();
}
+ /**
+ * Create a shallow clone for the JME cloner.
+ *
+ * @return a new control (not null)
+ */
@Override
public Object jmeClone() {
RigidBodyControl control = new RigidBodyControl(collisionShape, mass);
@@ -127,11 +171,27 @@ public Object jmeClone() {
return control;
}
+ /**
+ * Callback from {@link com.jme3.util.clone.Cloner} to convert this
+ * shallow-cloned control into a deep-cloned one, using the specified cloner
+ * and original to resolve copied fields.
+ *
+ * @param cloner the cloner that's cloning this control (not null)
+ * @param original the control from which this control was shallow-cloned
+ * (unused)
+ */
@Override
public void cloneFields( Cloner cloner, Object original ) {
this.spatial = cloner.clone(spatial);
}
+ /**
+ * Alter which spatial is controlled. Invoked when the control is added to
+ * or removed from a spatial. Should be invoked only by a subclass or from
+ * Spatial. Do not invoke directly from user code.
+ *
+ * @param spatial the spatial to control (or null)
+ */
public void setSpatial(Spatial spatial) {
this.spatial = spatial;
setUserObject(spatial);
@@ -146,6 +206,10 @@ public void setSpatial(Spatial spatial) {
setPhysicsRotation(getSpatialRotation());
}
+ /**
+ * Set the collision shape based on the controlled spatial and its
+ * descendents.
+ */
protected void createCollisionShape() {
if (spatial == null) {
return;
@@ -168,6 +232,15 @@ protected void createCollisionShape() {
}
}
+ /**
+ * Enable or disable this control.
+ *
+ * When the control is disabled, the body is removed from physics space.
+ * When the control is enabled again, the body is moved to the current
+ * location of the spatial and then added to the physics space.
+ *
+ * @param enabled true→enable the control, false→disable it
+ */
public void setEnabled(boolean enabled) {
this.enabled = enabled;
if (space != null) {
@@ -185,40 +258,62 @@ public void setEnabled(boolean enabled) {
}
}
+ /**
+ * Test whether this control is enabled.
+ *
+ * @return true if enabled, otherwise false
+ */
public boolean isEnabled() {
return enabled;
}
/**
- * Checks if this control is in kinematic spatial mode.
- * @return true if the spatial location is applied to this kinematic rigidbody
+ * Test whether this control is in kinematic mode.
+ *
+ * @return true if the spatial location and rotation are applied to the
+ * rigid body, otherwise false
*/
public boolean isKinematicSpatial() {
return kinematicSpatial;
}
/**
- * Sets this control to kinematic spatial mode so that the spatials transform will
- * be applied to the rigidbody in kinematic mode, defaults to true.
- * @param kinematicSpatial
+ * Enable or disable kinematic mode. In kinematic mode, the spatial's
+ * location and rotation will be applied to the rigid body.
+ *
+ * @param kinematicSpatial true→kinematic, false→dynamic or static
*/
public void setKinematicSpatial(boolean kinematicSpatial) {
this.kinematicSpatial = kinematicSpatial;
}
+ /**
+ * Test whether physics-space coordinates should match the spatial's local
+ * coordinates.
+ *
+ * @return true if matching local coordinates, false if matching world
+ * coordinates
+ */
public boolean isApplyPhysicsLocal() {
return motionState.isApplyPhysicsLocal();
}
/**
- * When set to true, the physics coordinates will be applied to the local
- * translation of the Spatial instead of the world translation.
- * @param applyPhysicsLocal
+ * Alter whether physics-space coordinates should match the spatial's local
+ * coordinates.
+ *
+ * @param applyPhysicsLocal true→match local coordinates,
+ * false→match world coordinates (default=false)
*/
public void setApplyPhysicsLocal(boolean applyPhysicsLocal) {
motionState.setApplyPhysicsLocal(applyPhysicsLocal);
}
+ /**
+ * Access whichever spatial translation corresponds to the physics location.
+ *
+ * @return the pre-existing vector (not null)
+ */
private Vector3f getSpatialTranslation(){
if(motionState.isApplyPhysicsLocal()){
return spatial.getLocalTranslation();
@@ -226,6 +321,11 @@ private Vector3f getSpatialTranslation(){
return spatial.getWorldTranslation();
}
+ /**
+ * Access whichever spatial rotation corresponds to the physics rotation.
+ *
+ * @return the pre-existing quaternion (not null)
+ */
private Quaternion getSpatialRotation(){
if(motionState.isApplyPhysicsLocal()){
return spatial.getLocalRotation();
@@ -233,6 +333,12 @@ private Quaternion getSpatialRotation(){
return spatial.getWorldRotation();
}
+ /**
+ * Update this control. Invoked once per frame, during the logical-state
+ * update, provided the control is added to a scene.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
public void update(float tpf) {
if (enabled && spatial != null) {
if (isKinematic() && kinematicSpatial) {
@@ -244,30 +350,59 @@ public void update(float tpf) {
}
}
+ /**
+ * Render this control. Invoked once per view port per frame, provided the
+ * control is added to a scene. Should be invoked only by a subclass or by
+ * the RenderManager.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port to render (not null)
+ */
public void render(RenderManager rm, ViewPort vp) {
}
- public void setPhysicsSpace(PhysicsSpace space) {
- if (space == null) {
- if (this.space != null) {
- this.space.removeCollisionObject(this);
- added = false;
- }
- } else {
- if (this.space == space) return;
- // if this object isn't enabled, it will be added when it will be enabled.
- if (isEnabled()) {
- space.addCollisionObject(this);
- added = true;
- }
+ /**
+ * If enabled, add this control's body to the specified physics space. In
+ * not enabled, alter where the body would be added. The body is removed
+ * from any other space it's currently in.
+ *
+ * @param newSpace where to add, or null to simply remove
+ */
+ @Override
+ public void setPhysicsSpace(PhysicsSpace newSpace) {
+ if (space == newSpace) {
+ return;
+ }
+ if (added) {
+ space.removeCollisionObject(this);
+ added = false;
}
- this.space = space;
+ if (newSpace != null && isEnabled()) {
+ newSpace.addCollisionObject(this);
+ added = true;
+ }
+ /*
+ * If this control isn't enabled, its body will be
+ * added to the new space when the control becomes enabled.
+ */
+ space = newSpace;
}
+ /**
+ * Access the physics space to which the body is (or would be) added.
+ *
+ * @return the pre-existing space, or null for none
+ */
public PhysicsSpace getPhysicsSpace() {
return space;
}
+ /**
+ * Serialize this control, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
super.write(ex);
@@ -278,6 +413,12 @@ public void write(JmeExporter ex) throws IOException {
oc.write(spatial, "spatial", null);
}
+ /**
+ * De-serialize this control, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
super.read(im);
@@ -288,4 +429,4 @@ public void read(JmeImporter im) throws IOException {
motionState.setApplyPhysicsLocal(ic.readBoolean("applyLocalPhysics", false));
setUserObject(spatial);
}
-}
+}
\ No newline at end of file
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/control/VehicleControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/control/VehicleControl.java
index bccd19941c..ccc90091a9 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/control/VehicleControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/control/VehicleControl.java
@@ -51,39 +51,75 @@
import java.util.Iterator;
/**
+ * A physics control to link a PhysicsVehicle to a spatial.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public class VehicleControl extends PhysicsVehicle implements PhysicsControl, JmeCloneable {
+ /**
+ * spatial to which this control is added, or null if none
+ */
protected Spatial spatial;
+ /**
+ * true→control is enabled, false→control is disabled
+ */
protected boolean enabled = true;
+ /**
+ * space to which the vehicle is (or would be) added
+ */
protected PhysicsSpace space = null;
+ /**
+ * true→vehicle is added to the physics space, false→not added
+ */
protected boolean added = false;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public VehicleControl() {
}
/**
- * Creates a new PhysicsNode with the supplied collision shape
- * @param shape
+ * Instantiate an enabled control with mass=1 and the specified collision
+ * shape.
+ *
+ * @param shape the desired shape (not null, alias created)
*/
public VehicleControl(CollisionShape shape) {
super(shape);
}
+ /**
+ * Instantiate an enabled with the specified collision shape and mass.
+ *
+ * @param shape the desired shape (not null, alias created)
+ * @param mass (>0)
+ */
public VehicleControl(CollisionShape shape, float mass) {
super(shape, mass);
}
+ /**
+ * Test whether physics-space coordinates should match the spatial's local
+ * coordinates.
+ *
+ * @return true if matching local coordinates, false if matching world
+ * coordinates
+ */
public boolean isApplyPhysicsLocal() {
return motionState.isApplyPhysicsLocal();
}
/**
- * When set to true, the physics coordinates will be applied to the local
- * translation of the Spatial
- * @param applyPhysicsLocal
+ * Alter whether physics-space coordinates should match the spatial's local
+ * coordinates.
+ *
+ * @param applyPhysicsLocal true→match local coordinates,
+ * false→match world coordinates (default=false)
*/
public void setApplyPhysicsLocal(boolean applyPhysicsLocal) {
motionState.setApplyPhysicsLocal(applyPhysicsLocal);
@@ -107,13 +143,22 @@ private Quaternion getSpatialRotation(){
return spatial.getWorldRotation();
}
- @Deprecated
+ /**
+ * Clone this control for a different spatial. No longer used as of JME 3.1.
+ *
+ * @param spatial the spatial for the clone to control (or null)
+ * @return a new control (not null)
+ */
@Override
public Control cloneForSpatial(Spatial spatial) {
throw new UnsupportedOperationException();
}
- @Override
+ /**
+ * Create a shallow clone for the JME cloner.
+ *
+ * @return a new control (not null)
+ */
public Object jmeClone() {
VehicleControl control = new VehicleControl(collisionShape, mass);
control.setAngularFactor(getAngularFactor());
@@ -161,6 +206,15 @@ public Object jmeClone() {
return control;
}
+ /**
+ * Callback from {@link com.jme3.util.clone.Cloner} to convert this
+ * shallow-cloned control into a deep-cloned one, using the specified cloner
+ * and original to resolve copied fields.
+ *
+ * @param cloner the cloner that's cloning this control (not null)
+ * @param original the control from which this control was shallow-cloned
+ * (unused)
+ */
@Override
public void cloneFields( Cloner cloner, Object original ) {
this.spatial = cloner.clone(spatial);
@@ -171,6 +225,11 @@ public void cloneFields( Cloner cloner, Object original ) {
}
}
+ /**
+ * Alter which spatial is controlled.
+ *
+ * @param spatial spatial to control (or null)
+ */
public void setSpatial(Spatial spatial) {
this.spatial = spatial;
setUserObject(spatial);
@@ -181,6 +240,15 @@ public void setSpatial(Spatial spatial) {
setPhysicsRotation(getSpatialRotation());
}
+ /**
+ * Enable or disable this control.
+ *
+ * When the control is disabled, the vehicle is removed from physics space.
+ * When the control is enabled again, the physics object is moved to the
+ * spatial's location and then added to the physics space.
+ *
+ * @param enabled true→enable the control, false→disable it
+ */
public void setEnabled(boolean enabled) {
this.enabled = enabled;
if (space != null) {
@@ -198,10 +266,21 @@ public void setEnabled(boolean enabled) {
}
}
+ /**
+ * Test whether this control is enabled.
+ *
+ * @return true if enabled, otherwise false
+ */
public boolean isEnabled() {
return enabled;
}
+ /**
+ * Update this control. Invoked once per frame, during the logical-state
+ * update, provided the control is added to a scene.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
public void update(float tpf) {
if (enabled && spatial != null) {
if (getMotionState().applyTransform(spatial)) {
@@ -213,31 +292,59 @@ public void update(float tpf) {
}
}
+ /**
+ * Render this control. Invoked once per view port per frame, provided the
+ * control is added to a scene. Should be invoked only by a subclass or by
+ * the RenderManager.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port to render (not null)
+ */
public void render(RenderManager rm, ViewPort vp) {
}
- public void setPhysicsSpace(PhysicsSpace space) {
- createVehicle(space);
- if (space == null) {
- if (this.space != null) {
- this.space.removeCollisionObject(this);
- added = false;
- }
- } else {
- if(this.space == space) return;
- // if this object isn't enabled, it will be added when it will be enabled.
- if (isEnabled()) {
- space.addCollisionObject(this);
- added = true;
- }
+ /**
+ * If enabled, add this control's physics object to the specified physics
+ * space. In not enabled, alter where the object would be added. The object
+ * is removed from any other space it's currently in.
+ *
+ * @param newSpace where to add, or null to simply remove
+ */
+ @Override
+ public void setPhysicsSpace(PhysicsSpace newSpace) {
+ if (space == newSpace) {
+ return;
+ }
+ if (added) {
+ space.removeCollisionObject(this);
+ added = false;
+ }
+ if (newSpace != null && isEnabled()) {
+ newSpace.addCollisionObject(this);
+ added = true;
}
- this.space = space;
+ /*
+ * If this control isn't enabled, its physics object will be
+ * added to the new space when the control becomes enabled.
+ */
+ space = newSpace;
}
+ /**
+ * Access the physics space to which the vehicle is (or would be) added.
+ *
+ * @return the pre-existing space, or null for none
+ */
public PhysicsSpace getPhysicsSpace() {
return space;
}
+ /**
+ * Serialize this control, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
super.write(ex);
@@ -247,6 +354,12 @@ public void write(JmeExporter ex) throws IOException {
oc.write(spatial, "spatial", null);
}
+ /**
+ * De-serialize this control, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
super.read(im);
@@ -256,4 +369,4 @@ public void read(JmeImporter im) throws IOException {
motionState.setApplyPhysicsLocal(ic.readBoolean("applyLocalPhysics", false));
setUserObject(spatial);
}
-}
+}
\ No newline at end of file
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/control/ragdoll/HumanoidRagdollPreset.java b/jme3-bullet/src/common/java/com/jme3/bullet/control/ragdoll/HumanoidRagdollPreset.java
index cd9829e612..68696090e3 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/control/ragdoll/HumanoidRagdollPreset.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/control/ragdoll/HumanoidRagdollPreset.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,11 +34,17 @@
import com.jme3.math.FastMath;
/**
+ * Example ragdoll presets for a typical humanoid skeleton.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author Nehon
*/
public class HumanoidRagdollPreset extends RagdollPreset {
+ /**
+ * Initialize the map from bone names to joint presets.
+ */
@Override
protected void initBoneMap() {
boneMap.put("head", new JointPreset(FastMath.QUARTER_PI, -FastMath.QUARTER_PI, FastMath.QUARTER_PI, -FastMath.QUARTER_PI, FastMath.QUARTER_PI, -FastMath.QUARTER_PI));
@@ -59,6 +65,9 @@ protected void initBoneMap() {
}
+ /**
+ * Initialize the lexicon.
+ */
@Override
protected void initLexicon() {
LexiconEntry entry = new LexiconEntry();
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/control/ragdoll/RagdollPreset.java b/jme3-bullet/src/common/java/com/jme3/bullet/control/ragdoll/RagdollPreset.java
index ab0b3ef1ab..637011c955 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/control/ragdoll/RagdollPreset.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/control/ragdoll/RagdollPreset.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -43,14 +43,35 @@
*/
public abstract class RagdollPreset {
+ /**
+ * message logger for this class
+ */
protected static final Logger logger = Logger.getLogger(RagdollPreset.class.getName());
+ /**
+ * map bone names to joint presets
+ */
protected Map
+ * This class is shared between JBullet and Native Bullet.
*
* @author Nehon
*/
public class RagdollUtils {
+ /**
+ * A private constructor to inhibit instantiation of this class.
+ */
+ private RagdollUtils() {
+ }
+
+ /**
+ * Alter the limits of the specified 6-DOF joint.
+ *
+ * @param joint which joint to alter (not null)
+ * @param maxX the maximum rotation on the X axis (in radians)
+ * @param minX the minimum rotation on the X axis (in radians)
+ * @param maxY the maximum rotation on the Y axis (in radians)
+ * @param minY the minimum rotation on the Y axis (in radians)
+ * @param maxZ the maximum rotation on the Z axis (in radians)
+ * @param minZ the minimum rotation on the Z axis (in radians)
+ */
public static void setJointLimit(SixDofJoint joint, float maxX, float minX, float maxY, float minY, float maxZ, float minZ) {
joint.getRotationalLimitMotor(0).setHiLimit(maxX);
@@ -63,22 +82,21 @@ public static void setJointLimit(SixDofJoint joint, float maxX, float minX, floa
joint.getRotationalLimitMotor(2).setLoLimit(minZ);
}
+ /**
+ * Build a map of mesh vertices in a subtree of the scene graph.
+ *
+ * @param model the root of the subtree (may be null)
+ * @return a new map (not null)
+ */
public static Map
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public abstract class AbstractPhysicsDebugControl extends AbstractControl {
private final Quaternion tmp_inverseWorldRotation = new Quaternion();
+ /**
+ * the app state that this control serves
+ */
protected final BulletDebugAppState debugAppState;
+ /**
+ * Instantiate an enabled control to serve the specified debug app state.
+ *
+ * @param debugAppState which app state (not null, alias created)
+ */
public AbstractPhysicsDebugControl(BulletDebugAppState debugAppState) {
this.debugAppState = debugAppState;
}
@@ -55,10 +68,27 @@ public AbstractPhysicsDebugControl(BulletDebugAppState debugAppState) {
@Override
protected abstract void controlUpdate(float tpf);
+ /**
+ * Apply the specified location and orientation to the controlled spatial.
+ *
+ * @param worldLocation location vector (in physics-space coordinates, not
+ * null, unaffected)
+ * @param worldRotation orientation (in physics-space coordinates, not null,
+ * unaffected)
+ */
protected void applyPhysicsTransform(Vector3f worldLocation, Quaternion worldRotation) {
applyPhysicsTransform(worldLocation, worldRotation, this.spatial);
}
+ /**
+ * Apply the specified location and orientation to the specified spatial.
+ *
+ * @param worldLocation location vector (in physics-space coordinates, not
+ * null, unaffected)
+ * @param worldRotation orientation (in physics-space coordinates, not null,
+ * unaffected)
+ * @param spatial where to apply (may be null)
+ */
protected void applyPhysicsTransform(Vector3f worldLocation, Quaternion worldRotation, Spatial spatial) {
if (spatial != null) {
Vector3f localLocation = spatial.getLocalTranslation();
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletCharacterDebugControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletCharacterDebugControl.java
index 43c1cfd366..687d6ba27c 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletCharacterDebugControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletCharacterDebugControl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -42,16 +42,37 @@
import com.jme3.scene.Spatial;
/**
+ * A physics-debug control used to visualize a PhysicsCharacter.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public class BulletCharacterDebugControl extends AbstractPhysicsDebugControl {
+ /**
+ * character to visualize (not null)
+ */
protected final PhysicsCharacter body;
+ /**
+ * temporary storage for physics location
+ */
protected final Vector3f location = new Vector3f();
protected final Quaternion rotation = new Quaternion();
+ /**
+ * shape for which geom was generated
+ */
protected CollisionShape myShape;
+ /**
+ * geometry to visualize myShape (not null)
+ */
protected Spatial geom;
+ /**
+ * Instantiate an enabled control to visualize the specified character.
+ *
+ * @param debugAppState which app state (not null, alias created)
+ * @param body the character to visualize (not null, alias created)
+ */
public BulletCharacterDebugControl(BulletDebugAppState debugAppState, PhysicsCharacter body) {
super(debugAppState);
@@ -61,6 +82,13 @@ public BulletCharacterDebugControl(BulletDebugAppState debugAppState, PhysicsCha
geom.setMaterial(debugAppState.DEBUG_PINK);
}
+ /**
+ * Alter which spatial is controlled. Invoked when the control is added to
+ * or removed from a spatial. Should be invoked only by a subclass or from
+ * Spatial. Do not invoke directly from user code.
+ *
+ * @param spatial the spatial to control (or null)
+ */
@Override
public void setSpatial(Spatial spatial) {
if (spatial != null && spatial instanceof Node) {
@@ -73,6 +101,13 @@ public void setSpatial(Spatial spatial) {
super.setSpatial(spatial);
}
+ /**
+ * Update this control. Invoked once per frame during the logical-state
+ * update, provided the control is enabled and added to a scene. Should be
+ * invoked only by a subclass or by AbstractControl.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
@Override
protected void controlUpdate(float tpf) {
if(myShape != body.getCollisionShape()){
@@ -86,6 +121,14 @@ protected void controlUpdate(float tpf) {
geom.setLocalScale(body.getCollisionShape().getScale());
}
+ /**
+ * Render this control. Invoked once per frame, provided the
+ * control is enabled and added to a scene. Should be invoked only by a
+ * subclass or by AbstractControl.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port to render (not null)
+ */
@Override
protected void controlRender(RenderManager rm, ViewPort vp) {
}
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletDebugAppState.java b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletDebugAppState.java
index 4019d2c2bc..3e2f6aef1b 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletDebugAppState.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletDebugAppState.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -55,31 +55,84 @@
import java.util.logging.Logger;
/**
+ * An app state to manage a debug visualization of a physics space.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public class BulletDebugAppState extends AbstractAppState {
+ /**
+ * message logger for this class
+ */
protected static final Logger logger = Logger.getLogger(BulletDebugAppState.class.getName());
+ /**
+ * limit which objects are visualized, or null to visualize all objects
+ */
protected DebugAppStateFilter filter;
protected Application app;
protected AssetManager assetManager;
+ /**
+ * physics space to visualize (not null)
+ */
protected final PhysicsSpace space;
+ /**
+ * scene-graph node to parent the geometries
+ */
protected final Node physicsDebugRootNode = new Node("Physics Debug Root Node");
+ /**
+ * view port in which to render (not null)
+ */
protected ViewPort viewPort;
protected RenderManager rm;
+ /**
+ * material for inactive rigid bodies
+ */
public Material DEBUG_BLUE;
public Material DEBUG_RED;
+ /**
+ * material for joints
+ */
public Material DEBUG_GREEN;
+ /**
+ * material for ghosts
+ */
public Material DEBUG_YELLOW;
+ /**
+ * material for vehicles and active rigid bodies
+ */
public Material DEBUG_MAGENTA;
+ /**
+ * material for physics characters
+ */
public Material DEBUG_PINK;
+ /**
+ * map rigid bodies to visualizations
+ */
protected HashMap
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public class BulletGhostObjectDebugControl extends AbstractPhysicsDebugControl {
+ /**
+ * ghost object to visualize (not null)
+ */
protected final PhysicsGhostObject body;
+ /**
+ * temporary storage for physics location
+ */
protected final Vector3f location = new Vector3f();
+ /**
+ * temporary storage for physics rotation
+ */
protected final Quaternion rotation = new Quaternion();
+ /**
+ * shape for which geom was generated (not null)
+ */
protected CollisionShape myShape;
+ /**
+ * geometry to visualize myShape (not null)
+ */
protected Spatial geom;
+ /**
+ * Instantiate an enabled control to visualize the specified ghost object.
+ *
+ * @param debugAppState which app state (not null, alias created)
+ * @param body which object to visualize (not null, alias created)
+ */
public BulletGhostObjectDebugControl(BulletDebugAppState debugAppState, PhysicsGhostObject body) {
super(debugAppState);
this.body = body;
@@ -63,6 +87,13 @@ public BulletGhostObjectDebugControl(BulletDebugAppState debugAppState, PhysicsG
geom.setMaterial(debugAppState.DEBUG_YELLOW);
}
+ /**
+ * Alter which spatial is controlled. Invoked when the control is added to
+ * or removed from a spatial. Should be invoked only by a subclass or from
+ * Spatial. Do not invoke directly from user code.
+ *
+ * @param spatial the spatial to control (or null)
+ */
@Override
public void setSpatial(Spatial spatial) {
if (spatial != null && spatial instanceof Node) {
@@ -75,6 +106,13 @@ public void setSpatial(Spatial spatial) {
super.setSpatial(spatial);
}
+ /**
+ * Update this control. Invoked once per frame during the logical-state
+ * update, provided the control is enabled and added to a scene. Should be
+ * invoked only by a subclass or by AbstractControl.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
@Override
protected void controlUpdate(float tpf) {
if (myShape != body.getCollisionShape()) {
@@ -88,6 +126,14 @@ protected void controlUpdate(float tpf) {
geom.setLocalScale(body.getCollisionShape().getScale());
}
+ /**
+ * Render this control. Invoked once per frame, provided the
+ * control is enabled and added to a scene. Should be invoked only by a
+ * subclass or by AbstractControl.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port to render (not null)
+ */
@Override
protected void controlRender(RenderManager rm, ViewPort vp) {
}
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletJointDebugControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletJointDebugControl.java
index 571452811b..7b11a41d68 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletJointDebugControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletJointDebugControl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -43,6 +43,9 @@
import com.jme3.scene.debug.Arrow;
/**
+ * A physics-debug control used to visualize a PhysicsJoint.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
@@ -58,6 +61,12 @@ public class BulletJointDebugControl extends AbstractPhysicsDebugControl {
protected final Vector3f offA = new Vector3f();
protected final Vector3f offB = new Vector3f();
+ /**
+ * Instantiate an enabled control to visualize the specified joint.
+ *
+ * @param debugAppState which app state (not null, alias created)
+ * @param body the joint to visualize (not null, alias created)
+ */
public BulletJointDebugControl(BulletDebugAppState debugAppState, PhysicsJoint body) {
super(debugAppState);
this.body = body;
@@ -71,6 +80,13 @@ public BulletJointDebugControl(BulletDebugAppState debugAppState, PhysicsJoint b
geomB.setMaterial(debugAppState.DEBUG_GREEN);
}
+ /**
+ * Alter which spatial is controlled. Invoked when the control is added to
+ * or removed from a spatial. Should be invoked only by a subclass or from
+ * Spatial. Do not invoke directly from user code.
+ *
+ * @param spatial the spatial to control (or null)
+ */
@Override
public void setSpatial(Spatial spatial) {
if (spatial != null && spatial instanceof Node) {
@@ -85,6 +101,13 @@ public void setSpatial(Spatial spatial) {
super.setSpatial(spatial);
}
+ /**
+ * Update this control. Invoked once per frame during the logical-state
+ * update, provided the control is enabled and added to a scene. Should be
+ * invoked only by a subclass or by AbstractControl.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
@Override
protected void controlUpdate(float tpf) {
body.getBodyA().getPhysicsLocation(a.getTranslation());
@@ -100,6 +123,14 @@ protected void controlUpdate(float tpf) {
arrowB.setArrowExtent(body.getPivotB());
}
+ /**
+ * Render this control. Invoked once per frame, provided the
+ * control is enabled and added to a scene. Should be invoked only by a
+ * subclass or by AbstractControl.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port to render (not null)
+ */
@Override
protected void controlRender(RenderManager rm, ViewPort vp) {
}
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletRigidBodyDebugControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletRigidBodyDebugControl.java
index 3bc10f3e6e..83e5b786fa 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletRigidBodyDebugControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletRigidBodyDebugControl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -42,17 +42,41 @@
import com.jme3.scene.Spatial;
/**
+ * A physics-debug control used to visualize a PhysicsRigidBody.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public class BulletRigidBodyDebugControl extends AbstractPhysicsDebugControl {
+ /**
+ * rigid body to visualize (not null)
+ */
protected final PhysicsRigidBody body;
+ /**
+ * temporary storage for physics location
+ */
protected final Vector3f location = new Vector3f();
+ /**
+ * temporary storage for physics rotation
+ */
protected final Quaternion rotation = new Quaternion();
+ /**
+ * shape for which geom was generated (not null)
+ */
protected CollisionShape myShape;
+ /**
+ * geometry to visualize myShape (not null)
+ */
protected Spatial geom;
+ /**
+ * Instantiate an enabled control to visualize the specified body.
+ *
+ * @param debugAppState which app state (not null, alias created)
+ * @param body which body to visualize (not null, alias created)
+ */
public BulletRigidBodyDebugControl(BulletDebugAppState debugAppState, PhysicsRigidBody body) {
super(debugAppState);
this.body = body;
@@ -62,6 +86,13 @@ public BulletRigidBodyDebugControl(BulletDebugAppState debugAppState, PhysicsRig
geom.setMaterial(debugAppState.DEBUG_BLUE);
}
+ /**
+ * Alter which spatial is controlled. Invoked when the control is added to
+ * or removed from a spatial. Should be invoked only by a subclass or from
+ * Spatial. Do not invoke directly from user code.
+ *
+ * @param spatial the spatial to control (or null)
+ */
@Override
public void setSpatial(Spatial spatial) {
if (spatial != null && spatial instanceof Node) {
@@ -74,6 +105,13 @@ public void setSpatial(Spatial spatial) {
super.setSpatial(spatial);
}
+ /**
+ * Update this control. Invoked once per frame during the logical-state
+ * update, provided the control is enabled and added to a scene. Should be
+ * invoked only by a subclass or by AbstractControl.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
@Override
protected void controlUpdate(float tpf) {
if(myShape != body.getCollisionShape()){
@@ -91,6 +129,14 @@ protected void controlUpdate(float tpf) {
geom.setLocalScale(body.getCollisionShape().getScale());
}
+ /**
+ * Render this control. Invoked once per frame, provided the
+ * control is enabled and added to a scene. Should be invoked only by a
+ * subclass or by AbstractControl.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port to render (not null)
+ */
@Override
protected void controlRender(RenderManager rm, ViewPort vp) {
}
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletVehicleDebugControl.java b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletVehicleDebugControl.java
index f7adf12089..c964c420b7 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletVehicleDebugControl.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/debug/BulletVehicleDebugControl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -43,6 +43,9 @@
import com.jme3.scene.debug.Arrow;
/**
+ * A physics-debug control used to visualize a PhysicsVehicle.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
@@ -53,6 +56,12 @@ public class BulletVehicleDebugControl extends AbstractPhysicsDebugControl {
protected final Vector3f location = new Vector3f();
protected final Quaternion rotation = new Quaternion();
+ /**
+ * Instantiate an enabled control to visualize the specified vehicle.
+ *
+ * @param debugAppState which app state (not null, alias created)
+ * @param body which vehicle to visualize (not null, alias created)
+ */
public BulletVehicleDebugControl(BulletDebugAppState debugAppState, PhysicsVehicle body) {
super(debugAppState);
this.body = body;
@@ -60,6 +69,13 @@ public BulletVehicleDebugControl(BulletDebugAppState debugAppState, PhysicsVehic
createVehicle();
}
+ /**
+ * Alter which spatial is controlled. Invoked when the control is added to
+ * or removed from a spatial. Should be invoked only by a subclass or from
+ * Spatial. Do not invoke directly from user code.
+ *
+ * @param spatial the spatial to control (or null)
+ */
@Override
public void setSpatial(Spatial spatial) {
if (spatial != null && spatial instanceof Node) {
@@ -104,6 +120,13 @@ private void createVehicle() {
}
}
+ /**
+ * Update this control. Invoked once per frame during the logical-state
+ * update, provided the control is enabled and added to a scene. Should be
+ * invoked only by a subclass or by AbstractControl.
+ *
+ * @param tpf the time interval between frames (in seconds, ≥0)
+ */
@Override
protected void controlUpdate(float tpf) {
for (int i = 0; i < body.getNumWheels(); i++) {
@@ -136,6 +159,14 @@ protected void controlUpdate(float tpf) {
applyPhysicsTransform(body.getPhysicsLocation(location), body.getPhysicsRotation(rotation));
}
+ /**
+ * Render this control. Invoked once per frame, provided the
+ * control is enabled and added to a scene. Should be invoked only by a
+ * subclass or by AbstractControl.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port to render (not null)
+ */
@Override
protected void controlRender(RenderManager rm, ViewPort vp) {
}
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/debug/DebugTools.java b/jme3-bullet/src/common/java/com/jme3/bullet/debug/DebugTools.java
index 2e7246b7a7..16bc38ac8c 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/debug/DebugTools.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/debug/DebugTools.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -42,43 +42,129 @@
import com.jme3.scene.debug.Arrow;
/**
+ * Debugging aids.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen
*/
public class DebugTools {
protected final AssetManager manager;
+ /**
+ * unshaded blue material
+ */
public Material DEBUG_BLUE;
+ /**
+ * unshaded red material
+ */
public Material DEBUG_RED;
+ /**
+ * unshaded green material
+ */
public Material DEBUG_GREEN;
+ /**
+ * unshaded yellow material
+ */
public Material DEBUG_YELLOW;
+ /**
+ * unshaded magenta material
+ */
public Material DEBUG_MAGENTA;
+ /**
+ * unshaded pink material
+ */
public Material DEBUG_PINK;
+ /**
+ * node for attaching debug geometries
+ */
public Node debugNode = new Node("Debug Node");
+ /**
+ * mesh for the blue arrow
+ */
public Arrow arrowBlue = new Arrow(Vector3f.ZERO);
+ /**
+ * geometry for the blue arrow
+ */
public Geometry arrowBlueGeom = new Geometry("Blue Arrow", arrowBlue);
+ /**
+ * mesh for the green arrow
+ */
public Arrow arrowGreen = new Arrow(Vector3f.ZERO);
+ /**
+ * geometry for the green arrow
+ */
public Geometry arrowGreenGeom = new Geometry("Green Arrow", arrowGreen);
+ /**
+ * mesh for the red arrow
+ */
public Arrow arrowRed = new Arrow(Vector3f.ZERO);
+ /**
+ * geometry for the red arrow
+ */
public Geometry arrowRedGeom = new Geometry("Red Arrow", arrowRed);
+ /**
+ * mesh for the magenta arrow
+ */
public Arrow arrowMagenta = new Arrow(Vector3f.ZERO);
+ /**
+ * geometry for the magenta arrow
+ */
public Geometry arrowMagentaGeom = new Geometry("Magenta Arrow", arrowMagenta);
+ /**
+ * mesh for the yellow arrow
+ */
public Arrow arrowYellow = new Arrow(Vector3f.ZERO);
+ /**
+ * geometry for the yellow arrow
+ */
public Geometry arrowYellowGeom = new Geometry("Yellow Arrow", arrowYellow);
+ /**
+ * mesh for the pink arrow
+ */
public Arrow arrowPink = new Arrow(Vector3f.ZERO);
+ /**
+ * geometry for the pink arrow
+ */
public Geometry arrowPinkGeom = new Geometry("Pink Arrow", arrowPink);
+ /**
+ * local copy of {@link com.jme3.math.Vector3f#UNIT_X}
+ */
protected static final Vector3f UNIT_X_CHECK = new Vector3f(1, 0, 0);
+ /**
+ * local copy of {@link com.jme3.math.Vector3f#UNIT_Y}
+ */
protected static final Vector3f UNIT_Y_CHECK = new Vector3f(0, 1, 0);
+ /**
+ * local copy of {@link com.jme3.math.Vector3f#UNIT_Z}
+ */
protected static final Vector3f UNIT_Z_CHECK = new Vector3f(0, 0, 1);
+ /**
+ * local copy of {@link com.jme3.math.Vector3f#UNIT_XYZ}
+ */
protected static final Vector3f UNIT_XYZ_CHECK = new Vector3f(1, 1, 1);
+ /**
+ * local copy of {@link com.jme3.math.Vector3f#ZERO}
+ */
protected static final Vector3f ZERO_CHECK = new Vector3f(0, 0, 0);
+ /**
+ * Instantiate a set of debug tools.
+ *
+ * @param manager for loading assets (not null, alias created)
+ */
public DebugTools(AssetManager manager) {
this.manager = manager;
setupMaterials();
setupDebugNode();
}
+ /**
+ * Render all the debug geometries to the specified view port.
+ *
+ * @param rm the render manager (not null)
+ * @param vp the view port (not null)
+ */
public void show(RenderManager rm, ViewPort vp) {
if (!Vector3f.UNIT_X.equals(UNIT_X_CHECK) || !Vector3f.UNIT_Y.equals(UNIT_Y_CHECK) || !Vector3f.UNIT_Z.equals(UNIT_Z_CHECK)
|| !Vector3f.UNIT_XYZ.equals(UNIT_XYZ_CHECK) || !Vector3f.ZERO.equals(ZERO_CHECK)) {
@@ -94,36 +180,75 @@ public void show(RenderManager rm, ViewPort vp) {
rm.renderScene(debugNode, vp);
}
+ /**
+ * Alter the location and extent of the blue arrow.
+ *
+ * @param location the coordinates of the tail (not null, unaffected)
+ * @param extent the offset of the tip from the tail (not null, unaffected)
+ */
public void setBlueArrow(Vector3f location, Vector3f extent) {
arrowBlueGeom.setLocalTranslation(location);
arrowBlue.setArrowExtent(extent);
}
+ /**
+ * Alter the location and extent of the green arrow.
+ *
+ * @param location the coordinates of the tail (not null, unaffected)
+ * @param extent the offset of the tip from the tail (not null, unaffected)
+ */
public void setGreenArrow(Vector3f location, Vector3f extent) {
arrowGreenGeom.setLocalTranslation(location);
arrowGreen.setArrowExtent(extent);
}
+ /**
+ * Alter the location and extent of the red arrow.
+ *
+ * @param location the coordinates of the tail (not null, unaffected)
+ * @param extent the offset of the tip from the tail (not null, unaffected)
+ */
public void setRedArrow(Vector3f location, Vector3f extent) {
arrowRedGeom.setLocalTranslation(location);
arrowRed.setArrowExtent(extent);
}
+ /**
+ * Alter the location and extent of the magenta arrow.
+ *
+ * @param location the coordinates of the tail (not null, unaffected)
+ * @param extent the offset of the tip from the tail (not null, unaffected)
+ */
public void setMagentaArrow(Vector3f location, Vector3f extent) {
arrowMagentaGeom.setLocalTranslation(location);
arrowMagenta.setArrowExtent(extent);
}
+ /**
+ * Alter the location and extent of the yellow arrow.
+ *
+ * @param location the coordinates of the tail (not null, unaffected)
+ * @param extent the offset of the tip from the tail (not null, unaffected)
+ */
public void setYellowArrow(Vector3f location, Vector3f extent) {
arrowYellowGeom.setLocalTranslation(location);
arrowYellow.setArrowExtent(extent);
}
+ /**
+ * Alter the location and extent of the pink arrow.
+ *
+ * @param location the coordinates of the tail (not null, unaffected)
+ * @param extent the offset of the tip from the tail (not null, unaffected)
+ */
public void setPinkArrow(Vector3f location, Vector3f extent) {
arrowPinkGeom.setLocalTranslation(location);
arrowPink.setArrowExtent(extent);
}
+ /**
+ * Attach all the debug geometries to the debug node.
+ */
protected void setupDebugNode() {
arrowBlueGeom.setMaterial(DEBUG_BLUE);
arrowGreenGeom.setMaterial(DEBUG_GREEN);
@@ -139,6 +264,9 @@ protected void setupDebugNode() {
debugNode.attachChild(arrowPinkGeom);
}
+ /**
+ * Initialize all the DebugTools materials.
+ */
protected void setupMaterials() {
DEBUG_BLUE = new Material(manager, "Common/MatDefs/Misc/Unshaded.j3md");
DEBUG_BLUE.getAdditionalRenderState().setWireframe(true);
diff --git a/jme3-bullet/src/common/java/com/jme3/bullet/util/CollisionShapeFactory.java b/jme3-bullet/src/common/java/com/jme3/bullet/util/CollisionShapeFactory.java
index de28aba02d..19e14d49be 100644
--- a/jme3-bullet/src/common/java/com/jme3/bullet/util/CollisionShapeFactory.java
+++ b/jme3-bullet/src/common/java/com/jme3/bullet/util/CollisionShapeFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -44,17 +44,21 @@
import java.util.LinkedList;
/**
+ * A utility class for generating collision shapes from Spatials.
+ *
+ * This class is shared between JBullet and Native Bullet.
*
* @author normenhansen, tim8dev
*/
public class CollisionShapeFactory {
/**
- * returns the correct transform for a collisionshape in relation
- * to the ancestor for which the collisionshape is generated
+ * Calculate the correct transform for a collision shape relative to the
+ * ancestor for which the shape was generated.
+ *
* @param spat
* @param parent
- * @return
+ * @return a new instance (not null)
*/
private static Transform getTransform(Spatial spat, Spatial parent) {
Transform shapeTransform = new Transform();
@@ -135,30 +139,48 @@ private static CompoundCollisionShape createCompoundShape(
}
/**
- * This type of collision shape is mesh-accurate and meant for immovable "world objects".
- * Examples include terrain, houses or whole shooter levels.
+ * Objects with "mesh" type collision shape will not collide with each
+ * other.
+ *
+ * @param rootNode the node on which to base the shape (not null)
+ * @return a new shape (not null)
*/
private static CompoundCollisionShape createMeshCompoundShape(Node rootNode) {
return createCompoundShape(rootNode, new CompoundCollisionShape(), true);
}
/**
- * This type of collision shape creates a CompoundShape made out of boxes that
- * are based on the bounds of the Geometries in the tree.
- * @param rootNode
- * @return
+ * This type of collision shape creates a CompoundShape made out of boxes
+ * that are based on the bounds of the Geometries in the tree.
+ *
+ * @param rootNode the node on which to base the shape (not null)
+ * @return a new shape (not null)
*/
private static CompoundCollisionShape createBoxCompoundShape(Node rootNode) {
return createCompoundShape(rootNode, new CompoundCollisionShape(), false);
}
/**
- * This type of collision shape is mesh-accurate and meant for immovable "world objects".
- * Examples include terrain, houses or whole shooter levels.
+ * This type of collision shape is mesh-accurate and meant for immovable
+ * "world objects". Examples include terrain, houses or whole shooter
+ * levels.
+ *
+ * Objects with "mesh" type collision shape will not collide with each
+ * other.
+ *
+ * Creates a HeightfieldCollisionShape if the supplied spatial is a
+ * TerrainQuad.
+ *
+ * @param spatial the spatial on which to base the shape (not null)
+ * @return A MeshCollisionShape or a CompoundCollisionShape with
+ * MeshCollisionShapes as children if the supplied spatial is a Node. A
+ * HeightieldCollisionShape if a TerrainQuad was supplied.
*/
public static CollisionShape createMeshShape(Spatial spatial) {
if (spatial instanceof TerrainQuad) {
@@ -177,9 +199,14 @@ public static CollisionShape createMeshShape(Spatial spatial) {
}
/**
- * This method creates a hull shape for the given Spatial.
+ * For mesh-accurate animated meshes (CPU intense!) use GImpact shapes.
+ *
+ * @param spatial the spatial on which to base the shape (not null)
+ * @return a HullCollisionShape (if spatial is a Geometry) or a
+ * CompoundCollisionShape with HullCollisionShapes as children (if spatial
+ * is a Node)
*/
public static CollisionShape createDynamicMeshShape(Spatial spatial) {
if (spatial instanceof Geometry) {
@@ -192,6 +219,14 @@ public static CollisionShape createDynamicMeshShape(Spatial spatial) {
}
+ /**
+ * Create a box shape for the given Spatial.
+ *
+ * @param spatial the spatial on which to base the shape (not null)
+ * @return a BoxCollisionShape (if spatial is a Geometry) or a
+ * CompoundCollisionShape with BoxCollisionShapes as children (if spatial is
+ * a Node)
+ */
public static CollisionShape createBoxShape(Spatial spatial) {
if (spatial instanceof Geometry) {
return createSingleBoxShape((Geometry) spatial, spatial);
@@ -203,9 +238,12 @@ public static CollisionShape createBoxShape(Spatial spatial) {
}
/**
- * This type of collision shape is mesh-accurate and meant for immovable "world objects".
- * Examples include terrain, houses or whole shooter levels.
+ * Objects with "mesh" type collision shape will not collide with each
+ * other.
*/
private static MeshCollisionShape createSingleMeshShape(Geometry geom, Spatial parent) {
Mesh mesh = geom.getMesh();
@@ -220,9 +258,13 @@ private static MeshCollisionShape createSingleMeshShape(Geometry geom, Spatial p
}
/**
- * Uses the bounding box of the supplied spatial to create a BoxCollisionShape
- * @param spatial
- * @return BoxCollisionShape with the size of the spatials BoundingBox
+ * Use the bounding box of the supplied spatial to create a
+ * BoxCollisionShape.
+ *
+ * @param spatial the spatial on which to base the shape (not null)
+ * @param parent unused
+ * @return a new shape with the dimensions of the spatial's bounding box
+ * (not null)
*/
private static BoxCollisionShape createSingleBoxShape(Spatial spatial, Spatial parent) {
//TODO: using world bound here instead of "local world" bound...
@@ -232,7 +274,10 @@ private static BoxCollisionShape createSingleBoxShape(Spatial spatial, Spatial p
}
/**
- * This method creates a hull collision shape for the given mesh. PhysicsSpace - The central jbullet-jme physics space
+ * This method is invoked from native code.
+ *
+ * @param timeStep the time per physics step (in seconds, ≥0)
+ */
private void preTick_native(float f) {
- AppTask task = pQueue.poll();
- task = pQueue.poll();
- while (task != null) {
- while (task.isCancelled()) {
- task = pQueue.poll();
- }
- try {
+ AppTask task;
+ while((task=pQueue.poll())!=null){
+ if(task.isCancelled())continue;
+ try{
task.invoke();
} catch (Exception ex) {
logger.log(Level.SEVERE, null, ex);
}
- task = pQueue.poll();
}
+
for (Iterator
+ * This method is invoked from native code.
+ *
+ * @param timeStep the time per physics step (in seconds, ≥0)
+ */
private void postTick_native(float f) {
for (Iterator
+ * Whenever a rigid body is added to a space, the body's gravity gets set to
+ * that of the space. Thus it makes sense to set the space's vector before
+ * adding any bodies to the space.
*
- * @param gravity
+ * @param gravity the desired acceleration vector (not null, unaffected)
*/
public void setGravity(Vector3f gravity) {
this.gravity.set(gravity);
@@ -712,8 +888,17 @@ public void setGravity(Vector3f gravity) {
private native void setGravity(long spaceId, Vector3f gravity);
- //TODO: getGravity
+ /**
+ * copy of gravity-acceleration vector (default is 9.81 in the -Y direction,
+ * corresponding to Earth-normal in MKS units)
+ */
private final Vector3f gravity = new Vector3f(0,-9.81f,0);
+ /**
+ * Copy the gravitational acceleration acting on newly-added bodies.
+ *
+ * @param gravity storage for the result (not null, modified)
+ * @return acceleration (in the vector provided)
+ */
public Vector3f getGravity(Vector3f gravity) {
return gravity.set(this.gravity);
}
@@ -733,57 +918,89 @@ public Vector3f getGravity(Vector3f gravity) {
// }
//
/**
- * Adds the specified listener to the physics tick listeners. The listeners
- * are called on each physics step, which is not necessarily each frame but
- * is determined by the accuracy of the physics space.
+ * Register the specified tick listener with this space.
+ *
+ * Tick listeners are notified before and after each physics step. A physics
+ * step is not necessarily the same as a frame; it is more influenced by the
+ * accuracy of the physics space.
+ *
+ * @see #setAccuracy(float)
*
- * @param listener
+ * @param listener the listener to register (not null)
*/
public void addTickListener(PhysicsTickListener listener) {
tickListeners.add(listener);
}
+ /**
+ * De-register the specified tick listener.
+ *
+ * @see #addTickListener(com.jme3.bullet.PhysicsTickListener)
+ * @param listener the listener to de-register (not null)
+ */
public void removeTickListener(PhysicsTickListener listener) {
tickListeners.remove(listener);
}
/**
- * Adds a CollisionListener that will be informed about collision events
+ * Register the specified collision listener with this space.
+ *
+ * Collision listeners are notified when collisions occur in the space.
*
- * @param listener the CollisionListener to add
+ * @param listener the listener to register (not null, alias created)
*/
public void addCollisionListener(PhysicsCollisionListener listener) {
collisionListeners.add(listener);
}
/**
- * Removes a CollisionListener from the list
+ * De-register the specified collision listener.
*
- * @param listener the CollisionListener to remove
+ * @see
+ * #addCollisionListener(com.jme3.bullet.collision.PhysicsCollisionListener)
+ * @param listener the listener to de-register (not null)
*/
public void removeCollisionListener(PhysicsCollisionListener listener) {
collisionListeners.remove(listener);
}
/**
- * Adds a listener for a specific collision group, such a listener can
- * disable collisions when they happen.
+ * Such a listener can disable collisions when they occur. There can be only
+ * one listener per collision group per space.
*
- * @param listener
- * @param collisionGroup
+ * @param listener the listener to register (not null)
+ * @param collisionGroup which group it should listen for (bit mask with
+ * exactly one bit set)
*/
public void addCollisionGroupListener(PhysicsCollisionGroupListener listener, int collisionGroup) {
collisionGroupListeners.put(collisionGroup, listener);
}
+ /**
+ * De-register the specified collision-group listener.
+ *
+ * @see
+ * #addCollisionGroupListener(com.jme3.bullet.collision.PhysicsCollisionGroupListener,
+ * int)
+ * @param collisionGroup the group of the listener to de-register (bit mask
+ * with exactly one bit set)
+ */
public void removeCollisionGroupListener(int collisionGroup) {
collisionGroupListeners.remove(collisionGroup);
}
/**
- * Performs a ray collision test and returns the results as a list of
- * PhysicsRayTestResults ordered by it hitFraction (lower to higher)
+ * Perform a ray-collision test and return the results as a list of
+ * PhysicsRayTestResults sorted by ascending hitFraction.
+ *
+ * @param from the starting location (physics-space coordinates, not null,
+ * unaffected)
+ * @param to the ending location (in physics-space coordinates, not null,
+ * unaffected)
+ * @return a new list of results (not null)
*/
public List rayTest(Vector3f from, Vector3f to) {
List
+ * The starting and ending locations must be at least 0.4f physics-space
+ * units apart.
+ *
+ * A sweep test will miss a collision if it starts inside an object and
+ * sweeps away from the object's center.
+ *
+ * @param shape the shape to sweep (not null)
+ * @param start the starting physics-space transform (not null)
+ * @param end the ending physics-space transform (not null)
+ * @return a new list of results
*/
public List
+ * The starting and ending locations must be at least 0.4f physics-space
+ * units apart.
+ *
+ * A sweep test will miss a collision if it starts inside an object and
+ * sweeps away from the object's center.
+ *
+ * @param shape the shape to sweep (not null)
+ * @param start the starting physics-space transform (not null)
+ * @param end the ending physics-space transform (not null)
+ * @param results the list to hold results (not null, modified)
+ * @return results
+ */
public List
+ * The starting and ending locations must be at least 0.4f physics-space
+ * units apart.
+ *
+ * A sweep test will miss a collision if it starts inside an object and
+ * sweeps away from the object's center.
+ *
+ * @param shape the shape to sweep (not null)
+ * @param start the starting physics-space transform (not null)
+ * @param end the ending physics-space transform (not null)
+ * @param results the list to hold results (not null, modified)
+ * @param allowedCcdPenetration true→allow, false→disallow
+ * @return results
*/
public List
+ * Extra physics steps help maintain determinism when the render fps drops
+ * below 1/accuracy. For example a value of 2 can compensate for frame rates
+ * as low as 30fps, assuming the physics has an accuracy of 1/60 sec.
+ *
+ * Setting this value too high can depress the frame rate.
*
- * @param steps The maximum number of extra steps, default is 4.
+ * @param steps the desired maximum number of steps per frame (≥1,
+ * default=4)
*/
public void setMaxSubSteps(int steps) {
maxSubSteps = steps;
}
/**
- * get the current accuracy of the physics computation
+ * Read the accuracy (time step) of the physics simulation.
*
- * @return the current accuracy
+ * @return the timestep (in seconds, >0)
*/
public float getAccuracy() {
return accuracy;
}
/**
- * sets the accuracy of the physics computation, default=1/60s
+ * In general, the smaller the time step, the more accurate (and
+ * compute-intensive) the simulation will be. Bullet works best with a
+ * time step of no more than 1/60 second.
*
- * @param accuracy
+ * @param accuracy the desired time step (in seconds, >0, default=1/60)
*/
public void setAccuracy(float accuracy) {
this.accuracy = accuracy;
}
+ /**
+ * Access the minimum coordinate values for this space.
+ *
+ * @return the pre-existing vector
+ */
public Vector3f getWorldMin() {
return worldMin;
}
/**
- * only applies for AXIS_SWEEP broadphase
+ * Alter the minimum coordinate values for this space. (only affects
+ * AXIS_SWEEP broadphase algorithms)
*
- * @param worldMin
+ * @param worldMin the desired minimum coordinate values (not null,
+ * unaffected)
*/
public void setWorldMin(Vector3f worldMin) {
this.worldMin.set(worldMin);
}
+ /**
+ * Access the maximum coordinate values for this space.
+ *
+ * @return the pre-existing vector (not null)
+ */
public Vector3f getWorldMax() {
return worldMax;
}
@@ -1007,11 +1308,11 @@ public void setWorldMax(Vector3f worldMax) {
}
/**
- * Set the number of iterations used by the contact solver.
- *
- * The default is 10. Use 4 for low quality, 20 for high quality.
- *
- * @param numIterations The number of iterations used by the contact & constraint solver.
+ * Alter the number of iterations used by the contact-and-constraint solver.
+ *
+ * Use 4 for low quality, 20 for high quality.
+ *
+ * @param numIterations the desired number of iterations (≥1, default=10)
*/
public void setSolverNumIterations(int numIterations) {
this.solverNumIterations = numIterations;
@@ -1019,9 +1320,9 @@ public void setSolverNumIterations(int numIterations) {
}
/**
- * Get the number of iterations used by the contact solver.
- *
- * @return The number of iterations used by the contact & constraint solver.
+ * Read the number of iterations used by the contact-and-constraint solver.
+ *
+ * @return the number of iterations used
*/
public int getSolverNumIterations() {
return solverNumIterations;
@@ -1032,28 +1333,40 @@ public int getSolverNumIterations() {
public static native void initNativePhysics();
/**
- * interface with Broadphase types
+ * Enumerate the available acceleration structures for broadphase collision
+ * detection.
*/
public enum BroadphaseType {
/**
- * basic Broadphase
+ * btSimpleBroadphase: a brute-force reference implementation for
+ * debugging purposes
*/
SIMPLE,
/**
- * better Broadphase, needs worldBounds , max Object number = 16384
+ * btAxisSweep3: uses incremental 3-D sweep and prune, requires world
+ * bounds, limited to 16_384 objects
*/
AXIS_SWEEP_3,
/**
- * better Broadphase, needs worldBounds , max Object number = 65536
+ * bt32BitAxisSweep3: uses incremental 3-D sweep and prune, requires
+ * world bounds, limited to 65_536 objects
*/
AXIS_SWEEP_3_32,
/**
- * Broadphase allowing quicker adding/removing of physics objects
+ * btDbvtBroadphase: uses a fast, dynamic bounding-volume hierarchy
+ * based on AABB tree to allow quicker addition/removal of physics
+ * objects
*/
DBVT;
}
+ /**
+ * Finalize this physics space just before it is destroyed. Should be
+ * invoked only by a subclass or by the garbage collector.
+ *
+ * @throws Throwable ignored by the garbage collector
+ */
@Override
protected void finalize() throws Throwable {
super.finalize();
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsCollisionEvent.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsCollisionEvent.java
index 0022ebd1cb..bb62760020 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsCollisionEvent.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsCollisionEvent.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,21 +36,53 @@
import java.util.EventObject;
/**
- * A CollisionEvent stores all information about a collision in the PhysicsWorld.
- * Do not store this Object, as it will be reused after the collision() method has been called.
- * Get/reference all data you need in the collide method.
+ * Describe a collision in the physics world.
+ *
+ * Do not retain this object, as it will be reused after the collision() method
+ * returns. Copy any data you need during the collide() method.
+ *
* @author normenhansen
*/
public class PhysicsCollisionEvent extends EventObject {
+ /**
+ * type value to indicate a new event
+ */
public static final int TYPE_ADDED = 0;
+ /**
+ * type value to indicate an event that has been added to a PhysicsSpace
+ * queue
+ */
public static final int TYPE_PROCESSED = 1;
+ /**
+ * type value to indicate a cleaned/destroyed event
+ */
public static final int TYPE_DESTROYED = 2;
+ /**
+ * type value that indicates the event's status
+ */
private int type;
+ /**
+ * 1st involved object
+ */
private PhysicsCollisionObject nodeA;
+ /**
+ * 2nd involved object
+ */
private PhysicsCollisionObject nodeB;
+ /**
+ * Bullet identifier of the btManifoldPoint
+ */
private long manifoldPointObjectId = 0;
+ /**
+ * Instantiate a collision event.
+ *
+ * @param type event type (0=added/1=processed/2=destroyed)
+ * @param nodeA 1st involved object (alias created)
+ * @param nodeB 2nd involved object (alias created)
+ * @param manifoldPointObjectId Bullet identifier of the btManifoldPoint
+ */
public PhysicsCollisionEvent(int type, PhysicsCollisionObject nodeA, PhysicsCollisionObject nodeB, long manifoldPointObjectId) {
super(nodeA);
this.type = type;
@@ -58,9 +90,9 @@ public PhysicsCollisionEvent(int type, PhysicsCollisionObject nodeA, PhysicsColl
this.nodeB = nodeB;
this.manifoldPointObjectId = manifoldPointObjectId;
}
-
+
/**
- * used by event factory, called when event is destroyed
+ * Destroy this event.
*/
public void clean() {
source = null;
@@ -71,7 +103,12 @@ public void clean() {
}
/**
- * used by event factory, called when event reused
+ * Reuse this event.
+ *
+ * @param type event type (added/processed/destroyed)
+ * @param source 1st involved object (alias created)
+ * @param nodeB 2nd involved object (alias created)
+ * @param manifoldPointObjectId Bullet identifier
*/
public void refactor(int type, PhysicsCollisionObject source, PhysicsCollisionObject nodeB, long manifoldPointObjectId) {
this.source = source;
@@ -81,12 +118,19 @@ public void refactor(int type, PhysicsCollisionObject source, PhysicsCollisionOb
this.manifoldPointObjectId = manifoldPointObjectId;
}
+ /**
+ * Read the type of event.
+ *
+ * @return added/processed/destroyed
+ */
public int getType() {
return type;
}
/**
- * @return A Spatial if the UserObject of the PhysicsCollisionObject is a Spatial
+ * Access the user object of collision object A, provided it's a Spatial.
+ *
+ * @return the pre-existing Spatial, or null if none
*/
public Spatial getNodeA() {
if (nodeA.getUserObject() instanceof Spatial) {
@@ -96,7 +140,9 @@ public Spatial getNodeA() {
}
/**
- * @return A Spatial if the UserObject of the PhysicsCollisionObject is a Spatial
+ * Access the user object of collision object B, provided it's a Spatial.
+ *
+ * @return the pre-existing Spatial, or null if none
*/
public Spatial getNodeB() {
if (nodeB.getUserObject() instanceof Spatial) {
@@ -105,139 +151,286 @@ public Spatial getNodeB() {
return null;
}
+ /**
+ * Access collision object A.
+ *
+ * @return the pre-existing object (not null)
+ */
public PhysicsCollisionObject getObjectA() {
return nodeA;
}
+ /**
+ * Access collision object B.
+ *
+ * @return the pre-existing object (not null)
+ */
public PhysicsCollisionObject getObjectB() {
return nodeB;
}
+ /**
+ * Read the collision's applied impulse.
+ *
+ * @return impulse
+ */
public float getAppliedImpulse() {
return getAppliedImpulse(manifoldPointObjectId);
}
private native float getAppliedImpulse(long manifoldPointObjectId);
+ /**
+ * Read the collision's applied lateral impulse #1.
+ *
+ * @return impulse
+ */
public float getAppliedImpulseLateral1() {
return getAppliedImpulseLateral1(manifoldPointObjectId);
}
private native float getAppliedImpulseLateral1(long manifoldPointObjectId);
+ /**
+ * Read the collision's applied lateral impulse #2.
+ *
+ * @return impulse
+ */
public float getAppliedImpulseLateral2() {
return getAppliedImpulseLateral2(manifoldPointObjectId);
}
private native float getAppliedImpulseLateral2(long manifoldPointObjectId);
+ /**
+ * Read the collision's combined friction.
+ *
+ * @return friction
+ */
public float getCombinedFriction() {
return getCombinedFriction(manifoldPointObjectId);
}
private native float getCombinedFriction(long manifoldPointObjectId);
+ /**
+ * Read the collision's combined restitution.
+ *
+ * @return restitution
+ */
public float getCombinedRestitution() {
return getCombinedRestitution(manifoldPointObjectId);
}
private native float getCombinedRestitution(long manifoldPointObjectId);
+ /**
+ * Read the collision's distance #1.
+ *
+ * @return distance
+ */
public float getDistance1() {
return getDistance1(manifoldPointObjectId);
}
private native float getDistance1(long manifoldPointObjectId);
+ /**
+ * Read the collision's index 0.
+ *
+ * @return index
+ */
public int getIndex0() {
return getIndex0(manifoldPointObjectId);
}
private native int getIndex0(long manifoldPointObjectId);
+ /**
+ * Read the collision's index 1.
+ *
+ * @return index
+ */
public int getIndex1() {
return getIndex1(manifoldPointObjectId);
}
private native int getIndex1(long manifoldPointObjectId);
+ /**
+ * Copy the collision's lateral friction direction #1.
+ *
+ * @return a new vector (not null)
+ */
public Vector3f getLateralFrictionDir1() {
return getLateralFrictionDir1(new Vector3f());
}
+ /**
+ * Copy the collision's lateral friction direction #1.
+ *
+ * @param lateralFrictionDir1 storage for the result (not null, modified)
+ * @return direction vector (not null)
+ */
public Vector3f getLateralFrictionDir1(Vector3f lateralFrictionDir1) {
getLateralFrictionDir1(manifoldPointObjectId, lateralFrictionDir1);
return lateralFrictionDir1;
}
private native void getLateralFrictionDir1(long manifoldPointObjectId, Vector3f lateralFrictionDir1);
+ /**
+ * Copy the collision's lateral friction direction #2.
+ *
+ * @return a new vector
+ */
public Vector3f getLateralFrictionDir2() {
return getLateralFrictionDir2(new Vector3f());
}
+ /**
+ * Copy the collision's lateral friction direction #2.
+ *
+ * @param lateralFrictionDir2 storage for the result (not null, modified)
+ * @return direction vector (not null)
+ */
public Vector3f getLateralFrictionDir2(Vector3f lateralFrictionDir2) {
getLateralFrictionDir2(manifoldPointObjectId, lateralFrictionDir2);
return lateralFrictionDir2;
}
private native void getLateralFrictionDir2(long manifoldPointObjectId, Vector3f lateralFrictionDir2);
+ /**
+ * Test whether the collision's lateral friction is initialized.
+ *
+ * @return true if initialized, otherwise false
+ */
public boolean isLateralFrictionInitialized() {
return isLateralFrictionInitialized(manifoldPointObjectId);
}
private native boolean isLateralFrictionInitialized(long manifoldPointObjectId);
+ /**
+ * Read the collision's lifetime.
+ *
+ * @return lifetime
+ */
public int getLifeTime() {
return getLifeTime(manifoldPointObjectId);
}
private native int getLifeTime(long manifoldPointObjectId);
+ /**
+ * Copy the collision's location in the local coordinates of object A.
+ *
+ * @return a new location vector (in local coordinates, not null)
+ */
public Vector3f getLocalPointA() {
return getLocalPointA(new Vector3f());
}
+ /**
+ * Copy the collision's location in the local coordinates of object A.
+ *
+ * @param localPointA storage for the result (not null, modified)
+ * @return a location vector (in local coordinates, not null)
+ */
public Vector3f getLocalPointA(Vector3f localPointA) {
getLocalPointA(manifoldPointObjectId, localPointA);
return localPointA;
}
private native void getLocalPointA(long manifoldPointObjectId, Vector3f localPointA);
+ /**
+ * Copy the collision's location in the local coordinates of object B.
+ *
+ * @return a new location vector (in local coordinates, not null)
+ */
public Vector3f getLocalPointB() {
return getLocalPointB(new Vector3f());
}
+ /**
+ * Copy the collision's location in the local coordinates of object B.
+ *
+ * @param localPointB storage for the result (not null, modified)
+ * @return a location vector (in local coordinates, not null)
+ */
public Vector3f getLocalPointB(Vector3f localPointB) {
getLocalPointB(manifoldPointObjectId, localPointB);
return localPointB;
}
private native void getLocalPointB(long manifoldPointObjectId, Vector3f localPointB);
+ /**
+ * Copy the collision's normal on object B.
+ *
+ * @return a new normal vector (in physics-space coordinates, not null)
+ */
public Vector3f getNormalWorldOnB() {
return getNormalWorldOnB(new Vector3f());
}
+ /**
+ * Copy the collision's normal on object B.
+ *
+ * @param normalWorldOnB storage for the result (not null, modified)
+ * @return a normal vector (in physics-space coordinates, not null)
+ */
public Vector3f getNormalWorldOnB(Vector3f normalWorldOnB) {
getNormalWorldOnB(manifoldPointObjectId, normalWorldOnB);
return normalWorldOnB;
}
private native void getNormalWorldOnB(long manifoldPointObjectId, Vector3f normalWorldOnB);
+ /**
+ * Read part identifier 0.
+ *
+ * @return identifier
+ */
public int getPartId0() {
return getPartId0(manifoldPointObjectId);
}
private native int getPartId0(long manifoldPointObjectId);
+ /**
+ * Read part identifier 1.
+ *
+ * @return identifier
+ */
public int getPartId1() {
return getPartId1(manifoldPointObjectId);
}
private native int getPartId1(long manifoldPointObjectId);
+ /**
+ * Copy the collision's location.
+ *
+ * @return a new vector (in physics-space coordinates, not null)
+ */
public Vector3f getPositionWorldOnA() {
return getPositionWorldOnA(new Vector3f());
}
+ /**
+ * Copy the collision's location.
+ *
+ * @param positionWorldOnA storage for the result (not null, modified)
+ * @return a location vector (in physics-space coordinates, not null)
+ */
public Vector3f getPositionWorldOnA(Vector3f positionWorldOnA) {
getPositionWorldOnA(manifoldPointObjectId, positionWorldOnA);
return positionWorldOnA;
}
private native void getPositionWorldOnA(long manifoldPointObjectId, Vector3f positionWorldOnA);
+ /**
+ * Copy the collision's location.
+ *
+ * @return a new location vector (in physics-space coordinates, not null)
+ */
public Vector3f getPositionWorldOnB() {
return getPositionWorldOnB(new Vector3f());
}
+ /**
+ * Copy the collision's location.
+ *
+ * @param positionWorldOnB storage for the result (not null, modified)
+ * @return a location vector (in physics-space coordinates, not null)
+ */
public Vector3f getPositionWorldOnB(Vector3f positionWorldOnB) {
getPositionWorldOnB(manifoldPointObjectId, positionWorldOnB);
return positionWorldOnB;
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsCollisionEventFactory.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsCollisionEventFactory.java
index 8c328a15f6..d8eb118797 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsCollisionEventFactory.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsCollisionEventFactory.java
@@ -41,6 +41,11 @@ public class PhysicsCollisionEventFactory {
private ConcurrentLinkedQueue
+ * Collision objects include PhysicsCharacter, PhysicsRigidBody, and
+ * PhysicsGhostObject.
+ *
* @author normenhansen
*/
public abstract class PhysicsCollisionObject implements Savable {
+ /**
+ * Unique identifier of the btCollisionObject. Constructors are responsible
+ * for setting this to a non-zero value. The id might change if the object
+ * gets rebuilt.
+ */
protected long objectId = 0;
+ /**
+ * shape associated with this object (not null)
+ */
protected CollisionShape collisionShape;
+ /**
+ * collideWithGroups bitmask that represents "no groups"
+ */
public static final int COLLISION_GROUP_NONE = 0x00000000;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #1
+ */
public static final int COLLISION_GROUP_01 = 0x00000001;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #2
+ */
public static final int COLLISION_GROUP_02 = 0x00000002;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #3
+ */
public static final int COLLISION_GROUP_03 = 0x00000004;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #4
+ */
public static final int COLLISION_GROUP_04 = 0x00000008;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #5
+ */
public static final int COLLISION_GROUP_05 = 0x00000010;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #6
+ */
public static final int COLLISION_GROUP_06 = 0x00000020;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #7
+ */
public static final int COLLISION_GROUP_07 = 0x00000040;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #8
+ */
public static final int COLLISION_GROUP_08 = 0x00000080;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #9
+ */
public static final int COLLISION_GROUP_09 = 0x00000100;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #10
+ */
public static final int COLLISION_GROUP_10 = 0x00000200;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #11
+ */
public static final int COLLISION_GROUP_11 = 0x00000400;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #12
+ */
public static final int COLLISION_GROUP_12 = 0x00000800;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #13
+ */
public static final int COLLISION_GROUP_13 = 0x00001000;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #14
+ */
public static final int COLLISION_GROUP_14 = 0x00002000;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #15
+ */
public static final int COLLISION_GROUP_15 = 0x00004000;
+ /**
+ * collisionGroup/collideWithGroups bitmask that represents group #16
+ */
public static final int COLLISION_GROUP_16 = 0x00008000;
+ /**
+ * collision group to which this physics object belongs (default=group #1)
+ */
protected int collisionGroup = 0x00000001;
+ /**
+ * collision groups with which this object can collide (default=only group
+ * #1)
+ */
protected int collisionGroupsMask = 0x00000001;
private Object userObject;
/**
- * Sets a CollisionShape to this physics object, note that the object should
- * not be in the physics space when adding a new collision shape as it is rebuilt
- * on the physics side.
- * @param collisionShape the CollisionShape to set
+ * Apply the specified CollisionShape to this object. Note that the object
+ * should not be in any physics space while changing shape; the object gets
+ * rebuilt on the physics side.
+ *
+ * @param collisionShape the shape to apply (not null, alias created)
*/
public void setCollisionShape(CollisionShape collisionShape) {
this.collisionShape = collisionShape;
}
/**
- * @return the CollisionShape of this PhysicsNode, to be able to reuse it with
- * other physics nodes (increases performance)
+ * Access the shape of this physics object.
+ *
+ * @return the pre-existing instance, which can then be applied to other
+ * physics objects (increases performance)
*/
public CollisionShape getCollisionShape() {
return collisionShape;
}
/**
- * Returns the collision group for this collision shape
- * @return The collision group
+ * Read the collision group for this physics object.
+ *
+ * @return the collision group (bit mask with exactly one bit set)
*/
public int getCollisionGroup() {
return collisionGroup;
}
/**
- * Sets the collision group number for this physics object.
+ * Groups are represented by integer bit masks with exactly 1 bit set.
+ * Pre-made variables are available in PhysicsCollisionObject. By default,
+ * physics objects are in COLLISION_GROUP_01.
+ *
+ * Two objects can collide only if one of them has the collisionGroup of the
+ * other in its collideWithGroups set.
+ *
+ * @param collisionGroup the collisionGroup to apply (bit mask with exactly
+ * 1 bit set)
*/
public void setCollisionGroup(int collisionGroup) {
this.collisionGroup = collisionGroup;
@@ -108,10 +188,12 @@ public void setCollisionGroup(int collisionGroup) {
}
/**
- * Add a group that this object will collide with.
+ * Collision shapes include BoxCollisionShape and CapsuleCollisionShape. As
+ * suggested in the Bullet manual, a single collision shape can be shared among
+ * multiple collision objects.
+ *
* @author normenhansen
*/
public abstract class CollisionShape implements Savable {
+ /**
+ * unique identifier of the btCollisionShape
+ *
+ * Constructors are responsible for setting this to a non-zero value. After
+ * that, the id never changes.
+ */
protected long objectId = 0;
+ /**
+ * copy of scaling factors: one for each local axis (default=1,1,1)
+ */
protected Vector3f scale = new Vector3f(1, 1, 1);
+ /**
+ * copy of collision margin (in physics-space units, >0, default=0)
+ */
protected float margin = 0.0f;
public CollisionShape() {
@@ -70,7 +86,9 @@ public CollisionShape() {
// private native void calculateLocalInertia(long objectId, long shapeId, float mass);
/**
- * used internally
+ * Read the id of the btCollisionShape.
+ *
+ * @return the unique identifier (not zero)
*/
public long getObjectId() {
return objectId;
@@ -83,21 +101,52 @@ public void setObjectId(long id) {
this.objectId = id;
}
+ /**
+ * Alter the scaling factors of this shape. CAUTION: Not all shapes can be
+ * scaled.
+ *
+ * Note that if the shape is shared (between collision objects and/or
+ * compound shapes) changes can have unintended consequences.
+ *
+ * @param scale the desired scaling factor for each local axis (not null, no
+ * negative component, unaffected, default=1,1,1)
+ */
public void setScale(Vector3f scale) {
this.scale.set(scale);
setLocalScaling(objectId, scale);
}
-
+ /**
+ * Access the scaling factors.
+ *
+ * @return the pre-existing vector (not null)
+ */
public Vector3f getScale() {
return scale;
}
+ /**
+ * Read the collision margin for this shape.
+ *
+ * @return the margin distance (in physics-space units, ≥0)
+ */
public float getMargin() {
return getMargin(objectId);
}
private native float getMargin(long objectId);
+ /**
+ * Alter the collision margin of this shape. CAUTION: Margin is applied
+ * differently, depending on the type of shape. Generally the collision
+ * margin expands the object, creating a gap. Don't set the collision margin
+ * to zero.
+ *
+ * Note that if the shape is shared (between collision objects and/or
+ * compound shapes) changes can have unintended consequences.
+ *
+ * @param margin the desired margin distance (in physics-space units, >0,
+ * default=0)
+ */
public void setMargin(float margin) {
setMargin(objectId, margin);
this.margin = margin;
@@ -107,18 +156,37 @@ public void setMargin(float margin) {
private native void setMargin(long objectId, float margin);
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
OutputCapsule capsule = ex.getCapsule(this);
capsule.write(scale, "scale", new Vector3f(1, 1, 1));
capsule.write(getMargin(), "margin", 0.0f);
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
+ @Override
public void read(JmeImporter im) throws IOException {
InputCapsule capsule = im.getCapsule(this);
this.scale = (Vector3f) capsule.readSavable("scale", new Vector3f(1, 1, 1));
this.margin = capsule.readFloat("margin", 0.0f);
}
+ /**
+ * Finalize this shape just before it is destroyed. Should be invoked only
+ * by a subclass or by the garbage collector.
+ *
+ * @throws Throwable ignored by the garbage collector
+ */
@Override
protected void finalize() throws Throwable {
super.finalize();
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CompoundCollisionShape.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CompoundCollisionShape.java
index b2321afdc2..254006676e 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CompoundCollisionShape.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CompoundCollisionShape.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -46,23 +46,33 @@
import java.util.logging.Logger;
/**
- * A CompoundCollisionShape allows combining multiple base shapes
- * to generate a more sophisticated shape.
+ * A collision shape formed by combining convex child shapes, based on Bullet's
+ * btCompoundShape.
+ *
* @author normenhansen
*/
public class CompoundCollisionShape extends CollisionShape {
+ /**
+ * children of this shape
+ */
protected ArrayList
+ * This is much more efficient than a regular mesh, but it has a couple
+ * limitations:
+ *
+ * A Java reference must persist after createShape() completes, or else the
+ * buffer might get garbage collected.
+ */
protected ByteBuffer bbuf;
// protected FloatBuffer fbuf;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public HeightfieldCollisionShape() {
}
+ /**
+ * Instantiate a new shape for the specified height map.
+ *
+ * @param heightmap (not null, length≥4, length a perfect square)
+ */
public HeightfieldCollisionShape(float[] heightmap) {
createCollisionHeightfield(heightmap, Vector3f.UNIT_XYZ);
}
+ /**
+ * Instantiate a new shape for the specified height map and scale vector.
+ *
+ * @param heightmap (not null, length≥4, length a perfect square)
+ * @param scale (not null, no negative component, unaffected, default=1,1,1)
+ */
public HeightfieldCollisionShape(float[] heightmap, Vector3f scale) {
createCollisionHeightfield(heightmap, scale);
}
@@ -120,6 +156,9 @@ protected void createCollisionHeightfield(float[] heightmap, Vector3f worldScale
createShape();
}
+ /**
+ * Instantiate the configured shape in Bullet.
+ */
protected void createShape() {
bbuf = BufferUtils.createByteBuffer(heightfieldData.length * 4);
// fbuf = bbuf.asFloatBuffer();//FloatBuffer.wrap(heightfieldData);
@@ -138,11 +177,22 @@ protected void createShape() {
private native long createShape(int heightStickWidth, int heightStickLength, ByteBuffer heightfieldData, float heightScale, float minHeight, float maxHeight, int upAxis, boolean flipQuadEdges);
+ /**
+ * Does nothing.
+ *
+ * @return null
+ */
public Mesh createJmeMesh() {
//TODO return Converter.convert(bulletMesh);
return null;
}
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
super.write(ex);
OutputCapsule capsule = ex.getCapsule(this);
@@ -156,6 +206,12 @@ public void write(JmeExporter ex) throws IOException {
capsule.write(flipQuadEdges, "flipQuadEdges", false);
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
public void read(JmeImporter im) throws IOException {
super.read(im);
InputCapsule capsule = im.getCapsule(this);
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
index db40eedac7..d20e0e51e3 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/HullCollisionShape.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -44,24 +44,52 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+/**
+ * A convex hull collision shape based on Bullet's btConvexHullShape.
+ */
public class HullCollisionShape extends CollisionShape {
private float[] points;
// protected FloatBuffer fbuf;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public HullCollisionShape() {
}
+ /**
+ * Instantiate a collision shape based on the specified JME mesh. For best
+ * performance and stability, use the mesh should have no more than 100
+ * vertices.
+ *
+ * @param mesh a mesh on which to base the shape (not null, at least one
+ * vertex)
+ */
public HullCollisionShape(Mesh mesh) {
this.points = getPoints(mesh);
createShape();
}
+ /**
+ * Instantiate a collision shape based on the specified array of
+ * coordinates.
+ *
+ * @param points an array of coordinates on which to base the shape (not
+ * null, not empty, length a multiple of 3)
+ */
public HullCollisionShape(float[] points) {
this.points = points;
createShape();
}
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
super.write(ex);
@@ -70,6 +98,12 @@ public void write(JmeExporter ex) throws IOException {
capsule.write(points, "points", null);
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
super.read(im);
@@ -89,6 +123,9 @@ public void read(JmeImporter im) throws IOException {
createShape();
}
+ /**
+ * Instantiate the configured shape in Bullet.
+ */
protected void createShape() {
// ObjectArrayList
+ *
* This constructor bypasses all copy logic normally used, this allows for
- * faster bullet shape generation when using procedurally generated Meshes.
- *
+ * faster Bullet shape generation when using procedurally generated Meshes.
*
* @param indices the raw index buffer
* @param vertices the raw vertex buffer
- * @param memoryOptimized use quantisize BVH, uses less memory, but slower
+ * @param memoryOptimized use quantized BVH, uses less memory, but slower
*/
public MeshCollisionShape(ByteBuffer indices, ByteBuffer vertices, boolean memoryOptimized) {
this.triangleIndexBase = indices;
@@ -153,6 +159,12 @@ private void createCollisionMesh(Mesh mesh) {
this.createShape(null);
}
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(final JmeExporter ex) throws IOException {
super.write(ex);
@@ -178,6 +190,12 @@ public void write(final JmeExporter ex) throws IOException {
}
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(final JmeImporter im) throws IOException {
super.read(im);
@@ -195,6 +213,9 @@ public void read(final JmeImporter im) throws IOException {
createShape(nativeBvh);
}
+ /**
+ * Instantiate the configured shape in Bullet.
+ */
private void createShape(byte bvh[]) {
boolean buildBvh=bvh==null||bvh.length==0;
this.meshId = NativeMeshUtil.createTriangleIndexVertexArray(this.triangleIndexBase, this.vertexBase, this.numTriangles, this.numVertices, this.vertexStride, this.triangleIndexStride);
@@ -216,6 +237,12 @@ private void createShape(byte bvh[]) {
private native long createShape(boolean memoryOptimized, boolean buildBvt, long meshId);
+ /**
+ * Finalize this shape just before it is destroyed. Should be invoked only
+ * by a subclass or by the garbage collector.
+ *
+ * @throws Throwable ignored by the garbage collector
+ */
@Override
public void finalize() throws Throwable {
super.finalize();
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/PlaneCollisionShape.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/PlaneCollisionShape.java
index caf6548998..6b8bb88bbe 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/PlaneCollisionShape.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/PlaneCollisionShape.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -42,34 +42,60 @@
import java.util.logging.Logger;
/**
+ * A planar collision shape based on Bullet's btStaticPlaneShape.
*
* @author normenhansen
*/
public class PlaneCollisionShape extends CollisionShape{
+ /**
+ * description of the plane
+ */
private Plane plane;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public PlaneCollisionShape() {
}
/**
- * Creates a plane Collision shape
- * @param plane the plane that defines the shape
+ * Instantiate a plane shape defined by the specified plane.
+ *
+ * @param plane the desired plane (not null, alias created)
*/
public PlaneCollisionShape(Plane plane) {
this.plane = plane;
createShape();
}
+ /**
+ * Access the defining plane.
+ *
+ * @return the pre-existing instance (not null)
+ */
public final Plane getPlane() {
return plane;
}
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
super.write(ex);
OutputCapsule capsule = ex.getCapsule(this);
capsule.write(plane, "collisionPlane", new Plane());
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
public void read(JmeImporter im) throws IOException {
super.read(im);
InputCapsule capsule = im.getCapsule(this);
@@ -77,6 +103,9 @@ public void read(JmeImporter im) throws IOException {
createShape();
}
+ /**
+ * Instantiate the configured shape in Bullet.
+ */
protected void createShape() {
objectId = createShape(plane.getNormal(), plane.getConstant());
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Shape {0}", Long.toHexString(objectId));
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SimplexCollisionShape.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SimplexCollisionShape.java
index fff1c70584..6a538a1c04 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SimplexCollisionShape.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SimplexCollisionShape.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -41,16 +41,33 @@
import java.util.logging.Logger;
/**
- * A simple point, line, triangle or quad collisionShape based on one to four points-
+ * A simple point, line-segment, triangle, or tetrahedron collision shape based
+ * on Bullet's btBU_Simplex1to4.
+ *
* @author normenhansen
*/
public class SimplexCollisionShape extends CollisionShape {
+ /**
+ * vertex positions
+ */
private Vector3f vector1, vector2, vector3, vector4;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public SimplexCollisionShape() {
}
+ /**
+ * Instantiate a tetrahedral collision shape based on the specified points.
+ *
+ * @param point1 the coordinates of 1st point (not null, alias created)
+ * @param point2 the coordinates of 2nd point (not null, alias created)
+ * @param point3 the coordinates of 3rd point (not null, alias created)
+ * @param point4 the coordinates of 4th point (not null, alias created)
+ */
public SimplexCollisionShape(Vector3f point1, Vector3f point2, Vector3f point3, Vector3f point4) {
vector1 = point1;
vector2 = point2;
@@ -59,6 +76,13 @@ public SimplexCollisionShape(Vector3f point1, Vector3f point2, Vector3f point3,
createShape();
}
+ /**
+ * Instantiate a triangular collision shape based on the specified points.
+ *
+ * @param point1 the coordinates of 1st point (not null, alias created)
+ * @param point2 the coordinates of 2nd point (not null, alias created)
+ * @param point3 the coordinates of 3rd point (not null, alias created)
+ */
public SimplexCollisionShape(Vector3f point1, Vector3f point2, Vector3f point3) {
vector1 = point1;
vector2 = point2;
@@ -66,17 +90,34 @@ public SimplexCollisionShape(Vector3f point1, Vector3f point2, Vector3f point3)
createShape();
}
+ /**
+ * Instantiate a line-segment collision shape based on the specified points.
+ *
+ * @param point1 the coordinates of 1st point (not null, alias created)
+ * @param point2 the coordinates of 2nd point (not null, alias created)
+ */
public SimplexCollisionShape(Vector3f point1, Vector3f point2) {
vector1 = point1;
vector2 = point2;
createShape();
}
+ /**
+ * Instantiate a point collision shape based on the specified points.
+ *
+ * @param point1 the coordinates of point (not null, alias created)
+ */
public SimplexCollisionShape(Vector3f point1) {
vector1 = point1;
createShape();
}
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
super.write(ex);
OutputCapsule capsule = ex.getCapsule(this);
@@ -86,6 +127,12 @@ public void write(JmeExporter ex) throws IOException {
capsule.write(vector4, "simplexPoint4", null);
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
public void read(JmeImporter im) throws IOException {
super.read(im);
InputCapsule capsule = im.getCapsule(this);
@@ -96,6 +143,9 @@ public void read(JmeImporter im) throws IOException {
createShape();
}
+ /**
+ * Instantiate the configured shape in Bullet.
+ */
protected void createShape() {
if (vector4 != null) {
objectId = createShape(vector1, vector2, vector3, vector4);
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SphereCollisionShape.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SphereCollisionShape.java
index 4ba6152c9f..dd4228e37d 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SphereCollisionShape.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/SphereCollisionShape.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -41,35 +41,62 @@
import java.util.logging.Logger;
/**
- * Basic sphere collision shape
+ * A spherical collision shape based on Bullet's btSphereShape. These shapes
+ * have no margin and cannot be scaled.
+ *
* @author normenhansen
*/
public class SphereCollisionShape extends CollisionShape {
+ /**
+ * copy of radius (≥0)
+ */
protected float radius;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public SphereCollisionShape() {
}
/**
- * creates a SphereCollisionShape with the given radius
- * @param radius
+ * Instantiate a sphere shape with the specified radius.
+ *
+ * @param radius the desired radius (≥0)
*/
public SphereCollisionShape(float radius) {
this.radius = radius;
createShape();
}
+ /**
+ * Read the radius of the sphere.
+ *
+ * @return the radius (≥0)
+ */
public float getRadius() {
return radius;
}
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
super.write(ex);
OutputCapsule capsule = ex.getCapsule(this);
capsule.write(radius, "radius", 0.5f);
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
public void read(JmeImporter im) throws IOException {
super.read(im);
InputCapsule capsule = im.getCapsule(this);
@@ -78,7 +105,11 @@ public void read(JmeImporter im) throws IOException {
}
/**
- * WARNING - CompoundCollisionShape scaling has no effect.
+ * Alter the scaling factors of this shape. Scaling is disabled
+ * for sphere shapes.
+ *
+ * @param scale the desired scaling factor for each local axis (not null, no
+ * negative component, unaffected, default=1,1,1)
*/
@Override
public void setScale(Vector3f scale) {
@@ -87,6 +118,9 @@ public void setScale(Vector3f scale) {
}
}
+ /**
+ * Instantiate the configured shape in Bullet.
+ */
protected void createShape() {
objectId = createShape(radius);
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Shape {0}", Long.toHexString(objectId));
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/joints/ConeJoint.java b/jme3-bullet/src/main/java/com/jme3/bullet/joints/ConeJoint.java
index faf7396323..d3ec3534ac 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/joints/ConeJoint.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/joints/ConeJoint.java
@@ -43,10 +43,13 @@
import java.util.logging.Logger;
/**
- * From bullet manual:
+ * From the Bullet manual:
+ * From the Bullet manual: PhysicsJoint - Basic Phyiscs Joint
+ * Joints include ConeJoint, HingeJoint, Point2PointJoint, and SixDofJoint.
+ *
* @author normenhansen
*/
public abstract class PhysicsJoint implements Savable {
+ /**
+ * Unique identifier of the Bullet constraint. Constructors are responsible
+ * for setting this to a non-zero value. After that, the id never changes.
+ */
protected long objectId = 0;
+ /**
+ * one of the connected rigid bodies
+ */
protected PhysicsRigidBody nodeA;
+ /**
+ * the other connected rigid body
+ */
protected PhysicsRigidBody nodeB;
+ /**
+ * local offset of this joint's connection point in node A
+ */
protected Vector3f pivotA;
+ /**
+ * local offset of this joint's connection point in node B
+ */
protected Vector3f pivotB;
protected boolean collisionBetweenLinkedBodys = true;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public PhysicsJoint() {
}
/**
- * @param pivotA local translation of the joint connection point in node A
- * @param pivotB local translation of the joint connection point in node B
+ * Instantiate a PhysicsJoint. To be effective, the joint must be added to
+ * the physics space of the two bodies. Also, the bodies must be dynamic and
+ * distinct.
+ *
+ * @param nodeA the 1st body connected by the joint (not null, alias
+ * created)
+ * @param nodeB the 2nd body connected by the joint (not null, alias
+ * created)
+ * @param pivotA local offset of the joint connection point in node A (not
+ * null, alias created)
+ * @param pivotB local offset of the joint connection point in node B (not
+ * null, alias created)
*/
public PhysicsJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB) {
this.nodeA = nodeA;
@@ -67,6 +102,11 @@ public PhysicsJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f piv
nodeB.addJoint(this);
}
+ /**
+ * Read the magnitude of the applied impulse.
+ *
+ * @return impulse
+ */
public float getAppliedImpulse() {
return getAppliedImpulse(objectId);
}
@@ -74,52 +114,84 @@ public float getAppliedImpulse() {
private native float getAppliedImpulse(long objectId);
/**
- * @return the constraint
+ * Read the id of the Bullet constraint.
+ *
+ * @return the unique identifier (not zero)
*/
public long getObjectId() {
return objectId;
}
/**
- * @return the collisionBetweenLinkedBodys
+ * Test whether collisions are allowed between the linked bodies.
+ *
+ * @return true if collision are allowed, otherwise false
*/
public boolean isCollisionBetweenLinkedBodys() {
return collisionBetweenLinkedBodys;
}
/**
- * toggles collisions between linked bodys
+ * From the Bullet manual:
+ * From the Bullet manual:
+ * For each axis:
+ * From the Bullet manual:
+ * For each axis:
+ * From the Bullet manual:
+ * This addresses the issue of fast objects passing through other objects
+ * with no collision detected.
+ *
+ * @param threshold the desired threshold velocity (>0) or zero to
+ * disable CCD (default=0)
+ */
public void setCcdMotionThreshold(float threshold) {
setCcdMotionThreshold(objectId, threshold);
}
private native void setCcdMotionThreshold(long objectId, float threshold);
+ /**
+ * Read the radius of the sphere used for continuous collision detection
+ * (CCD).
+ *
+ * @return radius (≥0)
+ */
public float getCcdSweptSphereRadius() {
return getCcdSweptSphereRadius(objectId);
}
private native float getCcdSweptSphereRadius(long objectId);
+ /**
+ * Calculate this character's continuous collision detection (CCD) motion
+ * threshold.
+ *
+ * @return the threshold velocity (≥0)
+ */
public float getCcdMotionThreshold() {
return getCcdMotionThreshold(objectId);
}
private native float getCcdMotionThreshold(long objectId);
+ /**
+ * Calculate the square of this character's continuous collision detection
+ * (CCD) motion threshold.
+ *
+ * @return the threshold velocity squared (≥0)
+ */
public float getCcdSquareMotionThreshold() {
return getCcdSquareMotionThreshold(objectId);
}
@@ -409,14 +609,25 @@ public float getCcdSquareMotionThreshold() {
/**
* used internally
+ *
+ * @return the Bullet id
*/
public long getControllerId() {
return characterId;
}
+ /**
+ * Has no effect.
+ */
public void destroy() {
}
+ /**
+ * Serialize this character, for example when saving to a J3O file.
+ *
+ * @param e exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter e) throws IOException {
super.write(e);
@@ -432,6 +643,13 @@ public void write(JmeExporter e) throws IOException {
capsule.write(getPhysicsLocation(new Vector3f()), "physicsLocation", new Vector3f());
}
+ /**
+ * De-serialize this character from the specified importer, for example when
+ * loading from a J3O file.
+ *
+ * @param e importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter e) throws IOException {
super.read(e);
@@ -448,6 +666,12 @@ public void read(JmeImporter e) throws IOException {
setPhysicsLocation((Vector3f) capsule.readSavable("physicsLocation", new Vector3f()));
}
+ /**
+ * Finalize this physics character just before it is destroyed. Should be
+ * invoked only by a subclass or by the garbage collector.
+ *
+ * @throws Throwable ignored by the garbage collector
+ */
@Override
protected void finalize() throws Throwable {
super.finalize();
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsGhostObject.java b/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsGhostObject.java
index 052e280e43..acb3752e6a 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsGhostObject.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsGhostObject.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -48,11 +48,14 @@
import java.util.logging.Logger;
/**
+ * A collision object for intangibles, based on Bullet's
+ * btPairCachingGhostObject. This is useful for creating a character controller,
+ * collision sensors/triggers, explosions etc.
+ *
* From Bullet manual:
+ * This addresses the issue of fast objects passing through other objects
+ * with no collision detected.
+ *
+ * @param threshold the desired threshold value (squared velocity, >0) or
+ * zero to disable CCD (default=0)
+ */
public void setCcdMotionThreshold(float threshold) {
setCcdMotionThreshold(objectId, threshold);
}
private native void setCcdMotionThreshold(long objectId, float threshold);
+ /**
+ * Read the radius of the sphere used for continuous collision detection
+ * (CCD).
+ *
+ * @return radius (≥0)
+ */
public float getCcdSweptSphereRadius() {
return getCcdSweptSphereRadius(objectId);
}
private native float getCcdSweptSphereRadius(long objectId);
+ /**
+ * Read the continuous collision detection (CCD) motion threshold for this
+ * object.
+ *
+ * @return threshold value (squared velocity, ≥0)
+ */
public float getCcdMotionThreshold() {
return getCcdMotionThreshold(objectId);
}
private native float getCcdMotionThreshold(long objectId);
+ /**
+ * Read the CCD square motion threshold for this object.
+ *
+ * @return threshold value (≥0)
+ */
public float getCcdSquareMotionThreshold() {
return getCcdSquareMotionThreshold(objectId);
}
private native float getCcdSquareMotionThreshold(long objectId);
+ /**
+ * Serialize this object, for example when saving to a J3O file.
+ *
+ * @param e exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter e) throws IOException {
super.write(e);
@@ -288,6 +382,13 @@ public void write(JmeExporter e) throws IOException {
capsule.write(getCcdSweptSphereRadius(), "ccdSweptSphereRadius", 0);
}
+ /**
+ * De-serialize this object from the specified importer, for example when
+ * loading from a J3O file.
+ *
+ * @param e importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter e) throws IOException {
super.read(e);
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsRigidBody.java b/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsRigidBody.java
index 1330ae09d6..303060fe3f 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsRigidBody.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsRigidBody.java
@@ -51,29 +51,56 @@
import java.util.logging.Logger;
/**
- * PhysicsRigidBody - Basic physics object
+ * In kinematic mode, the body is not influenced by physics but can affect
+ * other physics objects. Its kinetic force is calculated based on its
+ * movement and weight.
+ *
+ * @param kinematic true→set kinematic mode, false→set
+ * dynamic/static mode (default=false)
*/
public void setKinematic(boolean kinematic) {
this.kinematic = kinematic;
@@ -276,10 +357,25 @@ public void setKinematic(boolean kinematic) {
private native void setKinematic(long objectId, boolean kinematic);
+ /**
+ * Test whether this body is in kinematic mode.
+ *
+ * In kinematic mode, the body is not influenced by physics but can affect
+ * other physics objects. Its kinetic force is calculated based on its
+ * movement and weight.
+ *
+ * @return true if in kinematic mode, otherwise false (dynamic/static mode)
+ */
public boolean isKinematic() {
return kinematic;
}
+ /**
+ * Alter the radius of the swept sphere used for continuous collision
+ * detection (CCD).
+ *
+ * @param radius the desired radius (≥0, default=0)
+ */
public void setCcdSweptSphereRadius(float radius) {
setCcdSweptSphereRadius(objectId, radius);
}
@@ -287,9 +383,14 @@ public void setCcdSweptSphereRadius(float radius) {
private native void setCcdSweptSphereRadius(long objectId, float radius);
/**
- * Sets the amount of motion that has to happen in one physics tick to trigger the continuous motion detection
+ * This addresses the issue of fast objects passing through other objects
+ * with no collision detected.
+ *
+ * @param threshold the desired threshold velocity (>0) or zero to
+ * disable CCD (default=0)
*/
public void setCcdMotionThreshold(float threshold) {
setCcdMotionThreshold(objectId, threshold);
@@ -297,31 +398,56 @@ public void setCcdMotionThreshold(float threshold) {
private native void setCcdMotionThreshold(long objectId, float threshold);
+ /**
+ * Read the radius of the swept sphere used for continuous collision
+ * detection (CCD).
+ *
+ * @return radius (≥0)
+ */
public float getCcdSweptSphereRadius() {
return getCcdSweptSphereRadius(objectId);
}
private native float getCcdSweptSphereRadius(long objectId);
+ /**
+ * Calculate this body's continuous collision detection (CCD) motion
+ * threshold.
+ *
+ * @return the threshold velocity (≥0)
+ */
public float getCcdMotionThreshold() {
return getCcdMotionThreshold(objectId);
}
private native float getCcdMotionThreshold(long objectId);
+ /**
+ * Calculate the square of this body's continuous collision detection (CCD)
+ * motion threshold.
+ *
+ * @return the threshold velocity squared (≥0)
+ */
public float getCcdSquareMotionThreshold() {
return getCcdSquareMotionThreshold(objectId);
}
private native float getCcdSquareMotionThreshold(long objectId);
+ /**
+ * Read this body's mass.
+ *
+ * @return the mass (>0) or zero for a static body
+ */
public float getMass() {
return mass;
}
/**
- * Sets the mass of this PhysicsRigidBody, objects with mass=0 are static.
- * @param mass
+ * Alter this body's mass. Bodies with mass=0 are static. For dynamic
+ * bodies, it is best to keep the mass around 1.
+ *
+ * @param mass the desired mass (>0) or 0 for a static body (default=1)
*/
public void setMass(float mass) {
this.mass = mass;
@@ -344,10 +470,23 @@ public void setMass(float mass) {
private native long updateMassProps(long objectId, long collisionShapeId, float mass);
+ /**
+ * Copy this body's gravitational acceleration.
+ *
+ * @return a new acceleration vector (in physics-space coordinates, not
+ * null)
+ */
public Vector3f getGravity() {
return getGravity(null);
}
+ /**
+ * Copy this body's gravitational acceleration.
+ *
+ * @param gravity storage for the result (modified if not null)
+ * @return an acceleration vector (in physics-space coordinates, either the
+ * provided storage or a new vector, not null)
+ */
public Vector3f getGravity(Vector3f gravity) {
if (gravity == null) {
gravity = new Vector3f();
@@ -359,16 +498,23 @@ public Vector3f getGravity(Vector3f gravity) {
private native void getGravity(long objectId, Vector3f gravity);
/**
- * Set the local gravity of this PhysicsRigidBody
+ * Invoke this after adding the body to a PhysicsSpace. Adding a body to a
+ * PhysicsSpace alters its gravity.
+ *
+ * @param gravity the desired acceleration vector (not null, unaffected)
*/
public void setGravity(Vector3f gravity) {
setGravity(objectId, gravity);
}
private native void setGravity(long objectId, Vector3f gravity);
+ /**
+ * Read this body's friction.
+ *
+ * @return friction value
+ */
public float getFriction() {
return getFriction(objectId);
}
@@ -376,8 +522,9 @@ public float getFriction() {
private native float getFriction(long objectId);
/**
- * Sets the friction of this physics object
- * @param friction the friction of this physics object
+ * Alter this body's friction.
+ *
+ * @param friction the desired friction value (default=0.5)
*/
public void setFriction(float friction) {
setFriction(objectId, friction);
@@ -385,6 +532,12 @@ public void setFriction(float friction) {
private native void setFriction(long objectId, float friction);
+ /**
+ * Alter this body's damping.
+ *
+ * @param linearDamping the desired linear damping value (default=0)
+ * @param angularDamping the desired angular damping value (default=0)
+ */
public void setDamping(float linearDamping, float angularDamping) {
setDamping(objectId, linearDamping, angularDamping);
}
@@ -400,27 +553,52 @@ public void setDamping(float linearDamping, float angularDamping) {
//
// private native void setRestitution(long objectId, float factor);
//
+ /**
+ * Alter this body's linear damping.
+ *
+ * @param linearDamping the desired linear damping value (default=0)
+ */
public void setLinearDamping(float linearDamping) {
setDamping(objectId, linearDamping, getAngularDamping());
}
-
+
+ /**
+ * Alter this body's angular damping.
+ *
+ * @param angularDamping the desired angular damping value (default=0)
+ */
public void setAngularDamping(float angularDamping) {
setAngularDamping(objectId, angularDamping);
}
private native void setAngularDamping(long objectId, float factor);
+ /**
+ * Read this body's linear damping.
+ *
+ * @return damping value
+ */
public float getLinearDamping() {
return getLinearDamping(objectId);
}
private native float getLinearDamping(long objectId);
+ /**
+ * Read this body's angular damping.
+ *
+ * @return damping value
+ */
public float getAngularDamping() {
return getAngularDamping(objectId);
}
private native float getAngularDamping(long objectId);
+ /**
+ * Read this body's restitution (bounciness).
+ *
+ * @return restitution value
+ */
public float getRestitution() {
return getRestitution(objectId);
}
@@ -428,8 +606,10 @@ public float getRestitution() {
private native float getRestitution(long objectId);
/**
- * The "bouncyness" of the PhysicsRigidBody, best performance if restitution=0
- * @param restitution
+ * Alter this body's restitution (bounciness). For best performance, set
+ * restitution=0.
+ *
+ * @param restitution the desired value (default=0)
*/
public void setRestitution(float restitution) {
setRestitution(objectId, restitution);
@@ -438,8 +618,9 @@ public void setRestitution(float restitution) {
private native void setRestitution(long objectId, float factor);
/**
- * Get the current angular velocity of this PhysicsRigidBody
- * @return the current linear velocity
+ * Copy this body's angular velocity.
+ *
+ * @return a new velocity vector (in physics-space coordinates, not null)
*/
public Vector3f getAngularVelocity() {
Vector3f vec = new Vector3f();
@@ -450,16 +631,19 @@ public Vector3f getAngularVelocity() {
private native void getAngularVelocity(long objectId, Vector3f vec);
/**
- * Get the current angular velocity of this PhysicsRigidBody
- * @param vec the vector to store the velocity in
+ * Copy this body's angular velocity.
+ *
+ * @param vec storage for the result (in physics-space coordinates, not
+ * null, modified)
*/
public void getAngularVelocity(Vector3f vec) {
getAngularVelocity(objectId, vec);
}
/**
- * Sets the angular velocity of this PhysicsRigidBody
- * @param vec the angular velocity of this PhysicsRigidBody
+ * Alter this body's angular velocity.
+ *
+ * @param vec the desired angular velocity vector (not null, unaffected)
*/
public void setAngularVelocity(Vector3f vec) {
setAngularVelocity(objectId, vec);
@@ -469,8 +653,9 @@ public void setAngularVelocity(Vector3f vec) {
private native void setAngularVelocity(long objectId, Vector3f vec);
/**
- * Get the current linear velocity of this PhysicsRigidBody
- * @return the current linear velocity
+ * Copy the linear velocity of this body's center of mass.
+ *
+ * @return a new velocity vector (in physics-space coordinates, not null)
*/
public Vector3f getLinearVelocity() {
Vector3f vec = new Vector3f();
@@ -481,16 +666,19 @@ public Vector3f getLinearVelocity() {
private native void getLinearVelocity(long objectId, Vector3f vec);
/**
- * Get the current linear velocity of this PhysicsRigidBody
- * @param vec the vector to store the velocity in
+ * Copy the linear velocity of this body's center of mass.
+ *
+ * @param vec storage for the result (in physics-space coordinates, not
+ * null, modified)
*/
public void getLinearVelocity(Vector3f vec) {
getLinearVelocity(objectId, vec);
}
/**
- * Sets the linear velocity of this PhysicsRigidBody
- * @param vec the linear velocity of this PhysicsRigidBody
+ * Alter the linear velocity of this body's center of mass.
+ *
+ * @param vec the desired velocity vector (not null)
*/
public void setLinearVelocity(Vector3f vec) {
setLinearVelocity(objectId, vec);
@@ -500,10 +688,13 @@ public void setLinearVelocity(Vector3f vec) {
private native void setLinearVelocity(long objectId, Vector3f vec);
/**
- * Apply a force to the PhysicsRigidBody, only applies force if the next physics update call
- * updates the physics space.
+ * To apply an impulse, use applyImpulse, use applyContinuousForce to apply
+ * continuous force.
+ *
+ * @param force the force (not null, unaffected)
* @param location the location of the force
*/
public void applyForce(Vector3f force, Vector3f location) {
@@ -514,11 +705,13 @@ public void applyForce(Vector3f force, Vector3f location) {
private native void applyForce(long objectId, Vector3f force, Vector3f location);
/**
- * Apply a force to the PhysicsRigidBody, only applies force if the next physics update call
- * updates the physics space.
+ * To apply an impulse, use
+ * {@link #applyImpulse(com.jme3.math.Vector3f, com.jme3.math.Vector3f)}.
+ *
+ * @param force the force (not null, unaffected)
*/
public void applyCentralForce(Vector3f force) {
applyCentralForce(objectId, force);
@@ -528,11 +721,13 @@ public void applyCentralForce(Vector3f force) {
private native void applyCentralForce(long objectId, Vector3f force);
/**
- * Apply a force to the PhysicsRigidBody, only applies force if the next physics update call
- * updates the physics space.
+ * To apply an impulse, use
+ * {@link #applyImpulse(com.jme3.math.Vector3f, com.jme3.math.Vector3f)}.
+ *
+ * @param torque the torque (not null, unaffected)
*/
public void applyTorque(Vector3f torque) {
applyTorque(objectId, torque);
@@ -542,9 +737,10 @@ public void applyTorque(Vector3f torque) {
private native void applyTorque(long objectId, Vector3f vec);
/**
- * Apply an impulse to the PhysicsRigidBody in the next physics update.
- * @param impulse applied impulse
- * @param rel_pos location relative to object
+ * Apply an impulse to the body the next physics update.
+ *
+ * @param impulse applied impulse (not null, unaffected)
+ * @param rel_pos location relative to object (not null, unaffected)
*/
public void applyImpulse(Vector3f impulse, Vector3f rel_pos) {
applyImpulse(objectId, impulse, rel_pos);
@@ -554,8 +750,9 @@ public void applyImpulse(Vector3f impulse, Vector3f rel_pos) {
private native void applyImpulse(long objectId, Vector3f impulse, Vector3f rel_pos);
/**
- * Apply a torque impulse to the PhysicsRigidBody in the next physics update.
- * @param vec
+ * Apply a torque impulse to the body in the next physics update.
+ *
+ * @param vec the torque to apply
*/
public void applyTorqueImpulse(Vector3f vec) {
applyTorqueImpulse(objectId, vec);
@@ -565,8 +762,7 @@ public void applyTorqueImpulse(Vector3f vec) {
private native void applyTorqueImpulse(long objectId, Vector3f vec);
/**
- * Clear all forces from the PhysicsRigidBody
- *
+ * Clear all forces acting on this body.
*/
public void clearForces() {
clearForces(objectId);
@@ -574,6 +770,14 @@ public void clearForces() {
private native void clearForces(long objectId);
+ /**
+ * Apply the specified CollisionShape to this body.
+ *
+ * Note that the body should not be in any physics space while changing
+ * shape; the body gets rebuilt on the physics side.
+ *
+ * @param collisionShape the shape to apply (not null, alias created)
+ */
public void setCollisionShape(CollisionShape collisionShape) {
super.setCollisionShape(collisionShape);
if (collisionShape instanceof MeshCollisionShape && mass != 0) {
@@ -590,7 +794,7 @@ public void setCollisionShape(CollisionShape collisionShape) {
private native void setCollisionShape(long objectId, long collisionShapeId);
/**
- * reactivates this PhysicsRigidBody when it has been deactivated because it was not moving
+ * Reactivates this body if it has been deactivated due to lack of motion.
*/
public void activate() {
activate(objectId);
@@ -598,6 +802,11 @@ public void activate() {
private native void activate(long objectId);
+ /**
+ * Test whether this body has been deactivated due to lack of motion.
+ *
+ * @return true if still active, false if deactivated
+ */
public boolean isActive() {
return isActive(objectId);
}
@@ -605,10 +814,13 @@ public boolean isActive() {
private native boolean isActive(long objectId);
/**
- * sets the sleeping thresholds, these define when the object gets deactivated
- * to save ressources. Low values keep the object active when it barely moves
- * @param linear the linear sleeping threshold
- * @param angular the angular sleeping threshold
+ * Alter this body's sleeping thresholds.
+ *
+ * These thresholds determine when the body can be deactivated to save
+ * resources. Low values keep the body active when it barely moves.
+ *
+ * @param linear the desired linear sleeping threshold (≥0, default=0.8)
+ * @param angular the desired angular sleeping threshold (≥0, default=1)
*/
public void setSleepingThresholds(float linear, float angular) {
setSleepingThresholds(objectId, linear, angular);
@@ -616,36 +828,68 @@ public void setSleepingThresholds(float linear, float angular) {
private native void setSleepingThresholds(long objectId, float linear, float angular);
+ /**
+ * Alter this body's linear sleeping threshold.
+ *
+ * @param linearSleepingThreshold the desired threshold (≥0, default=0.8)
+ */
public void setLinearSleepingThreshold(float linearSleepingThreshold) {
setLinearSleepingThreshold(objectId, linearSleepingThreshold);
}
private native void setLinearSleepingThreshold(long objectId, float linearSleepingThreshold);
+ /**
+ * Alter this body's angular sleeping threshold.
+ *
+ * @param angularSleepingThreshold the desired threshold (≥0, default=1)
+ */
public void setAngularSleepingThreshold(float angularSleepingThreshold) {
setAngularSleepingThreshold(objectId, angularSleepingThreshold);
}
private native void setAngularSleepingThreshold(long objectId, float angularSleepingThreshold);
+ /**
+ * Read this body's linear sleeping threshold.
+ *
+ * @return the linear sleeping threshold (≥0)
+ */
public float getLinearSleepingThreshold() {
return getLinearSleepingThreshold(objectId);
}
private native float getLinearSleepingThreshold(long objectId);
+ /**
+ * Read this body's angular sleeping threshold.
+ *
+ * @return the angular sleeping threshold (≥0)
+ */
public float getAngularSleepingThreshold() {
return getAngularSleepingThreshold(objectId);
}
private native float getAngularSleepingThreshold(long objectId);
+ /**
+ * Read this body's angular factor for the X axis.
+ *
+ * @return the angular factor
+ */
public float getAngularFactor() {
return getAngularFactor(null).getX();
}
+ /**
+ * Copy this body's angular factors.
+ *
+ * @param store storage for the result (modified if not null)
+ * @return the angular factor for each axis (either the provided storage or
+ * new vector, not null)
+ */
public Vector3f getAngularFactor(Vector3f store) {
- // doing like this prevent from breaking the API
+ // Done this way to prevent breaking the API.
if (store == null) {
store = new Vector3f();
}
@@ -655,16 +899,33 @@ public Vector3f getAngularFactor(Vector3f store) {
private native void getAngularFactor(long objectId, Vector3f vec);
+ /**
+ * Alter this body's angular factor.
+ *
+ * @param factor the desired angular factor for all axes (not null,
+ * unaffected, default=1)
+ */
public void setAngularFactor(float factor) {
setAngularFactor(objectId, new Vector3f(factor, factor, factor));
}
+ /**
+ * Alter this body's angular factors.
+ *
+ * @param factor the desired angular factor for each axis (not null,
+ * unaffected, default=(1,1,1))
+ */
public void setAngularFactor(Vector3f factor) {
setAngularFactor(objectId, factor);
}
private native void setAngularFactor(long objectId, Vector3f factor);
+ /**
+ * Copy this body's linear factors.
+ *
+ * @return the linear factor for each axis (not null)
+ */
public Vector3f getLinearFactor() {
Vector3f vec = new Vector3f();
getLinearFactor(objectId, vec);
@@ -673,6 +934,12 @@ public Vector3f getLinearFactor() {
private native void getLinearFactor(long objectId, Vector3f vec);
+ /**
+ * Alter this body's linear factors.
+ *
+ * @param factor the desired linear factor for each axis (not null,
+ * unaffected, default=(1,1,1))
+ */
public void setLinearFactor(Vector3f factor) {
setLinearFactor(objectId, factor);
}
@@ -681,7 +948,9 @@ public void setLinearFactor(Vector3f factor) {
/**
- * do not use manually, joints are added automatically
+ * Do not invoke directly! Joints are added automatically when created.
+ *
+ * @param joint the joint to add (not null)
*/
public void addJoint(PhysicsJoint joint) {
if (!joints.contains(joint)) {
@@ -690,21 +959,32 @@ public void addJoint(PhysicsJoint joint) {
}
/**
- *
+ * Do not invoke directly! Joints are removed automatically when destroyed.
+ *
+ * @param joint the joint to remove (not null)
*/
public void removeJoint(PhysicsJoint joint) {
joints.remove(joint);
}
/**
- * Returns a list of connected joints. This list is only filled when
- * the PhysicsRigidBody is actually added to the physics space or loaded from disk.
- * @return list of active joints connected to this PhysicsRigidBody
+ * Access the list of joints connected with this body.
+ *
+ * This list is only filled when the PhysicsRigidBody is added to a physics
+ * space.
+ *
+ * @return the pre-existing list (not null)
*/
public List PhysicsVehicleNode - Special PhysicsNode that implements vehicle functions
- * From bullet manual:
+ * The entire vehicle is represented as a single rigidbody, the chassis. The
+ * collision detection of the wheels is approximated by ray casts, and the tire
+ * friction is a basic anisotropic friction model.
+ *
* @author normenhansen
*/
public class PhysicsVehicle extends PhysicsRigidBody {
+ /**
+ * Unique identifier of the btRaycastVehicle. The constructor sets this to a
+ * non-zero value.
+ */
protected long vehicleId = 0;
+ /**
+ * Unique identifier of the ray caster.
+ */
protected long rayCasterId = 0;
+ /**
+ * tuning parameters applied when a wheel is created
+ */
protected VehicleTuning tuning = new VehicleTuning();
+ /**
+ * list of wheels
+ */
protected ArrayList
+ * For better handling, increase the friction.
+ *
+ * @param frictionSlip the desired coefficient of friction between tyre and
+ * ground (0.8→realistic car, 10000→kart racer, default=10.5)
*/
public void setFrictionSlip(float frictionSlip) {
tuning.frictionSlip = frictionSlip;
}
/**
- * The coefficient of friction between the tyre and the ground.
- * Should be about 0.8 for realistic cars, but can increased for better handling.
- * Set large (10000.0) for kart racers
- * @param wheel
- * @param frictionSlip
+ * Alter the friction of the indexed wheel.
+ *
+ * For better handling, increase the friction.
+ *
+ * @param wheel the index of the wheel to modify (≥0)
+ * @param frictionSlip the desired coefficient of friction between tyre and
+ * ground (0.8→realistic car, 10000→kart racer)
*/
public void setFrictionSlip(int wheel, float frictionSlip) {
wheels.get(wheel).setFrictionSlip(frictionSlip);
}
/**
- * Reduces the rolling torque applied from the wheels that cause the vehicle to roll over.
- * This is a bit of a hack, but it's quite effective. 0.0 = no roll, 1.0 = physical behaviour.
- * If m_frictionSlip is too high, you'll need to reduce this to stop the vehicle rolling over.
- * You should also try lowering the vehicle's centre of mass
+ * Alter the roll influence of the indexed wheel.
+ *
+ * The roll-influence factor reduces (or magnifies) any torque contributed
+ * by the wheel that would tend to cause the vehicle to roll over. This is a
+ * bit of a hack, but it's quite effective.
+ *
+ * If the friction between the tyres and the ground is too high, you may
+ * reduce this factor to prevent the vehicle from rolling over. You should
+ * also try lowering the vehicle's center of mass.
+ *
+ * @param wheel the index of the wheel to modify (≥0)
+ * @param rollInfluence the desired roll-influence factor (0→no roll
+ * torque, 1→realistic behavior, default=1)
*/
public void setRollInfluence(int wheel, float rollInfluence) {
wheels.get(wheel).setRollInfluence(rollInfluence);
}
/**
- * @return the maxSuspensionTravelCm
+ * Read the initial maximum suspension travel distance for new wheels.
+ *
+ * @return the maximum distance the suspension can be compressed (in
+ * centimeters)
*/
public float getMaxSuspensionTravelCm() {
return tuning.maxSuspensionTravelCm;
}
/**
- * Use before adding wheels, this is the default used when adding wheels.
- * After adding the wheel, use direct wheel access.
+ * If the suspension cannot handle the vehicle's weight, increase this
+ * limit.
+ *
+ * @param maxSuspensionForce the desired maximum force per wheel
+ * (default=6000)
*/
public void setMaxSuspensionForce(float maxSuspensionForce) {
tuning.maxSuspensionForce = maxSuspensionForce;
}
/**
- * This value caps the maximum suspension force, raise this above the default 6000 if your suspension cannot
- * handle the weight of your vehicle.
- * @param wheel
- * @param maxSuspensionForce
+ * Alter the maximum suspension force for the specified wheel.
+ *
+ * If the suspension cannot handle the vehicle's weight, increase this
+ * limit.
+ *
+ * @param wheel the index of the wheel to modify (≥0)
+ * @param maxSuspensionForce the desired maximum force per wheel
+ * (default=6000)
*/
public void setMaxSuspensionForce(int wheel, float maxSuspensionForce) {
wheels.get(wheel).setMaxSuspensionForce(maxSuspensionForce);
}
/**
- * @return the suspensionCompression
+ * Read the initial damping (when the suspension is compressed) for new
+ * wheels.
+ *
+ * @return the damping coefficient
*/
public float getSuspensionCompression() {
return tuning.suspensionCompression;
}
/**
- * Use before adding wheels, this is the default used when adding wheels.
- * After adding the wheel, use direct wheel access.
+ * Set to k * 2 * FastMath.sqrt(m_suspensionStiffness) where k is the
+ * damping ratio:
+ *
+ * k = 0.0 undamped and bouncy, k = 1.0 critical damping, k between 0.1 and
+ * 0.3 are good values
+ *
+ * @param suspensionCompression the desired damping coefficient
+ * (default=0.83)
*/
public void setSuspensionCompression(float suspensionCompression) {
tuning.suspensionCompression = suspensionCompression;
}
/**
- * The damping coefficient for when the suspension is compressed.
- * Set to k * 2.0 * FastMath.sqrt(m_suspensionStiffness) so k is proportional to critical damping.
+ * Set to k * 2 * FastMath.sqrt(m_suspensionStiffness) where k is the
+ * damping ratio:
+ *
+ * k = 0.0 undamped and bouncy, k = 1.0 critical damping, k between 0.1 and
+ * 0.3 are good values
+ *
+ * @param wheel the index of the wheel to modify (≥0)
+ * @param suspensionCompression the desired damping coefficient
*/
public void setSuspensionCompression(int wheel, float suspensionCompression) {
wheels.get(wheel).setWheelsDampingCompression(suspensionCompression);
}
/**
- * @return the suspensionDamping
+ * Read the initial damping (when the suspension is expanded) for new
+ * wheels.
+ *
+ * @return the damping coefficient
*/
public float getSuspensionDamping() {
return tuning.suspensionDamping;
}
/**
- * Use before adding wheels, this is the default used when adding wheels.
- * After adding the wheel, use direct wheel access.
+ * Set to k * 2 * FastMath.sqrt(m_suspensionStiffness) where k is the
+ * damping ratio:
+ *
+ * k = 0.0 undamped and bouncy, k = 1.0 critical damping, k between 0.1 and
+ * 0.3 are good values
+ *
+ * @param suspensionDamping the desired damping coefficient (default=0.88)
*/
public void setSuspensionDamping(float suspensionDamping) {
tuning.suspensionDamping = suspensionDamping;
}
/**
- * The damping coefficient for when the suspension is expanding.
- * See the comments for setSuspensionCompression for how to set k.
- * @param wheel
- * @param suspensionDamping
+ * Alter the damping (when the suspension is expanded) for the indexed
+ * wheel.
+ *
+ * Set to k * 2 * FastMath.sqrt(m_suspensionStiffness) where k is the
+ * damping ratio:
+ *
+ * k = 0.0 undamped and bouncy, k = 1.0 critical damping, k between 0.1 and
+ * 0.3 are good values
+ *
+ * @param wheel the index of the wheel to modify (≥0)
+ * @param suspensionDamping the desired damping coefficient
*/
public void setSuspensionDamping(int wheel, float suspensionDamping) {
wheels.get(wheel).setWheelsDampingRelaxation(suspensionDamping);
}
/**
- * @return the suspensionStiffness
+ * Read the initial suspension stiffness for new wheels.
+ *
+ * @return the stiffness constant (10→off-road buggy, 50→sports
+ * car, 200→Formula-1 race car)
*/
public float getSuspensionStiffness() {
return tuning.suspensionStiffness;
}
/**
- * Use before adding wheels, this is the default used when adding wheels.
- * After adding the wheel, use direct wheel access.
+ * Set to k * 2 * FastMath.sqrt(m_suspensionStiffness) where k is the
+ * damping ratio:
+ *
+ * k = 0.0 undamped and bouncy, k = 1.0 critical damping, k between 0.1 and
+ * 0.3 are good values
+ *
+ * @param wheelsDampingRelaxation the desired damping (default=2.3)
*/
public void setWheelsDampingRelaxation(float wheelsDampingRelaxation) {
this.wheelsDampingRelaxation = wheelsDampingRelaxation;
applyInfo();
}
+ /**
+ * Read this wheel's damping when the suspension is compressed.
+ *
+ * @return the damping
+ */
public float getWheelsDampingCompression() {
return wheelsDampingCompression;
}
/**
- * the damping coefficient for when the suspension is compressed.
- * Set to k * 2.0 * FastMath.sqrt(m_suspensionStiffness) so k is proportional to critical damping.
+ * Set to k * 2 * FastMath.sqrt(m_suspensionStiffness) where k is the
+ * damping ratio:
+ *
+ * k = 0.0 undamped and bouncy, k = 1.0 critical damping, k between 0.1 and
+ * 0.3 are good values
+ *
+ * @param wheelsDampingCompression the desired damping (default=4.4)
*/
public void setWheelsDampingCompression(float wheelsDampingCompression) {
this.wheelsDampingCompression = wheelsDampingCompression;
applyInfo();
}
+ /**
+ * Read the friction between this wheel's tyre and the ground.
+ *
+ * @return the coefficient of friction
+ */
public float getFrictionSlip() {
return frictionSlip;
}
/**
- * the coefficient of friction between the tyre and the ground.
- * Should be about 0.8 for realistic cars, but can increased for better handling.
- * Set large (10000.0) for kart racers
- * @param frictionSlip
+ * Alter the friction between this wheel's tyre and the ground.
+ *
+ * Should be about 0.8 for realistic cars, but can increased for better
+ * handling. Set large (10000.0) for kart racers.
+ *
+ * @param frictionSlip the desired coefficient of friction (default=10.5)
*/
public void setFrictionSlip(float frictionSlip) {
this.frictionSlip = frictionSlip;
applyInfo();
}
+ /**
+ * Read this wheel's roll influence.
+ *
+ * @return the roll-influence factor
+ */
public float getRollInfluence() {
return rollInfluence;
}
/**
- * reduces the rolling torque applied from the wheels that cause the vehicle to roll over.
- * This is a bit of a hack, but it's quite effective. 0.0 = no roll, 1.0 = physical behaviour.
- * If m_frictionSlip is too high, you'll need to reduce this to stop the vehicle rolling over.
- * You should also try lowering the vehicle's centre of mass
- * @param rollInfluence the rollInfluence to set
+ * Alter this wheel's roll influence.
+ *
+ * The roll-influence factor reduces (or magnifies) the torque contributed
+ * by this wheel that tends to cause the vehicle to roll over. This is a bit
+ * of a hack, but it's quite effective.
+ *
+ * If the friction between the tyres and the ground is too high, you may
+ * reduce this factor to prevent the vehicle from rolling over. You should
+ * also try lowering the vehicle's centre of mass.
+ *
+ * @param rollInfluence the desired roll-influence factor (0→no roll
+ * torque, 1→realistic behaviour, default=1)
*/
public void setRollInfluence(float rollInfluence) {
this.rollInfluence = rollInfluence;
applyInfo();
}
+ /**
+ * Read the travel distance for this wheel's suspension.
+ *
+ * @return the maximum travel distance (in centimeters)
+ */
public float getMaxSuspensionTravelCm() {
return maxSuspensionTravelCm;
}
/**
- * the maximum distance the suspension can be compressed (centimetres)
- * @param maxSuspensionTravelCm
+ * Alter the travel distance for this wheel's suspension.
+ *
+ * @param maxSuspensionTravelCm the desired maximum travel distance (in
+ * centimetres, default=500)
*/
public void setMaxSuspensionTravelCm(float maxSuspensionTravelCm) {
this.maxSuspensionTravelCm = maxSuspensionTravelCm;
applyInfo();
}
+ /**
+ * Read the maximum force exerted by this wheel's suspension.
+ *
+ * @return the maximum force
+ */
public float getMaxSuspensionForce() {
return maxSuspensionForce;
}
/**
- * The maximum suspension force, raise this above the default 6000 if your suspension cannot
- * handle the weight of your vehicle.
- * @param maxSuspensionTravelCm
+ * Alter the maximum force exerted by this wheel's suspension.
+ *
+ * Increase this if your suspension cannot handle the weight of your
+ * vehicle.
+ *
+ * @param maxSuspensionForce the desired maximum force (default=6000)
*/
public void setMaxSuspensionForce(float maxSuspensionForce) {
this.maxSuspensionForce = maxSuspensionForce;
@@ -269,19 +476,40 @@ private native void applyInfo(long wheelId, int wheelIndex,
boolean frontWheel,
float suspensionRestLength);
+ /**
+ * Read the radius of this wheel.
+ *
+ * @return the radius (in physics-space units, ≥0)
+ */
public float getRadius() {
return radius;
}
+ /**
+ * Alter the radius of this wheel.
+ *
+ * @param radius the desired radius (in physics-space units, ≥0,
+ * default=0.5)
+ */
public void setRadius(float radius) {
this.radius = radius;
applyInfo();
}
+ /**
+ * Read the rest length of this wheel.
+ *
+ * @return the length
+ */
public float getRestLength() {
return restLength;
}
+ /**
+ * Alter the rest length of the suspension of this wheel.
+ *
+ * @param restLength the desired length (default=1)
+ */
public void setRestLength(float restLength) {
this.restLength = restLength;
applyInfo();
@@ -303,7 +531,10 @@ public PhysicsCollisionObject getGroundObject() {
}
/**
- * returns the location where the wheel collides with the ground (world space)
+ * Copy the location where the wheel touches the ground.
+ *
+ * @param vec storage for the result (not null, modified)
+ * @return a new location vector (in physics-space coordinates, not null)
*/
public Vector3f getCollisionLocation(Vector3f vec) {
getCollisionLocation(wheelId, wheelIndex, vec);
@@ -313,7 +544,9 @@ public Vector3f getCollisionLocation(Vector3f vec) {
private native void getCollisionLocation(long wheelId, int wheelIndex, Vector3f vec);
/**
- * returns the location where the wheel collides with the ground (world space)
+ * Copy the location where the wheel collides with the ground.
+ *
+ * @return a new location vector (in physics-space coordinates)
*/
public Vector3f getCollisionLocation() {
Vector3f vec = new Vector3f();
@@ -322,7 +555,10 @@ public Vector3f getCollisionLocation() {
}
/**
- * returns the normal where the wheel collides with the ground (world space)
+ * Copy the normal where the wheel touches the ground.
+ *
+ * @param vec storage for the result (not null, modified)
+ * @return a unit vector (in physics-space coordinates, not null)
*/
public Vector3f getCollisionNormal(Vector3f vec) {
getCollisionNormal(wheelId, wheelIndex, vec);
@@ -332,7 +568,9 @@ public Vector3f getCollisionNormal(Vector3f vec) {
private native void getCollisionNormal(long wheelId, int wheelIndex, Vector3f vec);
/**
- * returns the normal where the wheel collides with the ground (world space)
+ * Copy the normal where the wheel touches the ground.
+ *
+ * @return a new unit vector (in physics-space coordinates, not null)
*/
public Vector3f getCollisionNormal() {
Vector3f vec = new Vector3f();
@@ -341,8 +579,11 @@ public Vector3f getCollisionNormal() {
}
/**
- * returns how much the wheel skids on the ground (for skid sounds/smoke etc.)
+ * This method is invoked from native code.
+ *
+ * @param x local X coordinate of new vertex
+ * @param y local Y coordinate of new vertex
+ * @param z local Z coordinate of new vertex
+ * @param part ignored
+ * @param index ignored
+ */
public void addVector(float x, float y, float z, int part, int index) {
list.add(new Vector3f(x, y, z));
}
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java b/jme3-bullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
index 939be40834..9351306852 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/util/DebugShapeFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2017 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -57,10 +57,13 @@ public class DebugShapeFactory {
// private static final Vector3f aabbMin = new Vector3f(-1e30f, -1e30f, -1e30f);
/**
- * Creates a debug shape from the given collision shape. This is mostly used internally.
+ * This is mostly used internally. To attach a debug shape to a physics
+ * object, call
+ * If successful, no debug meshes will be visible.
+ */
+import com.jme3.app.SimpleApplication;
+import com.jme3.bullet.BulletAppState;
+import com.jme3.bullet.PhysicsSpace;
+import com.jme3.bullet.collision.shapes.BoxCollisionShape;
+import com.jme3.bullet.collision.shapes.CollisionShape;
+import com.jme3.bullet.collision.shapes.SphereCollisionShape;
+import com.jme3.bullet.control.BetterCharacterControl;
+import com.jme3.bullet.control.GhostControl;
+import com.jme3.bullet.control.RigidBodyControl;
+import com.jme3.math.Vector3f;
+
+public class TestIssue889 extends SimpleApplication {
+
+ public static void main(String[] args) {
+ TestIssue889 app = new TestIssue889();
+ app.start();
+ }
+
+ @Override
+ public void simpleInitApp() {
+ flyCam.setEnabled(false);
+
+ BulletAppState bulletAppState = new BulletAppState();
+ bulletAppState.setDebugEnabled(true);
+ bulletAppState.setSpeed(0f);
+ stateManager.attach(bulletAppState);
+ PhysicsSpace space = bulletAppState.getPhysicsSpace();
+
+ float radius = 1f;
+ CollisionShape sphere = new SphereCollisionShape(radius);
+ CollisionShape box = new BoxCollisionShape(Vector3f.UNIT_XYZ);
+
+ RigidBodyControl rbc = new RigidBodyControl(box);
+ rbc.setEnabled(false);
+ rbc.setPhysicsSpace(space);
+ rootNode.addControl(rbc);
+
+ BetterCharacterControl bcc = new BetterCharacterControl(radius, 4f, 1f);
+ bcc.setEnabled(false);
+ bcc.setPhysicsSpace(space);
+ rootNode.addControl(bcc);
+
+ GhostControl gc = new GhostControl(sphere);
+ gc.setEnabled(false);
+ gc.setPhysicsSpace(space);
+ rootNode.addControl(gc);
+ }
+}
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue894.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue894.java
new file mode 100644
index 0000000000..9fa4616764
--- /dev/null
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue894.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2018 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package jme3test.bullet;
+
+/**
+ * Test case for JME issue #894: SliderJoint.setRestitutionOrthoLin() sets wrong
+ * joint parameter. The bug existed in Native Bullet only.
+ *
+ * If successful, no exception will be thrown during initialization.
+ */
+import com.jme3.app.SimpleApplication;
+import com.jme3.bullet.collision.shapes.CollisionShape;
+import com.jme3.bullet.collision.shapes.SphereCollisionShape;
+import com.jme3.bullet.joints.SliderJoint;
+import com.jme3.bullet.objects.PhysicsRigidBody;
+import com.jme3.math.Vector3f;
+
+public class TestIssue894 extends SimpleApplication {
+
+ public static void main(String[] args) {
+ TestIssue894 app = new TestIssue894();
+ app.start();
+ }
+
+ @Override
+ public void simpleInitApp() {
+ float radius = 1f;
+ CollisionShape sphere = new SphereCollisionShape(radius);
+
+ PhysicsRigidBody rb1 = new PhysicsRigidBody(sphere);
+ PhysicsRigidBody rb2 = new PhysicsRigidBody(sphere);
+ rb2.setPhysicsLocation(new Vector3f(4f, 0f, 0f));
+
+ SliderJoint joint = new SliderJoint(rb1, rb2,
+ new Vector3f(2f, 0f, 0f),
+ new Vector3f(-2f, 0f, 0f), true);
+
+ joint.setLowerAngLimit(-0.01f);
+ joint.setLowerLinLimit(-0.02f);
+ joint.setUpperAngLimit(0.01f);
+ joint.setUpperLinLimit(0.02f);
+
+ joint.setDampingDirAng(0.03f);
+ joint.setDampingDirLin(0.04f);
+ joint.setDampingLimAng(0.05f);
+ joint.setDampingLimLin(0.06f);
+ joint.setDampingOrthoAng(0.07f);
+ joint.setDampingOrthoLin(0.08f);
+
+ joint.setRestitutionDirAng(0.09f);
+ joint.setRestitutionDirLin(0.10f);
+ joint.setRestitutionLimAng(0.11f);
+ joint.setRestitutionLimLin(0.12f);
+ joint.setRestitutionOrthoAng(0.13f);
+ joint.setRestitutionOrthoLin(0.14f);
+
+ joint.setSoftnessDirAng(0.15f);
+ joint.setSoftnessDirLin(0.16f);
+ joint.setSoftnessLimAng(0.17f);
+ joint.setSoftnessLimLin(0.18f);
+ joint.setSoftnessOrthoAng(0.19f);
+ joint.setSoftnessOrthoLin(0.20f);
+
+ joint.setMaxAngMotorForce(0.21f);
+ joint.setMaxLinMotorForce(0.22f);
+
+ joint.setTargetAngMotorVelocity(0.23f);
+ joint.setTargetLinMotorVelocity(0.24f);
+
+ RuntimeException e = new RuntimeException();
+
+ if (joint.getLowerAngLimit() != -0.01f) {
+ throw new RuntimeException();
+ }
+ if (joint.getLowerLinLimit() != -0.02f) {
+ throw new RuntimeException();
+ }
+ if (joint.getUpperAngLimit() != 0.01f) {
+ throw new RuntimeException();
+ }
+ if (joint.getUpperLinLimit() != 0.02f) {
+ throw new RuntimeException();
+ }
+
+ if (joint.getDampingDirAng() != 0.03f) {
+ throw new RuntimeException();
+ }
+ if (joint.getDampingDirLin() != 0.04f) {
+ throw new RuntimeException();
+ }
+ if (joint.getDampingLimAng() != 0.05f) {
+ throw new RuntimeException();
+ }
+ if (joint.getDampingLimLin() != 0.06f) {
+ throw new RuntimeException();
+ }
+ if (joint.getDampingOrthoAng() != 0.07f) {
+ throw new RuntimeException();
+ }
+ if (joint.getDampingOrthoLin() != 0.08f) {
+ throw new RuntimeException();
+ }
+
+ if (joint.getRestitutionDirAng() != 0.09f) {
+ throw new RuntimeException();
+ }
+ if (joint.getRestitutionDirLin() != 0.10f) {
+ throw new RuntimeException();
+ }
+ if (joint.getRestitutionLimAng() != 0.11f) {
+ throw new RuntimeException();
+ }
+ if (joint.getRestitutionLimLin() != 0.12f) {
+ throw new RuntimeException();
+ }
+ if (joint.getRestitutionOrthoAng() != 0.13f) {
+ throw new RuntimeException();
+ }
+ if (joint.getRestitutionOrthoLin() != 0.14f) {
+ throw new RuntimeException();
+ }
+
+ if (joint.getSoftnessDirAng() != 0.15f) {
+ throw new RuntimeException();
+ }
+ if (joint.getSoftnessDirLin() != 0.16f) {
+ throw new RuntimeException();
+ }
+ if (joint.getSoftnessLimAng() != 0.17f) {
+ throw new RuntimeException();
+ }
+ if (joint.getSoftnessLimLin() != 0.18f) {
+ throw new RuntimeException();
+ }
+ if (joint.getSoftnessOrthoAng() != 0.19f) {
+ throw new RuntimeException();
+ }
+ if (joint.getSoftnessOrthoLin() != 0.20f) {
+ throw new RuntimeException();
+ }
+
+ if (joint.getMaxAngMotorForce() != 0.21f) {
+ throw new RuntimeException();
+ }
+ if (joint.getMaxLinMotorForce() != 0.22f) {
+ throw new RuntimeException();
+ }
+
+ if (joint.getTargetAngMotorVelocity() != 0.23f) {
+ throw new RuntimeException();
+ }
+ if (joint.getTargetLinMotorVelocity() != 0.24f) {
+ throw new RuntimeException();
+ }
+ }
+}
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue911.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue911.java
new file mode 100644
index 0000000000..4698add65e
--- /dev/null
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue911.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2018 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package jme3test.bullet;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.bullet.collision.shapes.CollisionShape;
+import com.jme3.bullet.collision.shapes.SphereCollisionShape;
+import com.jme3.bullet.objects.PhysicsRigidBody;
+
+/**
+ * Test case for JME issue #911: PhysicsRigidBody sleeping threshold setters
+ * have unexpected side effects. The bug existed in Native Bullet only.
+ *
+ * If successful, no exception will be thrown.
+ */
+public class TestIssue911 extends SimpleApplication {
+ // *************************************************************************
+ // new methods exposed
+
+ public static void main(String[] args) {
+ TestIssue911 app = new TestIssue911();
+ app.start();
+ }
+ // *************************************************************************
+ // SimpleApplication methods
+
+ @Override
+ public void simpleInitApp() {
+ CollisionShape capsule = new SphereCollisionShape(1f);
+ PhysicsRigidBody body = new PhysicsRigidBody(capsule, 1f);
+ assert body.getAngularSleepingThreshold() == 1f;
+ assert body.getLinearSleepingThreshold() == 0.8f;
+
+ body.setAngularSleepingThreshold(0.03f);
+
+ assert body.getAngularSleepingThreshold() == 0.03f;
+ float lst = body.getLinearSleepingThreshold();
+ assert lst == 0.8f : lst; // fails, actual value is 1f
+
+ body.setLinearSleepingThreshold(0.17f);
+
+ float ast = body.getAngularSleepingThreshold();
+ assert ast == 0.03f : ast; // fails, actual value is 1f
+
+ stop();
+ }
+}
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue918.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue918.java
new file mode 100644
index 0000000000..ed5a726646
--- /dev/null
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue918.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2018 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package jme3test.bullet;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.bullet.collision.shapes.CollisionShape;
+import com.jme3.bullet.collision.shapes.SphereCollisionShape;
+import com.jme3.bullet.joints.Point2PointJoint;
+import com.jme3.bullet.objects.PhysicsRigidBody;
+import com.jme3.math.Vector3f;
+
+/**
+ * Test case for JME issue #918: Point2PointJoint.getImpulseClamp() and
+ * .getTau() return the damping value instead. The bug existed in Native Bullet
+ * only.
+ *
+ * If successful, no UnsatisfiedLinkError exception will be thrown.
+ */
+public class TestIssue918 extends SimpleApplication {
+ // *************************************************************************
+ // new methods exposed
+
+ public static void main(String[] args) {
+ TestIssue918 app = new TestIssue918();
+ app.start();
+ }
+ // *************************************************************************
+ // SimpleApplication methods
+
+ @Override
+ public void simpleInitApp() {
+ CollisionShape capsule = new SphereCollisionShape(1f);
+ PhysicsRigidBody body1 = new PhysicsRigidBody(capsule, 1f);
+ PhysicsRigidBody body2 = new PhysicsRigidBody(capsule, 1f);
+ Vector3f pivot1 = new Vector3f();
+ Vector3f pivot2 = new Vector3f();
+ Point2PointJoint joint
+ = new Point2PointJoint(body1, body2, pivot1, pivot2);
+
+ joint.setImpulseClamp(42f);
+ joint.setTau(99f);
+
+ if (joint.getImpulseClamp() != 42f) {
+ throw new RuntimeException();
+ }
+ if (joint.getTau() != 99f) {
+ throw new RuntimeException();
+ }
+
+ stop();
+ }
+}
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue919.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue919.java
new file mode 100644
index 0000000000..3fb6578e0b
--- /dev/null
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue919.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2018 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package jme3test.bullet;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.bullet.collision.shapes.CollisionShape;
+import com.jme3.bullet.collision.shapes.SphereCollisionShape;
+import com.jme3.bullet.joints.SixDofJoint;
+import com.jme3.bullet.objects.PhysicsRigidBody;
+import com.jme3.math.Vector3f;
+
+/**
+ * Test case for JME issue #919: native implementation of
+ * TranslationalLimitMotor.getLimitSoftness() has wrong name. The bug existed in
+ * Native Bullet only.
+ *
+ * If successful, no UnsatisfiedLinkError exception will be thrown.
+ */
+public class TestIssue919 extends SimpleApplication {
+ // *************************************************************************
+ // new methods exposed
+
+ public static void main(String[] args) {
+ TestIssue919 app = new TestIssue919();
+ app.start();
+ }
+ // *************************************************************************
+ // SimpleApplication methods
+
+ @Override
+ public void simpleInitApp() {
+ CollisionShape capsule = new SphereCollisionShape(1f);
+ PhysicsRigidBody body1 = new PhysicsRigidBody(capsule, 1f);
+ PhysicsRigidBody body2 = new PhysicsRigidBody(capsule, 1f);
+ Vector3f pivot1 = new Vector3f();
+ Vector3f pivot2 = new Vector3f();
+ SixDofJoint joint = new SixDofJoint(body1, body2, pivot1, pivot2, true);
+
+ joint.getTranslationalLimitMotor().getLimitSoftness();
+
+ stop();
+ }
+}
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue928.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue928.java
new file mode 100644
index 0000000000..886fb8259c
--- /dev/null
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue928.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2018 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package jme3test.bullet;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.bullet.BulletAppState;
+import com.jme3.bullet.BulletAppState.ThreadingType;
+
+/**
+ * Test case for JME issue #928: crash after 64 attached and detached
+ * BulletAppStates with parallel threading. The bug existed in Native Bullet
+ * only.
+ *
+ * If successful, no crash will occur.
+ */
+public class TestIssue928 extends SimpleApplication {
+ // *************************************************************************
+ // new methods exposed
+
+ public static void main(String[] args) {
+ TestIssue928 app = new TestIssue928();
+ app.start();
+ }
+
+ int count = 0;
+ int frame = 0;
+ BulletAppState bulletAppState;
+ // *************************************************************************
+ // SimpleApplication methods
+
+ @Override
+ public void simpleInitApp() {
+ }
+
+ @Override
+ public void simpleUpdate(float tpf) {
+ if (frame % 4 == 0) {
+ System.out.println(++count);
+ bulletAppState = new BulletAppState();
+ bulletAppState.setThreadingType(ThreadingType.PARALLEL);
+ stateManager.attach(bulletAppState);
+ } else if (frame % 4 == 2) {
+ stateManager.detach(bulletAppState);
+ }
+
+ frame++;
+ if (count == 70) {
+ System.exit(0);
+ }
+ }
+}
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestIssue931.java b/jme3-examples/src/main/java/jme3test/bullet/TestIssue931.java
new file mode 100644
index 0000000000..63d56dd53f
--- /dev/null
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestIssue931.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2018 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package jme3test.bullet;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.bullet.BulletAppState;
+import com.jme3.bullet.control.KinematicRagdollControl;
+import com.jme3.scene.Node;
+import com.jme3.scene.Spatial;
+
+/**
+ * Test case for JME issue #931: RagdollUtils can miss model meshes or use the
+ * non-animated ones.
+ *
+ * If successful, no AssertionError will be thrown.
+ */
+public class TestIssue931 extends SimpleApplication {
+ // *************************************************************************
+ // new methods exposed
+
+ public static void main(String[] args) {
+ TestIssue931 app = new TestIssue931();
+ app.start();
+ }
+ // *************************************************************************
+ // SimpleApplication methods
+
+ @Override
+ public void simpleInitApp() {
+ BulletAppState bulletAppState = new BulletAppState();
+ stateManager.attach(bulletAppState);
+ String sinbadPath = "Models/Sinbad/SinbadOldAnim.j3o";
+ Node sinbad = (Node) assetManager.loadModel(sinbadPath);
+
+ Node extender = new Node();
+ for (Spatial child : sinbad.getChildren()) {
+ extender.attachChild(child);
+ }
+ sinbad.attachChild(extender);
+
+ //Note: PhysicsRagdollControl is still a WIP, constructor will change
+ KinematicRagdollControl ragdoll = new KinematicRagdollControl(0.5f);
+ sinbad.addControl(ragdoll);
+
+ stop();
+ }
+}
diff --git a/jme3-examples/src/main/java/jme3test/bullet/TestPhysicsRayCast.java b/jme3-examples/src/main/java/jme3test/bullet/TestPhysicsRayCast.java
index 7a1ea5187a..24665b42b7 100644
--- a/jme3-examples/src/main/java/jme3test/bullet/TestPhysicsRayCast.java
+++ b/jme3-examples/src/main/java/jme3test/bullet/TestPhysicsRayCast.java
@@ -8,9 +8,11 @@
import com.jme3.bullet.control.RigidBodyControl;
import com.jme3.bullet.util.CollisionShapeFactory;
import com.jme3.font.BitmapText;
+import com.jme3.math.Vector3f;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import java.util.List;
+
/**
*
* @author @wezrule
@@ -42,12 +44,19 @@ public void simpleInitApp() {
@Override
public void simpleUpdate(float tpf) {
- List
- * Objects with "mesh" type collision shape will not collide with each other.
+ * This type of collision shape is mesh-accurate and meant for immovable
+ * "world objects". Examples include terrain, houses or whole shooter
+ * levels.
+ *
- * Objects with "mesh" type collision shape will not collide with each other.
- * Creates a HeightfieldCollisionShape if the supplied spatial is a TerrainQuad.
- * @return A MeshCollisionShape or a CompoundCollisionShape with MeshCollisionShapes as children if the supplied spatial is a Node. A HeightieldCollisionShape if a TerrainQuad was supplied.
+ * Create a mesh shape for the given Spatial.
+ *
- * If you want to have mesh-accurate dynamic shapes (CPU intense!!!) use GImpact shapes, its probably best to do so with a low-poly version of your model.
- * @return A HullCollisionShape or a CompoundCollisionShape with HullCollisionShapes as children if the supplied spatial is a Node.
+ * Create a hull shape for the given Spatial.
+ *
- * Objects with "mesh" type collision shape will not collide with each other.
+ * This type of collision shape is mesh-accurate and meant for immovable
+ * "world objects". Examples include terrain, houses or whole shooter
+ * levels.
+ *
+ * Create a hull collision shape for the specified geometry.
+ *
+ * @param geom the geometry on which to base the shape (not null)
+ * @param parent
*/
private static HullCollisionShape createSingleDynamicMeshShape(Geometry geom, Spatial parent) {
Mesh mesh = geom.getMesh();
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/PhysicsSpace.java b/jme3-bullet/src/main/java/com/jme3/bullet/PhysicsSpace.java
index f0df9740c5..ea5f74518d 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/PhysicsSpace.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/PhysicsSpace.java
@@ -32,7 +32,6 @@
package com.jme3.bullet;
import com.jme3.app.AppTask;
-import com.jme3.asset.AssetManager;
import com.jme3.bullet.collision.*;
import com.jme3.bullet.collision.shapes.CollisionShape;
import com.jme3.bullet.control.PhysicsControl;
@@ -46,6 +45,7 @@
import com.jme3.math.Vector3f;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
+import com.jme3.util.SafeArrayList;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
@@ -55,6 +55,7 @@
import java.util.List;
import java.util.Map;
import java.util.Comparator;
+import java.util.Deque;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -63,17 +64,36 @@
import java.util.logging.Logger;
/**
- *
For
- * parallel physics, this can also be called from the OpenGL thread to
- * receive the PhysicsSpace
+ * Access the PhysicsSpace running on this thread. For parallel
+ * physics, this can be invoked from the OpenGL thread.
*
* @return the PhysicsSpace running on this thread
*/
@@ -125,24 +188,47 @@ public static PhysicsSpace getPhysicsSpace() {
/**
* Used internally
*
- * @param space
+ * @param space which physics space to simulate on this thread
*/
public static void setLocalThreadPhysicsSpace(PhysicsSpace space) {
physicsSpaceTL.set(space);
}
+ /**
+ * Instantiate a PhysicsSpace. Must be invoked on the designated physics
+ * thread.
+ */
public PhysicsSpace() {
this(new Vector3f(-10000f, -10000f, -10000f), new Vector3f(10000f, 10000f, 10000f), BroadphaseType.DBVT);
}
+ /**
+ * Instantiate a PhysicsSpace. Must be invoked on the designated physics
+ * thread.
+ */
public PhysicsSpace(BroadphaseType broadphaseType) {
this(new Vector3f(-10000f, -10000f, -10000f), new Vector3f(10000f, 10000f, 10000f), broadphaseType);
}
+ /**
+ * Instantiate a PhysicsSpace. Must be invoked on the designated physics
+ * thread.
+ */
public PhysicsSpace(Vector3f worldMin, Vector3f worldMax) {
this(worldMin, worldMax, BroadphaseType.AXIS_SWEEP_3);
}
+ /**
+ * Instantiate a PhysicsSpace. Must be invoked on the designated physics
+ * thread.
+ *
+ * @param worldMin the desired minimum coordinates values (not null,
+ * unaffected, default=-10k,-10k,-10k)
+ * @param worldMax the desired minimum coordinates values (not null,
+ * unaffected, default=10k,10k,10k)
+ * @param broadphaseType which broadphase collision-detection algorithm to
+ * use (not null)
+ */
public PhysicsSpace(Vector3f worldMin, Vector3f worldMax, BroadphaseType broadphaseType) {
this.worldMin.set(worldMin);
this.worldMax.set(worldMax);
@@ -151,7 +237,7 @@ public PhysicsSpace(Vector3f worldMin, Vector3f worldMax, BroadphaseType broadph
}
/**
- * Has to be called from the (designated) physics thread
+ * Must be invoked on the designated physics thread.
*/
public void create() {
physicsSpaceId = createPhysicsSpace(worldMin.x, worldMin.y, worldMin.z, worldMax.x, worldMax.y, worldMax.z, broadphaseType.ordinal(), false);
@@ -192,26 +278,37 @@ public void create() {
private native long createPhysicsSpace(float minX, float minY, float minZ, float maxX, float maxY, float maxZ, int broadphaseType, boolean threading);
+ /**
+ * Callback invoked just before the physics is stepped.
+ *
+ * Simulate for the specified time interval, using no more than the
+ * specified number of steps.
*
- * @param time the current time value
- * @param maxSteps
+ * @param time the time interval (in seconds, ≥0)
+ * @param maxSteps the maximum number of steps (≥1)
*/
public void update(float time, int maxSteps) {
// if (getDynamicsWorld() == null) {
@@ -378,6 +483,9 @@ public void update(float time, int maxSteps) {
private native void stepSimulation(long space, float time, int maxSteps, float accuracy);
+ /**
+ * Distribute each collision event to all listeners.
+ */
public void distributeEvents() {
//add collision callbacks
int clistsize = collisionListeners.size();
@@ -391,6 +499,13 @@ public void distributeEvents() {
}
}
+ /**
+ * Enqueue a callable on the currently executing thread.
+ *
+ * @param
There can be only one listener
- * per collision group.
+ * Register the specified collision-group listener with the specified
+ * collision group of this space.
+ *
You have to use different Transforms for
- * start and end (at least distance > allowedCcdPenetration). SweepTest will not see a
- * collision if it starts INSIDE an object and is moving AWAY from its
- * center.
+ * Perform a sweep-collision test and store the results in an existing list.
+ *
+ * Alter the accuracy (time step) of the physics simulation.
+ *
- * The groups are integer bit masks and some pre-made variables are available in CollisionObject.
- * All physics objects are by default in COLLISION_GROUP_01.
- * Two object will collide when one of the parties has the
- * collisionGroup of the other in its collideWithGroups set.
- * @param collisionGroup the collisionGroup to set
+ * Alter the collision group for this physics object.
+ *
- * Two object will collide when one of the parties has the
- * collisionGroup of the other in its collideWithGroups set.
- * @param collisionGroup
+ * Add collision groups to the set with which this object can collide.
+ *
+ * Two objects can collide only if one of them has the collisionGroup of the
+ * other in its collideWithGroups set.
+ *
+ * @param collisionGroup groups to add (bit mask)
*/
public void addCollideWithGroup(int collisionGroup) {
this.collisionGroupsMask = this.collisionGroupsMask | collisionGroup;
@@ -121,8 +203,9 @@ public void addCollideWithGroup(int collisionGroup) {
}
/**
- * Remove a group from the list this object collides with.
- * @param collisionGroup
+ * Remove collision groups from the set with which this object can collide.
+ *
+ * @param collisionGroup groups to remove, ORed together (bit mask)
*/
public void removeCollideWithGroup(int collisionGroup) {
this.collisionGroupsMask = this.collisionGroupsMask & ~collisionGroup;
@@ -132,8 +215,9 @@ public void removeCollideWithGroup(int collisionGroup) {
}
/**
- * Directly set the bitmask for collision groups that this object collides with.
- * @param collisionGroups
+ * Directly alter the collision groups with which this object can collide.
+ *
+ * @param collisionGroups desired groups, ORed together (bit mask)
*/
public void setCollideWithGroups(int collisionGroups) {
this.collisionGroupsMask = collisionGroups;
@@ -143,13 +227,18 @@ public void setCollideWithGroups(int collisionGroups) {
}
/**
- * Gets the bitmask of collision groups that this object collides with.
- * @return Collision groups mask
+ * Read the set of collision groups with which this object can collide.
+ *
+ * @return bit mask
*/
public int getCollideWithGroups() {
return collisionGroupsMask;
}
+ /**
+ * Initialize the user pointer and collision-group information of this
+ * object.
+ */
protected void initUserPointer() {
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "initUserPointer() objectId = {0}", Long.toHexString(objectId));
initUserPointer(objectId, collisionGroup, collisionGroupsMask);
@@ -157,27 +246,51 @@ protected void initUserPointer() {
native void initUserPointer(long objectId, int group, int groups);
/**
- * @return the userObject
+ * Access the user object associated with this collision object.
+ *
+ * @return the pre-existing instance, or null if none
*/
public Object getUserObject() {
return userObject;
}
/**
- * @param userObject the userObject to set
+ * Associate a user object (such as a Spatial) with this collision object.
+ *
+ * @param userObject the object to associate with this collision object
+ * (alias created, may be null)
*/
public void setUserObject(Object userObject) {
this.userObject = userObject;
}
- public long getObjectId(){
+ /**
+ * Read the id of the btCollisionObject.
+ *
+ * @return the unique identifier (not zero)
+ */
+ public long getObjectId(){
return objectId;
}
+ /**
+ * Attach the identified btCollisionShape to the identified
+ * btCollisionObject. Native method.
+ *
+ * @param objectId the unique identifier of the btCollisionObject (not zero)
+ * @param collisionShapeId the unique identifier of the btCollisionShape
+ * (not zero)
+ */
protected native void attachCollisionShape(long objectId, long collisionShapeId);
native void setCollisionGroup(long objectId, int collisionGroup);
native void setCollideWithGroups(long objectId, int collisionGroups);
+ /**
+ * Serialize this object, for example when saving to a J3O file.
+ *
+ * @param e exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter e) throws IOException {
OutputCapsule capsule = e.getCapsule(this);
@@ -186,6 +299,12 @@ public void write(JmeExporter e) throws IOException {
capsule.write(collisionShape, "collisionShape", null);
}
+ /**
+ * De-serialize this object, for example when loading from a J3O file.
+ *
+ * @param e importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter e) throws IOException {
InputCapsule capsule = e.getCapsule(this);
@@ -195,6 +314,12 @@ public void read(JmeImporter e) throws IOException {
collisionShape = shape;
}
+ /**
+ * Finalize this collision object just before it is destroyed. Should be
+ * invoked only by a subclass or by the garbage collector.
+ *
+ * @throws Throwable ignored by the garbage collector
+ */
@Override
protected void finalize() throws Throwable {
super.finalize();
@@ -202,5 +327,10 @@ protected void finalize() throws Throwable {
finalizeNative(objectId);
}
+ /**
+ * Finalize the identified btCollisionObject. Native method.
+ *
+ * @param objectId the unique identifier of the btCollisionObject (not zero)
+ */
protected native void finalizeNative(long objectId);
}
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsRayTestResult.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsRayTestResult.java
index bbc231fa7d..02bf0162e6 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsRayTestResult.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsRayTestResult.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,47 +34,67 @@
import com.jme3.math.Vector3f;
/**
- * Contains the results of a PhysicsSpace rayTest
- * bulletAppState.getPhysicsSpace().rayTest(new Vector3f(0,1000,0),new Vector3f(0,-1000,0));
- javap -s java.util.List
+ * Represent the results of a Bullet ray test.
+ *
* @author Empire-Phoenix,normenhansen
*/
public class PhysicsRayTestResult {
+ /**
+ * collision object that was hit
+ */
private PhysicsCollisionObject collisionObject;
+ /**
+ * normal vector at the point of contact
+ */
private Vector3f hitNormalLocal;
+ /**
+ * fraction of the ray's total length (from=0, to=1, ≥0, ≤1)
+ */
private float hitFraction;
+ /**
+ * true→need to transform normal into world space
+ */
private boolean normalInWorldSpace = true;
/**
- * allocated by native code only
+ * A private constructor to inhibit instantiation of this class by Java.
+ * These results are instantiated exclusively by native code.
*/
private PhysicsRayTestResult() {
}
/**
- * @return the collisionObject
+ * Access the collision object that was hit.
+ *
+ * @return the pre-existing instance
*/
public PhysicsCollisionObject getCollisionObject() {
return collisionObject;
}
/**
- * @return the hitNormalLocal
+ * Access the normal vector at the point of contact.
+ *
+ * @return a pre-existing unit vector (not null)
*/
public Vector3f getHitNormalLocal() {
return hitNormalLocal;
}
/**
- * @return the hitFraction
+ * Read the fraction of the ray's total length.
+ *
+ * @return fraction (from=0, to=1, ≥0, ≤1)
*/
public float getHitFraction() {
return hitFraction;
}
/**
- * @return the normalInWorldSpace
+ * Test whether the normal is in world space.
+ *
+ * @return true if in world space, otherwise false
*/
public boolean isNormalInWorldSpace() {
return normalInWorldSpace;
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsSweepTestResult.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsSweepTestResult.java
index 8e61b66a24..9becbb1c76 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsSweepTestResult.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/PhysicsSweepTestResult.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,16 +34,33 @@
import com.jme3.math.Vector3f;
/**
- * Contains the results of a PhysicsSpace rayTest
+ * Represent the results of a Bullet sweep test.
+ *
* @author normenhansen
*/
public class PhysicsSweepTestResult {
+ /**
+ * collision object that was hit
+ */
private PhysicsCollisionObject collisionObject;
+ /**
+ * normal vector at the point of contact
+ */
private Vector3f hitNormalLocal;
+ /**
+ * fraction of the way between the transforms (from=0, to=1, ≥0, ≤1)
+ */
private float hitFraction;
+ /**
+ * true→need to transform normal into world space
+ */
private boolean normalInWorldSpace;
+ /**
+ * A private constructor to inhibit instantiation of this class by Java.
+ * These results are instantiated exclusively by native code.
+ */
public PhysicsSweepTestResult() {
}
@@ -55,33 +72,50 @@ public PhysicsSweepTestResult(PhysicsCollisionObject collisionObject, Vector3f h
}
/**
- * @return the collisionObject
+ * Access the collision object that was hit.
+ *
+ * @return the pre-existing instance
*/
public PhysicsCollisionObject getCollisionObject() {
return collisionObject;
}
/**
- * @return the hitNormalLocal
+ * Access the normal vector at the point of contact.
+ *
+ * @return the pre-existing vector (not null)
*/
public Vector3f getHitNormalLocal() {
return hitNormalLocal;
}
/**
- * @return the hitFraction
+ * Read the fraction of fraction of the way between the transforms (from=0,
+ * to=1, ≥0, ≤1)
+ *
+ * @return fraction (from=0, to=1, ≥0, ≤1)
*/
public float getHitFraction() {
return hitFraction;
}
/**
- * @return the normalInWorldSpace
+ * Test whether the normal is in world space.
+ *
+ * @return true if in world space, otherwise false
*/
public boolean isNormalInWorldSpace() {
return normalInWorldSpace;
}
+ /**
+ * Fill in the fields of this result.
+ *
+ * @param collisionObject
+ * @param hitNormalLocal
+ * @param hitFraction
+ * @param normalInWorldSpace
+ */
public void fill(PhysicsCollisionObject collisionObject, Vector3f hitNormalLocal, float hitFraction, boolean normalInWorldSpace) {
this.collisionObject = collisionObject;
this.hitNormalLocal = hitNormalLocal;
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/BoxCollisionShape.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/BoxCollisionShape.java
index 000bb2dc7a..bec41ff97f 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/BoxCollisionShape.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/BoxCollisionShape.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -41,35 +41,63 @@
import java.util.logging.Logger;
/**
- * Basic box collision shape
+ * A rectangular-solid collision shape based on Bullet's btBoxShape.
+ *
* @author normenhansen
*/
public class BoxCollisionShape extends CollisionShape {
+ /**
+ * copy of half-extents of the box on each local axis (not null, no negative
+ * component)
+ */
private Vector3f halfExtents;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public BoxCollisionShape() {
}
/**
- * creates a collision box from the given halfExtents
- * @param halfExtents the halfExtents of the CollisionBox
+ * Instantiate a box shape with the specified half extents.
+ *
+ * @param halfExtents the desired unscaled half extents (not null, no
+ * negative component, alias created)
*/
public BoxCollisionShape(Vector3f halfExtents) {
this.halfExtents = halfExtents;
createShape();
}
+ /**
+ * Access the half extents of the box.
+ *
+ * @return the pre-existing instance (not null, no negative component)
+ */
public final Vector3f getHalfExtents() {
return halfExtents;
}
-
+
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
super.write(ex);
OutputCapsule capsule = ex.getCapsule(this);
capsule.write(halfExtents, "halfExtents", new Vector3f(1, 1, 1));
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
public void read(JmeImporter im) throws IOException {
super.read(im);
InputCapsule capsule = im.getCapsule(this);
@@ -78,6 +106,9 @@ public void read(JmeImporter im) throws IOException {
createShape();
}
+ /**
+ * Instantiate the configured shape in Bullet.
+ */
protected void createShape() {
objectId = createShape(halfExtents);
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Shape {0}", Long.toHexString(objectId));
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CapsuleCollisionShape.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CapsuleCollisionShape.java
index 00ccdf74e1..0a15b343e3 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CapsuleCollisionShape.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CapsuleCollisionShape.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -41,20 +41,37 @@
import java.util.logging.Logger;
/**
- * Basic capsule collision shape
+ * A capsule collision shape based on Bullet's btCapsuleShapeX, btCapsuleShape,
+ * or btCapsuleShapeZ. These shapes have no margin and cannot be scaled.
+ *
* @author normenhansen
*/
public class CapsuleCollisionShape extends CollisionShape{
- protected float radius,height;
- protected int axis;
+ /**
+ * copy of height of the cylindrical portion (≥0)
+ */
+ private float height;
+ /**
+ * copy of radius (≥0)
+ */
+ private float radius;
+ /**
+ * copy of main (height) axis (0→X, 1→Y, 2→Z)
+ */
+ private int axis;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public CapsuleCollisionShape() {
}
/**
- * creates a new CapsuleCollisionShape with the given radius and height
- * @param radius the radius of the capsule
- * @param height the height of the capsule
+ * Instantiate a Y-axis capsule shape with the specified radius and height.
+ *
+ * @param radius the desired radius (≥0)
+ * @param height the desired height (of the cylindrical portion) (≥0)
*/
public CapsuleCollisionShape(float radius, float height) {
this.radius=radius;
@@ -64,10 +81,11 @@ public CapsuleCollisionShape(float radius, float height) {
}
/**
- * creates a capsule shape around the given axis (0=X,1=Y,2=Z)
- * @param radius
- * @param height
- * @param axis
+ * Instantiate a capsule shape around the specified main (height) axis.
+ *
+ * @param radius the desired radius (≥0)
+ * @param height the desired height (of the cylindrical portion) (≥0)
+ * @param axis which local axis: 0→X, 1→Y, 2→Z
*/
public CapsuleCollisionShape(float radius, float height, int axis) {
this.radius=radius;
@@ -76,20 +94,39 @@ public CapsuleCollisionShape(float radius, float height, int axis) {
createShape();
}
+ /**
+ * Read the radius of the capsule.
+ *
+ * @return the radius (≥0)
+ */
public float getRadius() {
return radius;
}
+ /**
+ * Read the height (of the cylindrical portion) of the capsule.
+ *
+ * @return height (≥0)
+ */
public float getHeight() {
return height;
}
+ /**
+ * Determine the main (height) axis of the capsule.
+ *
+ * @return 0 for local X, 1 for local Y, or 2 for local Z
+ */
public int getAxis() {
return axis;
}
/**
- * WARNING - CompoundCollisionShape scaling has no effect.
+ * Alter the scaling factors of this shape. Scaling is disabled
+ * for capsule shapes.
+ *
+ * @param scale the desired scaling factor for each local axis (not null, no
+ * negative component, unaffected, default=1,1,1)
*/
@Override
public void setScale(Vector3f scale) {
@@ -98,6 +135,12 @@ public void setScale(Vector3f scale) {
}
}
+ /**
+ * Serialize this shape, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
super.write(ex);
OutputCapsule capsule = ex.getCapsule(this);
@@ -106,6 +149,12 @@ public void write(JmeExporter ex) throws IOException {
capsule.write(axis, "axis", 1);
}
+ /**
+ * De-serialize this shape, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
public void read(JmeImporter im) throws IOException {
super.read(im);
InputCapsule capsule = im.getCapsule(this);
@@ -115,6 +164,9 @@ public void read(JmeImporter im) throws IOException {
createShape();
}
+ /**
+ * Instantiate the configured shape in Bullet.
+ */
protected void createShape(){
objectId = createShape(axis, radius, height);
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Shape {0}", Long.toHexString(objectId));
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CollisionShape.java b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CollisionShape.java
index c5b390e0e1..ea6f11be9c 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CollisionShape.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/collision/shapes/CollisionShape.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -38,15 +38,31 @@
import java.util.logging.Logger;
/**
- * This Object holds information about a jbullet CollisionShape to be able to reuse
- * CollisionShapes (as suggested in bullet manuals)
- * TODO: add static methods to create shapes from nodes (like jbullet-jme constructor)
+ * The abstract base class for collision shapes based on Bullet's
+ * btCollisionShape.
+ *
+ *
+ *
* @author Brent Owens
*/
public class HeightfieldCollisionShape extends CollisionShape {
+ /**
+ * number of rows in the heightfield (>1)
+ */
protected int heightStickWidth;
+ /**
+ * number of columns in the heightfield (>1)
+ */
protected int heightStickLength;
+ /**
+ * array of heightfield samples
+ */
protected float[] heightfieldData;
protected float heightScale;
protected float minHeight;
protected float maxHeight;
+ /**
+ * index of the height axis (0→X, 1→Y, 2→Z)
+ */
protected int upAxis;
protected boolean flipQuadEdges;
+ /**
+ * buffer for passing height data to Bullet
+ * memoryOptimized determines if optimized instead of
- * quantized BVH will be used.
- * Internally, memoryOptimized BVH is slower to calculate (~4x)
- * but also smaller (~0.5x).
- * It is preferable to use the memory optimized version and then serialize
- * the resulting MeshCollisionshape as this will also save the
- * generated BVH.
- * An exception can be procedurally / generated collision shapes, where
- * the generation time is more of a concern
+ * Instantiate a collision shape based on the specified JME mesh.
+ * memoryOptimized determines if optimized instead of quantized
+ * BVH will be used. Internally, memoryOptimized BVH is slower
+ * to calculate (~4x) but also smaller (~0.5x). It is preferable to use the
+ * memory optimized version and then serialize the resulting
+ * MeshCollisionshape as this will also save the generated BVH. An exception
+ * can be procedurally / generated collision shapes, where the generation
+ * time is more of a concern
*
- * @param mesh the Mesh to use
- * @param memoryOptimized True to generate a memory optimized BVH,
- * false to generate quantized BVH.
+ * @param mesh the mesh on which to base the shape (not null)
+ * @param memoryOptimized true to generate a memory-optimized BVH, false to
+ * generate quantized BVH
*/
public MeshCollisionShape(final Mesh mesh, final boolean memoryOptimized) {
this.memoryOptimized = memoryOptimized;
@@ -103,16 +110,15 @@ public MeshCollisionShape(final Mesh mesh, final boolean memoryOptimized) {
}
/**
- * Advanced constructor, usually you don’t want to use this, but the Mesh
- * based one. Passing false values can lead to a crash, use at own risk
- *
+ * An advanced constructor. Passing false values can lead to a crash.
+ * Usually you don’t want to use this. Use at own risk.
+ *
- * To create ragdolls, the cone twist constraint is very useful for limbs like the upper arm.
- * It is a special point to point constraint that adds cone and twist axis limits.
- * The x-axis serves as twist axis.
+ * A joint based on Bullet's btConeTwistConstraint.
+ *
+ * To create ragdolls, the cone twist constraint is very useful for limbs like
+ * the upper arm. It is a special point to point constraint that adds cone and
+ * twist axis limits. The x-axis serves as twist axis.
+ *
* @author normenhansen
*/
public class ConeJoint extends PhysicsJoint {
@@ -57,12 +60,25 @@ public class ConeJoint extends PhysicsJoint {
protected float twistSpan = 1e30f;
protected boolean angularOnly = false;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public ConeJoint() {
}
/**
- * @param pivotA local translation of the joint connection point in node A
- * @param pivotB local translation of the joint connection point in node B
+ * Instantiate a ConeJoint. To be effective, the joint must be added to a
+ * physics space.
+ *
+ * @param nodeA the 1st body connected by the joint (not null, alias
+ * created)
+ * @param nodeB the 2nd body connected by the joint (not null, alias
+ * created)
+ * @param pivotA the local offset of the connection point in node A (not
+ * null, alias created)
+ * @param pivotB the local offset of the connection point in node B (not
+ * null, alias created)
*/
public ConeJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB) {
super(nodeA, nodeB, pivotA, pivotB);
@@ -72,8 +88,21 @@ public ConeJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA
}
/**
+ * Instantiate a ConeJoint. To be effective, the joint must be added to a
+ * physics space.
+ *
+ * @param nodeA the 1st body connected by the joint (not null, alias
+ * created)
+ * @param nodeB the 2nd body connected by the joint (not null, alias
+ * created)
* @param pivotA local translation of the joint connection point in node A
+ * (not null, alias created)
* @param pivotB local translation of the joint connection point in node B
+ * (not null, alias created)
+ * @param rotA the local orientation of the connection to node A (not null,
+ * alias created)
+ * @param rotB the local orientation of the connection to node B (not null,
+ * alias created)
*/
public ConeJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB, Matrix3f rotA, Matrix3f rotB) {
super(nodeA, nodeB, pivotA, pivotB);
@@ -82,6 +111,13 @@ public ConeJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA
createJoint();
}
+ /**
+ * Alter the angular limits for this joint.
+ *
+ * @param swingSpan1 angle (in radians)
+ * @param swingSpan2 angle (in radians)
+ * @param twistSpan angle (in radians)
+ */
public void setLimit(float swingSpan1, float swingSpan2, float twistSpan) {
this.swingSpan1 = swingSpan1;
this.swingSpan2 = swingSpan2;
@@ -91,6 +127,11 @@ public void setLimit(float swingSpan1, float swingSpan2, float twistSpan) {
private native void setLimit(long objectId, float swingSpan1, float swingSpan2, float twistSpan);
+ /**
+ * Alter whether this joint is angular only.
+ *
+ * @param value the desired setting (default=false)
+ */
public void setAngularOnly(boolean value) {
angularOnly = value;
setAngularOnly(objectId, value);
@@ -98,6 +139,12 @@ public void setAngularOnly(boolean value) {
private native void setAngularOnly(long objectId, boolean value);
+ /**
+ * Serialize this joint, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
super.write(ex);
@@ -111,6 +158,12 @@ public void write(JmeExporter ex) throws IOException {
capsule.write(twistSpan, "twistSpan", 1e30f);
}
+ /**
+ * De-serialize this joint, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
super.read(im);
@@ -125,6 +178,9 @@ public void read(JmeImporter im) throws IOException {
createJoint();
}
+ /**
+ * Create the configured joint in Bullet.
+ */
protected void createJoint() {
objectId = createJoint(nodeA.getObjectId(), nodeB.getObjectId(), pivotA, rotA, pivotB, rotB);
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Joint {0}", Long.toHexString(objectId));
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/joints/HingeJoint.java b/jme3-bullet/src/main/java/com/jme3/bullet/joints/HingeJoint.java
index 352517df7c..609516287e 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/joints/HingeJoint.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/joints/HingeJoint.java
@@ -42,29 +42,63 @@
import java.util.logging.Logger;
/**
- * From bullet manual:
- * Hinge constraint, or revolute joint restricts two additional angular degrees of freedom,
- * so the body can only rotate around one axis, the hinge axis.
- * This can be useful to represent doors or wheels rotating around one axis.
- * The user can specify limits and motor for the hinge.
+ * A joint based on Bullet's btHingeConstraint.
+ *
+ * Hinge constraint, or revolute joint restricts two additional angular degrees
+ * of freedom, so the body can only rotate around one axis, the hinge axis. This
+ * can be useful to represent doors or wheels rotating around one axis. The user
+ * can specify limits and motor for the hinge.
+ *
* @author normenhansen
*/
public class HingeJoint extends PhysicsJoint {
protected Vector3f axisA;
protected Vector3f axisB;
+ /**
+ * copy of the angular-only flag (default=false)
+ */
protected boolean angularOnly = false;
+ /**
+ * copy of the limit's bias factor, how strictly position errors (drift) is
+ * corrected (default=0.3)
+ */
protected float biasFactor = 0.3f;
+ /**
+ * copy of the limit's relaxation factor, the rate at which velocity errors
+ * are corrected (default=1)
+ */
protected float relaxationFactor = 1.0f;
+ /**
+ * copy of the limit's softness, the range fraction at which velocity-error
+ * correction starts operating (default=0.9)
+ */
protected float limitSoftness = 0.9f;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public HingeJoint() {
}
/**
- * Creates a new HingeJoint
- * @param pivotA local translation of the joint connection point in node A
- * @param pivotB local translation of the joint connection point in node B
+ * Instantiate a HingeJoint. To be effective, the joint must be added to a
+ * physics space.
+ *
+ * @param nodeA the 1st body connected by the joint (not null, alias
+ * created)
+ * @param nodeB the 2nd body connected by the joint (not null, alias
+ * created)
+ * @param pivotA the local offset of the connection point in node A (not
+ * null, alias created)
+ * @param pivotB the local offset of the connection point in node B (not
+ * null, alias created)
+ * @param axisA the local axis of the connection to node A (not null, alias
+ * created)
+ * @param axisB the local axis of the connection to node B (not null, alias
+ * created)
*/
public HingeJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB, Vector3f axisA, Vector3f axisB) {
super(nodeA, nodeB, pivotA, pivotB);
@@ -74,10 +108,11 @@ public HingeJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivot
}
/**
- * Enables the motor.
- * @param enable if true, motor is enabled.
- * @param targetVelocity the target velocity of the rotation.
- * @param maxMotorImpulse the max force applied to the hinge to rotate it.
+ * Enable or disable this joint's motor.
+ *
+ * @param enable true to enable, false to disable
+ * @param targetVelocity the desired target velocity
+ * @param maxMotorImpulse the desired maximum rotational force
*/
public void enableMotor(boolean enable, float targetVelocity, float maxMotorImpulse) {
enableMotor(objectId, enable, targetVelocity, maxMotorImpulse);
@@ -85,18 +120,33 @@ public void enableMotor(boolean enable, float targetVelocity, float maxMotorImpu
private native void enableMotor(long objectId, boolean enable, float targetVelocity, float maxMotorImpulse);
+ /**
+ * Test whether this joint's motor is enabled.
+ *
+ * @return true if enabled, otherwise false
+ */
public boolean getEnableMotor() {
return getEnableAngularMotor(objectId);
}
private native boolean getEnableAngularMotor(long objectId);
+ /**
+ * Read the motor's target velocity.
+ *
+ * @return velocity
+ */
public float getMotorTargetVelocity() {
return getMotorTargetVelocity(objectId);
}
private native float getMotorTargetVelocity(long objectId);
+ /**
+ * Read the motor's maximum impulse.
+ *
+ * @return impulse
+ */
public float getMaxMotorImpulse() {
return getMaxMotorImpulse(objectId);
}
@@ -104,9 +154,10 @@ public float getMaxMotorImpulse() {
private native float getMaxMotorImpulse(long objectId);
/**
- * Sets the limits of this joint.
- * @param low the low limit in radians.
- * @param high the high limit in radians.
+ * Alter this joint's limits.
+ *
+ * @param low the desired lower limit of the hinge angle (in radians)
+ * @param high the desired upper limit of the joint angle (in radians)
*/
public void setLimit(float low, float high) {
setLimit(objectId, low, high);
@@ -115,13 +166,20 @@ public void setLimit(float low, float high) {
private native void setLimit(long objectId, float low, float high);
/**
- * Sets the limits of this joint.
- * If you're above the softness, velocities that would shoot through the actual limit are slowed down. The bias be in the range of 0.2 - 0.5.
- * @param low the low limit in radians.
- * @param high the high limit in radians.
- * @param _softness the factor at which the velocity error correction starts operating,i.e a softness of 0.9 means that the vel. corr starts at 90% of the limit range.
- * @param _biasFactor the magnitude of the position correction. It tells you how strictly the position error (drift ) is corrected.
- * @param _relaxationFactor the rate at which velocity errors are corrected. This can be seen as the strength of the limits. A low value will make the limits more spongy.
+ * Alter this joint's limits. If you're above the softness, velocities that
+ * would shoot through the actual limit are slowed down. The bias should be
+ * in the range of 0.2 - 0.5.
+ *
+ * @param low the desired lower limit of the hinge angle (in radians)
+ * @param high the desired upper limit of the joint angle (in radians)
+ * @param _softness the desired range fraction at which velocity-error
+ * correction starts operating. A softness of 0.9 means that the correction
+ * starts at 90% of the limit range. (default=0.9)
+ * @param _biasFactor the desired magnitude of the position correction, how
+ * strictly position errors (drift) is corrected. (default=0.3)
+ * @param _relaxationFactor the desired rate at which velocity errors are
+ * corrected. This can be seen as the strength of the limits. A low value
+ * will make the limits more spongy. (default=1)
*/
public void setLimit(float low, float high, float _softness, float _biasFactor, float _relaxationFactor) {
biasFactor = _biasFactor;
@@ -132,18 +190,34 @@ public void setLimit(float low, float high, float _softness, float _biasFactor,
private native void setLimit(long objectId, float low, float high, float _softness, float _biasFactor, float _relaxationFactor);
+ /**
+ * Read the upper limit of the hinge angle.
+ *
+ * @return angle (in radians)
+ */
public float getUpperLimit() {
return getUpperLimit(objectId);
}
private native float getUpperLimit(long objectId);
+ /**
+ * Read the lower limit of the hinge angle.
+ *
+ * @return the angle (in radians)
+ */
public float getLowerLimit() {
return getLowerLimit(objectId);
}
private native float getLowerLimit(long objectId);
+ /**
+ * Alter the hinge translation flag.
+ *
+ * @param angularOnly true→rotate only, false→rotate and translate
+ * (default=false)
+ */
public void setAngularOnly(boolean angularOnly) {
this.angularOnly = angularOnly;
setAngularOnly(objectId, angularOnly);
@@ -151,12 +225,23 @@ public void setAngularOnly(boolean angularOnly) {
private native void setAngularOnly(long objectId, boolean angularOnly);
+ /**
+ * Read the hinge angle.
+ *
+ * @return the angle (in radians)
+ */
public float getHingeAngle() {
return getHingeAngle(objectId);
}
private native float getHingeAngle(long objectId);
+ /**
+ * Serialize this joint, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
super.write(ex);
OutputCapsule capsule = ex.getCapsule(this);
@@ -177,6 +262,12 @@ public void write(JmeExporter ex) throws IOException {
capsule.write(getMaxMotorImpulse(), "maxMotorImpulse", 0.0f);
}
+ /**
+ * De-serialize this joint, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
public void read(JmeImporter im) throws IOException {
super.read(im);
InputCapsule capsule = im.getCapsule(this);
@@ -200,9 +291,13 @@ public void read(JmeImporter im) throws IOException {
setLimit(lowerLimit, upperLimit, limitSoftness, biasFactor, relaxationFactor);
}
+ /**
+ * Create the configured joint in Bullet.
+ */
protected void createJoint() {
objectId = createJoint(nodeA.getObjectId(), nodeB.getObjectId(), pivotA, axisA, pivotB, axisB);
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Joint {0}", Long.toHexString(objectId));
+ setAngularOnly(objectId, angularOnly);
}
private native long createJoint(long objectIdA, long objectIdB, Vector3f pivotA, Vector3f axisA, Vector3f pivotB, Vector3f axisB);
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/joints/PhysicsJoint.java b/jme3-bullet/src/main/java/com/jme3/bullet/joints/PhysicsJoint.java
index 256036ff74..f3087dfaed 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/joints/PhysicsJoint.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/joints/PhysicsJoint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -39,24 +39,59 @@
import java.util.logging.Logger;
/**
- *
- * joint has to be removed from and added to PhyiscsSpace to apply this.
- * @param collisionBetweenLinkedBodys set to false to have no collisions between linked bodys
+ * Enable or disable collisions between the linked bodies. The joint must be
+ * removed from and added to PhysicsSpace for this change to be effective.
+ *
+ * @param collisionBetweenLinkedBodys true → allow collisions, false → prevent them
*/
public void setCollisionBetweenLinkedBodys(boolean collisionBetweenLinkedBodys) {
this.collisionBetweenLinkedBodys = collisionBetweenLinkedBodys;
}
+ /**
+ * Access the 1st body specified in during construction.
+ *
+ * @return the pre-existing body
+ */
public PhysicsRigidBody getBodyA() {
return nodeA;
}
+ /**
+ * Access the 2nd body specified in during construction.
+ *
+ * @return the pre-existing body
+ */
public PhysicsRigidBody getBodyB() {
return nodeB;
}
+ /**
+ * Access the local offset of the joint connection point in node A.
+ *
+ * @return the pre-existing vector (not null)
+ */
public Vector3f getPivotA() {
return pivotA;
}
+ /**
+ * Access the local offset of the joint connection point in node A.
+ *
+ * @return the pre-existing vector (not null)
+ */
public Vector3f getPivotB() {
return pivotB;
}
/**
- * destroys this joint and removes it from its connected PhysicsRigidBodys joint lists
+ * Destroy this joint and remove it from the joint lists of its connected
+ * bodies.
*/
public void destroy() {
getBodyA().removeJoint(this);
getBodyB().removeJoint(this);
}
+ /**
+ * Serialize this joint, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
public void write(JmeExporter ex) throws IOException {
OutputCapsule capsule = ex.getCapsule(this);
capsule.write(nodeA, "nodeA", null);
@@ -128,6 +200,12 @@ public void write(JmeExporter ex) throws IOException {
capsule.write(pivotB, "pivotB", null);
}
+ /**
+ * De-serialize this joint, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
public void read(JmeImporter im) throws IOException {
InputCapsule capsule = im.getCapsule(this);
this.nodeA = ((PhysicsRigidBody) capsule.readSavable("nodeA", new PhysicsRigidBody()));
@@ -136,6 +214,12 @@ public void read(JmeImporter im) throws IOException {
this.pivotB = (Vector3f) capsule.readSavable("pivotB", new Vector3f());
}
+ /**
+ * Finalize this physics joint just before it is destroyed. Should be
+ * invoked only by a subclass or by the garbage collector.
+ *
+ * @throws Throwable ignored by the garbage collector
+ */
@Override
protected void finalize() throws Throwable {
super.finalize();
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/joints/Point2PointJoint.java b/jme3-bullet/src/main/java/com/jme3/bullet/joints/Point2PointJoint.java
index 312293e997..932f41f7b3 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/joints/Point2PointJoint.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/joints/Point2PointJoint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -42,62 +42,116 @@
import java.util.logging.Logger;
/**
- * From bullet manual:
- * Point to point constraint, also known as ball socket joint limits the translation
- * so that the local pivot points of 2 rigidbodies match in worldspace.
- * A chain of rigidbodies can be connected using this constraint.
+ * A joint based on Bullet's btPoint2PointConstraint.
+ *
+ * Point to point constraint limits the translation so that the local pivot
+ * points of 2 rigidbodies match in worldspace. A chain of rigidbodies can be
+ * connected using this constraint.
+ *
* @author normenhansen
*/
public class Point2PointJoint extends PhysicsJoint {
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public Point2PointJoint() {
}
/**
- * @param pivotA local translation of the joint connection point in node A
- * @param pivotB local translation of the joint connection point in node B
+ * Instantiate a Point2PointJoint. To be effective, the joint must be added
+ * to a physics space.
+ *
+ * @param nodeA the 1st body connected by the joint (not null, alias
+ * created)
+ * @param nodeB the 2nd body connected by the joint (not null, alias
+ * created)
+ * @param pivotA the local offset of the connection point in node A (not
+ * null, alias created)
+ * @param pivotB the local offset of the connection point in node B (not
+ * null, alias created)
*/
public Point2PointJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB) {
super(nodeA, nodeB, pivotA, pivotB);
createJoint();
}
+ /**
+ * Alter the joint's damping.
+ *
+ * @param value the desired viscous damping ratio (0→no damping,
+ * 1→critically damped, default=1)
+ */
public void setDamping(float value) {
setDamping(objectId, value);
}
private native void setDamping(long objectId, float value);
+ /**
+ * Alter the joint's impulse clamp.
+ *
+ * @param value the desired impulse clamp value (default=0)
+ */
public void setImpulseClamp(float value) {
setImpulseClamp(objectId, value);
}
private native void setImpulseClamp(long objectId, float value);
+ /**
+ * Alter the joint's tau value.
+ *
+ * @param value the desired tau value (default=0.3)
+ */
public void setTau(float value) {
setTau(objectId, value);
}
private native void setTau(long objectId, float value);
+ /**
+ * Read the joint's damping ratio.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getDamping() {
return getDamping(objectId);
}
private native float getDamping(long objectId);
+ /**
+ * Read the joint's impulse clamp.
+ *
+ * @return the clamp value
+ */
public float getImpulseClamp() {
return getImpulseClamp(objectId);
}
private native float getImpulseClamp(long objectId);
+ /**
+ * Read the joint's tau value.
+ *
+ * @return the tau value
+ */
public float getTau() {
return getTau(objectId);
}
private native float getTau(long objectId);
+ /**
+ * Serialize this joint, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
super.write(ex);
@@ -107,6 +161,12 @@ public void write(JmeExporter ex) throws IOException {
cap.write(getImpulseClamp(), "impulseClamp", 0f);
}
+ /**
+ * De-serialize this joint, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
super.read(im);
@@ -117,6 +177,9 @@ public void read(JmeImporter im) throws IOException {
setDamping(cap.readFloat("impulseClamp", 0f));
}
+ /**
+ * Create the configured joint in Bullet.
+ */
protected void createJoint() {
objectId = createJoint(nodeA.getObjectId(), nodeB.getObjectId(), pivotA, pivotB);
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Joint {0}", Long.toHexString(objectId));
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/joints/SixDofJoint.java b/jme3-bullet/src/main/java/com/jme3/bullet/joints/SixDofJoint.java
index 648398149d..660319a18e 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/joints/SixDofJoint.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/joints/SixDofJoint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -47,33 +47,79 @@
import java.util.logging.Logger;
/**
- * From bullet manual:
- * This generic constraint can emulate a variety of standard constraints,
- * by configuring each of the 6 degrees of freedom (dof).
- * The first 3 dof axis are linear axis, which represent translation of rigidbodies,
- * and the latter 3 dof axis represent the angular motion. Each axis can be either locked,
- * free or limited. On construction of a new btGeneric6DofConstraint, all axis are locked.
- * Afterwards the axis can be reconfigured. Note that several combinations that
- * include free and/or limited angular degrees of freedom are undefined.
+ * A joint based on Bullet's btGeneric6DofConstraint.
+ *
+ * This generic constraint can emulate a variety of standard constraints, by
+ * configuring each of the 6 degrees of freedom (dof). The first 3 dof axis are
+ * linear axis, which represent translation of rigidbodies, and the latter 3 dof
+ * axis represent the angular motion. Each axis can be either locked, free or
+ * limited. On construction of a new btGeneric6DofSpring2Constraint, all axis
+ * are locked. Afterwards the axis can be reconfigured. Note that several
+ * combinations that include free and/or limited angular degrees of freedom are
+ * undefined.
+ *
+ *
+ *
* @author normenhansen
*/
public class SixDofJoint extends PhysicsJoint {
Matrix3f rotA, rotB;
+ /**
+ * true→limits give the allowable range of movement of frameB in frameA
+ * space, false→limits give the allowable range of movement of frameA
+ * in frameB space
+ */
boolean useLinearReferenceFrameA;
LinkedList
- * This generic constraint can emulate a variety of standard constraints,
- * by configuring each of the 6 degrees of freedom (dof).
- * The first 3 dof axis are linear axis, which represent translation of rigidbodies,
- * and the latter 3 dof axis represent the angular motion. Each axis can be either locked,
- * free or limited. On construction of a new btGeneric6DofConstraint, all axis are locked.
- * Afterwards the axis can be reconfigured. Note that several combinations that
- * include free and/or limited angular degrees of freedom are undefined.
+ * A 6 degree-of-freedom joint based on Bullet's btGeneric6DofSpringConstraint.
+ *
+ * This generic constraint can emulate a variety of standard constraints, by
+ * configuring each of the 6 degrees of freedom (dof). The first 3 dof axis are
+ * linear axis, which represent translation of rigidbodies, and the latter 3 dof
+ * axis represent the angular motion. Each axis can be either locked, free or
+ * limited. On construction of a new btGeneric6DofSpring2Constraint, all axis
+ * are locked. Afterwards the axis can be reconfigured. Note that several
+ * combinations that include free and/or limited angular degrees of freedom are
+ * undefined.
+ *
+ *
+ *
* @author normenhansen
*/
public class SixDofSpringJoint extends SixDofJoint {
@@ -53,35 +63,84 @@ public class SixDofSpringJoint extends SixDofJoint {
final float springStiffness[] = new float[6];
final float springDamping[] = new float[6]; // between 0 and 1 (1 == no damping)
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public SixDofSpringJoint() {
}
/**
- * @param pivotA local translation of the joint connection point in node A
- * @param pivotB local translation of the joint connection point in node B
+ * Instantiate a SixDofSpringJoint. To be effective, the joint must be added
+ * to a physics space.
+ *
+ * @param nodeA the 1st body connected by the joint (not null, alias
+ * created)
+ * @param nodeB the 2nd body connected by the joint (not null, alias
+ * created)
+ * @param pivotA the local offset of the connection point in node A (not
+ * null, alias created)
+ * @param pivotB the local offset of the connection point in node B (not
+ * null, alias created)
+ * @param rotA the local orientation of the connection to node A (not
+ * null, alias created)
+ * @param rotB the local orientation of the connection to node B (not
+ * null, alias created)
+ * @param useLinearReferenceFrameA true→use node A, false→use node
+ * B
*/
public SixDofSpringJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB, Matrix3f rotA, Matrix3f rotB, boolean useLinearReferenceFrameA) {
super(nodeA, nodeB, pivotA, pivotB, rotA, rotB, useLinearReferenceFrameA);
}
+
+ /**
+ * Enable or disable the spring for the indexed degree of freedom.
+ *
+ * @param index which degree of freedom (≥0, <6)
+ * @param onOff true → enable, false → disable
+ */
public void enableSpring(int index, boolean onOff) {
enableSpring(objectId, index, onOff);
}
native void enableSpring(long objctId, int index, boolean onOff);
+ /**
+ * Alter the spring stiffness for the indexed degree of freedom.
+ *
+ * @param index which degree of freedom (≥0, <6)
+ * @param stiffness the desired stiffness
+ */
public void setStiffness(int index, float stiffness) {
setStiffness(objectId, index, stiffness);
}
native void setStiffness(long objctId, int index, float stiffness);
+ /**
+ * Alter the damping for the indexed degree of freedom.
+ *
+ * @param index which degree of freedom (≥0, <6)
+ * @param damping the desired viscous damping ratio (0→no damping,
+ * 1→critically damped, default=1)
+ */
public void setDamping(int index, float damping) {
setDamping(objectId, index, damping);
}
native void setDamping(long objctId, int index, float damping);
+ /**
+ * Alter the equilibrium points for all degrees of freedom, based on the
+ * current constraint position/orientation.
+ */
public void setEquilibriumPoint() { // set the current constraint position/orientation as an equilibrium point for all DOF
setEquilibriumPoint(objectId);
}
native void setEquilibriumPoint(long objctId);
+ /**
+ * Alter the equilibrium point of the indexed degree of freedom, based on
+ * the current constraint position/orientation.
+ *
+ * @param index which degree of freedom (≥0, <6)
+ */
public void setEquilibriumPoint(int index){ // set the current constraint position/orientation as an equilibrium point for given DOF
setEquilibriumPoint(objectId, index);
}
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/joints/SliderJoint.java b/jme3-bullet/src/main/java/com/jme3/bullet/joints/SliderJoint.java
index b51c5d849b..8299fbd659 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/joints/SliderJoint.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/joints/SliderJoint.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -43,8 +43,12 @@
import java.util.logging.Logger;
/**
- * From bullet manual:
- * The slider constraint allows the body to rotate around one axis and translate along this axis.
+ * A slider joint based on Bullet's btSliderConstraint.
+ *
+ * The slider constraint allows the body to rotate around one axis and translate
+ * along this axis.
+ *
* @author normenhansen
*/
public class SliderJoint extends PhysicsJoint {
@@ -52,12 +56,29 @@ public class SliderJoint extends PhysicsJoint {
protected Matrix3f rotA, rotB;
protected boolean useLinearReferenceFrameA;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public SliderJoint() {
}
/**
- * @param pivotA local translation of the joint connection point in node A
- * @param pivotB local translation of the joint connection point in node B
+ * Instantiate a SliderJoint. To be effective, the joint must be added to a
+ * physics space.
+ *
+ * @param nodeA the 1st body connected by the joint (not null, alias
+ * created)
+ * @param nodeB the 2nd body connected by the joint (not null, alias
+ * created)
+ * @param pivotA the local offset of the connection point in node A (not
+ * null, alias created)
+ * @param pivotB the local offset of the connection point in node B (not
+ * null, alias created)
+ * @param rotA the local orientation of the connection to node A (not null, alias created)
+ * @param rotB the local orientation of the connection to node B (not null, alias created)
+ * @param useLinearReferenceFrameA true→use node A, false→use node
+ * B
*/
public SliderJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB, Matrix3f rotA, Matrix3f rotB, boolean useLinearReferenceFrameA) {
super(nodeA, nodeB, pivotA, pivotB);
@@ -68,8 +89,19 @@ public SliderJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivo
}
/**
- * @param pivotA local translation of the joint connection point in node A
- * @param pivotB local translation of the joint connection point in node B
+ * Instantiate a SliderJoint. To be effective, the joint must be added to a
+ * physics space.
+ *
+ * @param nodeA the 1st body connected by the joint (not null, alias
+ * created)
+ * @param nodeB the 2nd body connected by the joint (not null, alias
+ * created)
+ * @param pivotA the local offset of the connection point in node A (not
+ * null, alias created)
+ * @param pivotB the local offset of the connection point in node B (not
+ * null, alias created)
+ * @param useLinearReferenceFrameA true→use node A, false→use node
+ * B
*/
public SliderJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivotA, Vector3f pivotB, boolean useLinearReferenceFrameA) {
super(nodeA, nodeB, pivotA, pivotB);
@@ -79,342 +111,651 @@ public SliderJoint(PhysicsRigidBody nodeA, PhysicsRigidBody nodeB, Vector3f pivo
createJoint();
}
+ /**
+ * Read the joint's lower limit for on-axis translation.
+ *
+ * @return the lower limit
+ */
public float getLowerLinLimit() {
return getLowerLinLimit(objectId);
}
private native float getLowerLinLimit(long objectId);
+ /**
+ * Alter the joint's lower limit for on-axis translation.
+ *
+ * @param lowerLinLimit the desired lower limit (default=-1)
+ */
public void setLowerLinLimit(float lowerLinLimit) {
setLowerLinLimit(objectId, lowerLinLimit);
}
private native void setLowerLinLimit(long objectId, float value);
+ /**
+ * Read the joint's upper limit for on-axis translation.
+ *
+ * @return the upper limit
+ */
public float getUpperLinLimit() {
return getUpperLinLimit(objectId);
}
private native float getUpperLinLimit(long objectId);
+ /**
+ * Alter the joint's upper limit for on-axis translation.
+ *
+ * @param upperLinLimit the desired upper limit (default=1)
+ */
public void setUpperLinLimit(float upperLinLimit) {
setUpperLinLimit(objectId, upperLinLimit);
}
private native void setUpperLinLimit(long objectId, float value);
+ /**
+ * Read the joint's lower limit for on-axis rotation.
+ *
+ * @return the lower limit angle (in radians)
+ */
public float getLowerAngLimit() {
return getLowerAngLimit(objectId);
}
private native float getLowerAngLimit(long objectId);
+ /**
+ * Alter the joint's lower limit for on-axis rotation.
+ *
+ * @param lowerAngLimit the desired lower limit angle (in radians,
+ * default=0)
+ */
public void setLowerAngLimit(float lowerAngLimit) {
setLowerAngLimit(objectId, lowerAngLimit);
}
private native void setLowerAngLimit(long objectId, float value);
+ /**
+ * Read the joint's upper limit for on-axis rotation.
+ *
+ * @return the upper limit angle (in radians)
+ */
public float getUpperAngLimit() {
return getUpperAngLimit(objectId);
}
private native float getUpperAngLimit(long objectId);
+ /**
+ * Alter the joint's upper limit for on-axis rotation.
+ *
+ * @param upperAngLimit the desired upper limit angle (in radians,
+ * default=0)
+ */
public void setUpperAngLimit(float upperAngLimit) {
setUpperAngLimit(objectId, upperAngLimit);
}
private native void setUpperAngLimit(long objectId, float value);
+ /**
+ * Read the joint's softness for on-axis translation between the limits.
+ *
+ * @return the softness
+ */
public float getSoftnessDirLin() {
return getSoftnessDirLin(objectId);
}
private native float getSoftnessDirLin(long objectId);
+ /**
+ * Alter the joint's softness for on-axis translation between the limits.
+ *
+ * @param softnessDirLin the desired softness (default=1)
+ */
public void setSoftnessDirLin(float softnessDirLin) {
setSoftnessDirLin(objectId, softnessDirLin);
}
private native void setSoftnessDirLin(long objectId, float value);
+ /**
+ * Read the joint's restitution for on-axis translation between the limits.
+ *
+ * @return the restitution (bounce) factor
+ */
public float getRestitutionDirLin() {
return getRestitutionDirLin(objectId);
}
private native float getRestitutionDirLin(long objectId);
+ /**
+ * Alter the joint's restitution for on-axis translation between the limits.
+ *
+ * @param restitutionDirLin the desired restitution (bounce) factor
+ * (default=0.7)
+ */
public void setRestitutionDirLin(float restitutionDirLin) {
setRestitutionDirLin(objectId, restitutionDirLin);
}
private native void setRestitutionDirLin(long objectId, float value);
+ /**
+ * Read the joint's damping for on-axis translation between the limits.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getDampingDirLin() {
return getDampingDirLin(objectId);
}
private native float getDampingDirLin(long objectId);
+ /**
+ * Alter the joint's damping for on-axis translation between the limits.
+ *
+ * @param dampingDirLin the desired viscous damping ratio (0→no
+ * damping, 1→critically damped, default=0)
+ */
public void setDampingDirLin(float dampingDirLin) {
setDampingDirLin(objectId, dampingDirLin);
}
private native void setDampingDirLin(long objectId, float value);
+ /**
+ * Read the joint's softness for on-axis rotation between the limits.
+ *
+ * @return the softness
+ */
public float getSoftnessDirAng() {
return getSoftnessDirAng(objectId);
}
private native float getSoftnessDirAng(long objectId);
+ /**
+ * Alter the joint's softness for on-axis rotation between the limits.
+ *
+ * @param softnessDirAng the desired softness (default=1)
+ */
public void setSoftnessDirAng(float softnessDirAng) {
setSoftnessDirAng(objectId, softnessDirAng);
}
private native void setSoftnessDirAng(long objectId, float value);
+ /**
+ * Read the joint's restitution for on-axis rotation between the limits.
+ *
+ * @return the restitution (bounce) factor
+ */
public float getRestitutionDirAng() {
return getRestitutionDirAng(objectId);
}
private native float getRestitutionDirAng(long objectId);
+ /**
+ * Alter the joint's restitution for on-axis rotation between the limits.
+ *
+ * @param restitutionDirAng the desired restitution (bounce) factor
+ * (default=0.7)
+ */
public void setRestitutionDirAng(float restitutionDirAng) {
setRestitutionDirAng(objectId, restitutionDirAng);
}
private native void setRestitutionDirAng(long objectId, float value);
+ /**
+ * Read the joint's damping for on-axis rotation between the limits.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getDampingDirAng() {
return getDampingDirAng(objectId);
}
private native float getDampingDirAng(long objectId);
+ /**
+ * Alter the joint's damping for on-axis rotation between the limits.
+ *
+ * @param dampingDirAng the desired viscous damping ratio (0→no
+ * damping, 1→critically damped, default=0)
+ */
public void setDampingDirAng(float dampingDirAng) {
setDampingDirAng(objectId, dampingDirAng);
}
private native void setDampingDirAng(long objectId, float value);
+ /**
+ * Read the joint's softness for on-axis translation hitting the limits.
+ *
+ * @return the softness
+ */
public float getSoftnessLimLin() {
return getSoftnessLimLin(objectId);
}
private native float getSoftnessLimLin(long objectId);
+ /**
+ * Alter the joint's softness for on-axis translation hitting the limits.
+ *
+ * @param softnessLimLin the desired softness (default=1)
+ */
public void setSoftnessLimLin(float softnessLimLin) {
setSoftnessLimLin(objectId, softnessLimLin);
}
private native void setSoftnessLimLin(long objectId, float value);
+ /**
+ * Read the joint's restitution for on-axis translation hitting the limits.
+ *
+ * @return the restitution (bounce) factor
+ */
public float getRestitutionLimLin() {
return getRestitutionLimLin(objectId);
}
private native float getRestitutionLimLin(long objectId);
+ /**
+ * Alter the joint's restitution for on-axis translation hitting the limits.
+ *
+ * @param restitutionLimLin the desired restitution (bounce) factor
+ * (default=0.7)
+ */
public void setRestitutionLimLin(float restitutionLimLin) {
setRestitutionLimLin(objectId, restitutionLimLin);
}
private native void setRestitutionLimLin(long objectId, float value);
+ /**
+ * Read the joint's damping for on-axis translation hitting the limits.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getDampingLimLin() {
return getDampingLimLin(objectId);
}
private native float getDampingLimLin(long objectId);
+ /**
+ * Alter the joint's damping for on-axis translation hitting the limits.
+ *
+ * @param dampingLimLin the desired viscous damping ratio (0→no
+ * damping, 1→critically damped, default=1)
+ */
public void setDampingLimLin(float dampingLimLin) {
setDampingLimLin(objectId, dampingLimLin);
}
private native void setDampingLimLin(long objectId, float value);
+ /**
+ * Read the joint's softness for on-axis rotation hitting the limits.
+ *
+ * @return the softness
+ */
public float getSoftnessLimAng() {
return getSoftnessLimAng(objectId);
}
private native float getSoftnessLimAng(long objectId);
+ /**
+ * Alter the joint's softness for on-axis rotation hitting the limits.
+ *
+ * @param softnessLimAng the desired softness (default=1)
+ */
public void setSoftnessLimAng(float softnessLimAng) {
setSoftnessLimAng(objectId, softnessLimAng);
}
private native void setSoftnessLimAng(long objectId, float value);
+ /**
+ * Read the joint's restitution for on-axis rotation hitting the limits.
+ *
+ * @return the restitution (bounce) factor
+ */
public float getRestitutionLimAng() {
return getRestitutionLimAng(objectId);
}
private native float getRestitutionLimAng(long objectId);
+ /**
+ * Alter the joint's restitution for on-axis rotation hitting the limits.
+ *
+ * @param restitutionLimAng the desired restitution (bounce) factor
+ * (default=0.7)
+ */
public void setRestitutionLimAng(float restitutionLimAng) {
setRestitutionLimAng(objectId, restitutionLimAng);
}
private native void setRestitutionLimAng(long objectId, float value);
+ /**
+ * Read the joint's damping for on-axis rotation hitting the limits.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getDampingLimAng() {
return getDampingLimAng(objectId);
}
private native float getDampingLimAng(long objectId);
+ /**
+ * Alter the joint's damping for on-axis rotation hitting the limits.
+ *
+ * @param dampingLimAng the desired viscous damping ratio (0→no
+ * damping, 1→critically damped, default=1)
+ */
public void setDampingLimAng(float dampingLimAng) {
setDampingLimAng(objectId, dampingLimAng);
}
private native void setDampingLimAng(long objectId, float value);
+ /**
+ * Read the joint's softness for off-axis translation.
+ *
+ * @return the softness
+ */
public float getSoftnessOrthoLin() {
return getSoftnessOrthoLin(objectId);
}
private native float getSoftnessOrthoLin(long objectId);
+ /**
+ * Alter the joint's softness for off-axis translation.
+ *
+ * @param softnessOrthoLin the desired softness (default=1)
+ */
public void setSoftnessOrthoLin(float softnessOrthoLin) {
setSoftnessOrthoLin(objectId, softnessOrthoLin);
}
private native void setSoftnessOrthoLin(long objectId, float value);
+ /**
+ * Read the joint's restitution for off-axis translation.
+ *
+ * @return the restitution (bounce) factor
+ */
public float getRestitutionOrthoLin() {
return getRestitutionOrthoLin(objectId);
}
private native float getRestitutionOrthoLin(long objectId);
+ /**
+ * Alter the joint's restitution for off-axis translation.
+ *
+ * @param restitutionOrthoLin the desired restitution (bounce) factor
+ * (default=0.7)
+ */
public void setRestitutionOrthoLin(float restitutionOrthoLin) {
- setDampingOrthoLin(objectId, restitutionOrthoLin);
+ setRestitutionOrthoLin(objectId, restitutionOrthoLin);
}
private native void setRestitutionOrthoLin(long objectId, float value);
+ /**
+ * Read the joint's damping for off-axis translation.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getDampingOrthoLin() {
return getDampingOrthoLin(objectId);
}
private native float getDampingOrthoLin(long objectId);
+ /**
+ * Alter the joint's damping for off-axis translation.
+ *
+ * @param dampingOrthoLin the desired viscous damping ratio (0→no
+ * damping, 1→critically damped, default=1)
+ */
public void setDampingOrthoLin(float dampingOrthoLin) {
setDampingOrthoLin(objectId, dampingOrthoLin);
}
private native void setDampingOrthoLin(long objectId, float value);
+ /**
+ * Read the joint's softness for off-axis rotation.
+ *
+ * @return the softness
+ */
public float getSoftnessOrthoAng() {
return getSoftnessOrthoAng(objectId);
}
private native float getSoftnessOrthoAng(long objectId);
+ /**
+ * Alter the joint's softness for off-axis rotation.
+ *
+ * @param softnessOrthoAng the desired softness (default=1)
+ */
public void setSoftnessOrthoAng(float softnessOrthoAng) {
setSoftnessOrthoAng(objectId, softnessOrthoAng);
}
private native void setSoftnessOrthoAng(long objectId, float value);
+ /**
+ * Read the joint's restitution for off-axis rotation.
+ *
+ * @return the restitution (bounce) factor
+ */
public float getRestitutionOrthoAng() {
return getRestitutionOrthoAng(objectId);
}
private native float getRestitutionOrthoAng(long objectId);
+ /**
+ * Alter the joint's restitution for off-axis rotation.
+ *
+ * @param restitutionOrthoAng the desired restitution (bounce) factor
+ * (default=0.7)
+ */
public void setRestitutionOrthoAng(float restitutionOrthoAng) {
setRestitutionOrthoAng(objectId, restitutionOrthoAng);
}
private native void setRestitutionOrthoAng(long objectId, float value);
+ /**
+ * Read the joint's damping for off-axis rotation.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getDampingOrthoAng() {
return getDampingOrthoAng(objectId);
}
private native float getDampingOrthoAng(long objectId);
+ /**
+ * Alter the joint's damping for off-axis rotation.
+ *
+ * @param dampingOrthoAng the desired viscous damping ratio (0→no
+ * damping, 1→critically damped, default=1)
+ */
public void setDampingOrthoAng(float dampingOrthoAng) {
setDampingOrthoAng(objectId, dampingOrthoAng);
}
private native void setDampingOrthoAng(long objectId, float value);
+ /**
+ * Test whether the translation motor is powered.
+ *
+ * @return true if powered, otherwise false
+ */
public boolean isPoweredLinMotor() {
return isPoweredLinMotor(objectId);
}
private native boolean isPoweredLinMotor(long objectId);
+ /**
+ * Alter whether the translation motor is powered.
+ *
+ * @param poweredLinMotor true to power the motor, false to de-power it
+ * (default=false)
+ */
public void setPoweredLinMotor(boolean poweredLinMotor) {
setPoweredLinMotor(objectId, poweredLinMotor);
}
private native void setPoweredLinMotor(long objectId, boolean value);
+ /**
+ * Read the velocity target of the translation motor.
+ *
+ * @return the velocity target
+ */
public float getTargetLinMotorVelocity() {
return getTargetLinMotorVelocity(objectId);
}
private native float getTargetLinMotorVelocity(long objectId);
+ /**
+ * Alter the velocity target of the translation motor.
+ *
+ * @param targetLinMotorVelocity the desired velocity target (default=0)
+ */
public void setTargetLinMotorVelocity(float targetLinMotorVelocity) {
setTargetLinMotorVelocity(objectId, targetLinMotorVelocity);
}
private native void setTargetLinMotorVelocity(long objectId, float value);
+ /**
+ * Read the maximum force of the translation motor.
+ *
+ * @return the maximum force
+ */
public float getMaxLinMotorForce() {
return getMaxLinMotorForce(objectId);
}
private native float getMaxLinMotorForce(long objectId);
+ /**
+ * Alter the maximum force of the translation motor.
+ *
+ * @param maxLinMotorForce the desired maximum force (default=0)
+ */
public void setMaxLinMotorForce(float maxLinMotorForce) {
setMaxLinMotorForce(objectId, maxLinMotorForce);
}
private native void setMaxLinMotorForce(long objectId, float value);
+ /**
+ * Test whether the rotation motor is powered.
+ *
+ * @return true if powered, otherwise false
+ */
public boolean isPoweredAngMotor() {
return isPoweredAngMotor(objectId);
}
private native boolean isPoweredAngMotor(long objectId);
+ /**
+ * Alter whether the rotation motor is powered.
+ *
+ * @param poweredAngMotor true to power the motor, false to de-power it
+ * (default=false)
+ */
public void setPoweredAngMotor(boolean poweredAngMotor) {
setPoweredAngMotor(objectId, poweredAngMotor);
}
private native void setPoweredAngMotor(long objectId, boolean value);
+ /**
+ * Read the velocity target of the rotation motor.
+ *
+ * @return the velocity target (in radians per second)
+ */
public float getTargetAngMotorVelocity() {
return getTargetAngMotorVelocity(objectId);
}
private native float getTargetAngMotorVelocity(long objectId);
+ /**
+ * Alter the velocity target of the rotation motor.
+ *
+ * @param targetAngMotorVelocity the desired velocity target (in radians per
+ * second, default=0)
+ */
public void setTargetAngMotorVelocity(float targetAngMotorVelocity) {
setTargetAngMotorVelocity(objectId, targetAngMotorVelocity);
}
private native void setTargetAngMotorVelocity(long objectId, float value);
+ /**
+ * Read the maximum force of the rotation motor.
+ *
+ * @return the maximum force
+ */
public float getMaxAngMotorForce() {
return getMaxAngMotorForce(objectId);
}
private native float getMaxAngMotorForce(long objectId);
+ /**
+ * Alter the maximum force of the rotation motor.
+ *
+ * @param maxAngMotorForce the desired maximum force (default=0)
+ */
public void setMaxAngMotorForce(float maxAngMotorForce) {
setMaxAngMotorForce(objectId, maxAngMotorForce);
}
private native void setMaxAngMotorForce(long objectId, float value);
+ /**
+ * Serialize this joint, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
super.write(ex);
@@ -455,6 +796,12 @@ public void write(JmeExporter ex) throws IOException {
capsule.write(useLinearReferenceFrameA, "useLinearReferenceFrameA", false);
}
+ /**
+ * De-serialize this joint, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
super.read(im);
@@ -528,6 +875,9 @@ public void read(JmeImporter im) throws IOException {
setUpperLinLimit(upperLinLimit);
}
+ /**
+ * Instantiate the configured constraint in Bullet.
+ */
protected void createJoint() {
objectId = createJoint(nodeA.getObjectId(), nodeB.getObjectId(), pivotA, rotA, pivotB, rotB, useLinearReferenceFrameA);
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Joint {0}", Long.toHexString(objectId));
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/joints/motors/RotationalLimitMotor.java b/jme3-bullet/src/main/java/com/jme3/bullet/joints/motors/RotationalLimitMotor.java
index 4b4b4aa956..88db32aba6 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/joints/motors/RotationalLimitMotor.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/joints/motors/RotationalLimitMotor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,135 +32,253 @@
package com.jme3.bullet.joints.motors;
/**
+ * A motor based on Bullet's btRotationalLimitMotor. Motors are used to drive
+ * joints.
*
* @author normenhansen
*/
public class RotationalLimitMotor {
+ /**
+ * Unique identifier of the btRotationalLimitMotor. The constructor sets
+ * this to a non-zero value.
+ */
private long motorId = 0;
+ /**
+ * Instantiate a motor for the identified btRotationalLimitMotor.
+ *
+ * @param motor the unique identifier (not zero)
+ */
public RotationalLimitMotor(long motor) {
this.motorId = motor;
}
+ /**
+ * Read the id of the btRotationalLimitMotor.
+ *
+ * @return the identifier of the btRotationalLimitMotor (not zero)
+ */
public long getMotor() {
return motorId;
}
+ /**
+ * Read this motor's constraint lower limit.
+ *
+ * @return the limit value
+ */
public float getLoLimit() {
return getLoLimit(motorId);
}
private native float getLoLimit(long motorId);
+ /**
+ * Alter this motor's constraint lower limit.
+ *
+ * @param loLimit the desired limit value
+ */
public void setLoLimit(float loLimit) {
setLoLimit(motorId, loLimit);
}
private native void setLoLimit(long motorId, float loLimit);
+ /**
+ * Read this motor's constraint upper limit.
+ *
+ * @return the limit value
+ */
public float getHiLimit() {
return getHiLimit(motorId);
}
private native float getHiLimit(long motorId);
+ /**
+ * Alter this motor's constraint upper limit.
+ *
+ * @param hiLimit the desired limit value
+ */
public void setHiLimit(float hiLimit) {
setHiLimit(motorId, hiLimit);
}
private native void setHiLimit(long motorId, float hiLimit);
+ /**
+ * Read this motor's target velocity.
+ *
+ * @return the target velocity (in radians per second)
+ */
public float getTargetVelocity() {
return getTargetVelocity(motorId);
}
private native float getTargetVelocity(long motorId);
+ /**
+ * Alter this motor's target velocity.
+ *
+ * @param targetVelocity the desired target velocity (in radians per second)
+ */
public void setTargetVelocity(float targetVelocity) {
setTargetVelocity(motorId, targetVelocity);
}
private native void setTargetVelocity(long motorId, float targetVelocity);
+ /**
+ * Read this motor's maximum force.
+ *
+ * @return the maximum force
+ */
public float getMaxMotorForce() {
return getMaxMotorForce(motorId);
}
private native float getMaxMotorForce(long motorId);
+ /**
+ * Alter this motor's maximum force.
+ *
+ * @param maxMotorForce the desired maximum force on the motor
+ */
public void setMaxMotorForce(float maxMotorForce) {
setMaxMotorForce(motorId, maxMotorForce);
}
private native void setMaxMotorForce(long motorId, float maxMotorForce);
+ /**
+ * Read the limit's maximum force.
+ *
+ * @return the maximum force on the limit
+ */
public float getMaxLimitForce() {
return getMaxLimitForce(motorId);
}
private native float getMaxLimitForce(long motorId);
+ /**
+ * Alter the limit's maximum force.
+ *
+ * @param maxLimitForce the desired maximum force on the limit
+ */
public void setMaxLimitForce(float maxLimitForce) {
setMaxLimitForce(motorId, maxLimitForce);
}
private native void setMaxLimitForce(long motorId, float maxLimitForce);
+ /**
+ * Read this motor's damping.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getDamping() {
return getDamping(motorId);
}
private native float getDamping(long motorId);
+ /**
+ * Alter this motor's damping.
+ *
+ * @param damping the desired viscous damping ratio (0→no damping,
+ * 1→critically damped, default=1)
+ */
public void setDamping(float damping) {
setDamping(motorId, damping);
}
private native void setDamping(long motorId, float damping);
+ /**
+ * Read this motor's limit softness.
+ *
+ * @return the limit softness
+ */
public float getLimitSoftness() {
return getLimitSoftness(motorId);
}
private native float getLimitSoftness(long motorId);
+ /**
+ * Alter this motor's limit softness.
+ *
+ * @param limitSoftness the desired limit softness
+ */
public void setLimitSoftness(float limitSoftness) {
setLimitSoftness(motorId, limitSoftness);
}
private native void setLimitSoftness(long motorId, float limitSoftness);
+ /**
+ * Read this motor's error tolerance at limits.
+ *
+ * @return the error tolerance (>0)
+ */
public float getERP() {
return getERP(motorId);
}
private native float getERP(long motorId);
+ /**
+ * Alter this motor's error tolerance at limits.
+ *
+ * @param ERP the desired error tolerance (>0)
+ */
public void setERP(float ERP) {
setERP(motorId, ERP);
}
private native void setERP(long motorId, float ERP);
+ /**
+ * Read this motor's bounce.
+ *
+ * @return the bounce (restitution factor)
+ */
public float getBounce() {
return getBounce(motorId);
}
private native float getBounce(long motorId);
+ /**
+ * Alter this motor's bounce.
+ *
+ * @param bounce the desired bounce (restitution factor)
+ */
public void setBounce(float bounce) {
setBounce(motorId, bounce);
}
private native void setBounce(long motorId, float limitSoftness);
+ /**
+ * Test whether this motor is enabled.
+ *
+ * @return true if enabled, otherwise false
+ */
public boolean isEnableMotor() {
return isEnableMotor(motorId);
}
private native boolean isEnableMotor(long motorId);
+ /**
+ * Enable or disable this motor.
+ *
+ * @param enableMotor true→enable, false→disable
+ */
public void setEnableMotor(boolean enableMotor) {
setEnableMotor(motorId, enableMotor);
}
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/joints/motors/TranslationalLimitMotor.java b/jme3-bullet/src/main/java/com/jme3/bullet/joints/motors/TranslationalLimitMotor.java
index 3b7690697f..97993edd3a 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/joints/motors/TranslationalLimitMotor.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/joints/motors/TranslationalLimitMotor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,21 +34,42 @@
import com.jme3.math.Vector3f;
/**
+ * A motor based on Bullet's btTranslationalLimitMotor. Motors are used to drive
+ * joints.
*
* @author normenhansen
*/
public class TranslationalLimitMotor {
+ /**
+ * Unique identifier of the btTranslationalLimitMotor. The constructor sets
+ * this to a non-zero value. After that, the id never changes.
+ */
private long motorId = 0;
+ /**
+ * Instantiate a motor for the identified btTranslationalLimitMotor.
+ *
+ * @param motor the unique identifier (not zero)
+ */
public TranslationalLimitMotor(long motor) {
this.motorId = motor;
}
+ /**
+ * Read the id of the btTranslationalLimitMotor.
+ *
+ * @return the unique identifier (not zero)
+ */
public long getMotor() {
return motorId;
}
+ /**
+ * Copy this motor's constraint lower limits.
+ *
+ * @return a new vector (not null)
+ */
public Vector3f getLowerLimit() {
Vector3f vec = new Vector3f();
getLowerLimit(motorId, vec);
@@ -57,12 +78,22 @@ public Vector3f getLowerLimit() {
private native void getLowerLimit(long motorId, Vector3f vector);
+ /**
+ * Alter the constraint lower limits.
+ *
+ * @param lowerLimit (unaffected, not null)
+ */
public void setLowerLimit(Vector3f lowerLimit) {
setLowerLimit(motorId, lowerLimit);
}
private native void setLowerLimit(long motorId, Vector3f vector);
+ /**
+ * Copy this motor's constraint upper limits.
+ *
+ * @return a new vector (not null)
+ */
public Vector3f getUpperLimit() {
Vector3f vec = new Vector3f();
getUpperLimit(motorId, vec);
@@ -71,12 +102,22 @@ public Vector3f getUpperLimit() {
private native void getUpperLimit(long motorId, Vector3f vector);
+ /**
+ * Alter the constraint upper limits.
+ *
+ * @param upperLimit (unaffected, not null)
+ */
public void setUpperLimit(Vector3f upperLimit) {
setUpperLimit(motorId, upperLimit);
}
private native void setUpperLimit(long motorId, Vector3f vector);
+ /**
+ * Copy the accumulated impulse.
+ *
+ * @return a new vector (not null)
+ */
public Vector3f getAccumulatedImpulse() {
Vector3f vec = new Vector3f();
getAccumulatedImpulse(motorId, vec);
@@ -85,42 +126,79 @@ public Vector3f getAccumulatedImpulse() {
private native void getAccumulatedImpulse(long motorId, Vector3f vector);
+ /**
+ * Alter the accumulated impulse.
+ *
+ * @param accumulatedImpulse the desired vector (not null, unaffected)
+ */
public void setAccumulatedImpulse(Vector3f accumulatedImpulse) {
setAccumulatedImpulse(motorId, accumulatedImpulse);
}
private native void setAccumulatedImpulse(long motorId, Vector3f vector);
+ /**
+ * Read this motor's limit softness.
+ *
+ * @return the softness
+ */
public float getLimitSoftness() {
return getLimitSoftness(motorId);
}
private native float getLimitSoftness(long motorId);
+ /**
+ * Alter the limit softness.
+ *
+ * @param limitSoftness the desired limit softness (default=0.5)
+ */
public void setLimitSoftness(float limitSoftness) {
setLimitSoftness(motorId, limitSoftness);
}
private native void setLimitSoftness(long motorId, float limitSoftness);
+ /**
+ * Read this motor's damping.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getDamping() {
return getDamping(motorId);
}
private native float getDamping(long motorId);
+ /**
+ * Alter this motor's damping.
+ *
+ * @param damping the desired viscous damping ratio (0→no damping,
+ * 1→critically damped, default=1)
+ */
public void setDamping(float damping) {
setDamping(motorId, damping);
}
private native void setDamping(long motorId, float damping);
+ /**
+ * Read this motor's restitution.
+ *
+ * @return the restitution (bounce) factor
+ */
public float getRestitution() {
return getRestitution(motorId);
}
private native float getRestitution(long motorId);
+ /**
+ * Alter this motor's restitution.
+ *
+ * @param restitution the desired restitution (bounce) factor
+ */
public void setRestitution(float restitution) {
setRestitution(motorId, restitution);
}
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsCharacter.java b/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsCharacter.java
index bf55a29096..148199b75b 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsCharacter.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/objects/PhysicsCharacter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -44,11 +44,19 @@
import java.util.logging.Logger;
/**
- * Basic Bullet Character
+ * A collision object for simplified character simulation, based on Bullet's
+ * btKinematicCharacterController.
+ *
* @author normenhansen
*/
public class PhysicsCharacter extends PhysicsCollisionObject {
+ /**
+ * Unique identifier of btKinematicCharacterController (as opposed to its
+ * collision object, which is a ghost). Constructors are responsible for
+ * setting this to a non-zero value. The id might change if the character
+ * gets rebuilt.
+ */
protected long characterId = 0;
protected float stepHeight;
protected Vector3f walkDirection = new Vector3f();
@@ -59,12 +67,19 @@ public class PhysicsCharacter extends PhysicsCollisionObject {
//TEMP VARIABLES
protected final Quaternion tmp_inverseWorldRotation = new Quaternion();
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public PhysicsCharacter() {
}
/**
- * @param shape The CollisionShape (no Mesh or CompoundCollisionShapes)
- * @param stepHeight The quantization size for vertical movement
+ * Instantiate a character with the specified collision shape and step
+ * height.
+ *
+ * @param shape the desired shape (not null, alias created)
+ * @param stepHeight the quantization size for vertical movement
*/
public PhysicsCharacter(CollisionShape shape, float stepHeight) {
this.collisionShape = shape;
@@ -75,6 +90,9 @@ public PhysicsCharacter(CollisionShape shape, float stepHeight) {
buildObject();
}
+ /**
+ * Create the configured character in Bullet.
+ */
protected void buildObject() {
if (objectId == 0) {
objectId = createGhostObject();
@@ -98,8 +116,9 @@ protected void buildObject() {
private native long createCharacterObject(long objectId, long shapeId, float stepHeight);
/**
- * Sets the location of this physics character
- * @param location
+ * Directly alter the location of this character's center of mass.
+ *
+ * @param location the desired physics location (not null, unaffected)
*/
public void warp(Vector3f location) {
warp(characterId, location);
@@ -108,11 +127,11 @@ public void warp(Vector3f location) {
private native void warp(long characterId, Vector3f location);
/**
- * Set the walk direction, works continuously.
- * This should probably be called setPositionIncrementPerSimulatorStep.
- * This is neither a direction nor a velocity, but the amount to
- * increment the position each physics tick. So vector length = accuracy*speed in m/s
- * @param vec the walk direction to set
+ * Alter the walk offset. The offset will continue to be applied until
+ * altered again.
+ *
+ * @param vec the desired position increment for each physics tick (not
+ * null, unaffected)
*/
public void setWalkDirection(Vector3f vec) {
walkDirection.set(vec);
@@ -122,7 +141,9 @@ public void setWalkDirection(Vector3f vec) {
private native void setWalkDirection(long characterId, Vector3f vec);
/**
- * @return the currently set walkDirection
+ * Access the walk offset.
+ *
+ * @return the pre-existing instance
*/
public Vector3f getWalkDirection() {
return walkDirection;
@@ -130,6 +151,7 @@ public Vector3f getWalkDirection() {
/**
* @deprecated Deprecated in bullet 2.86.1 use setUp(Vector3f) instead
+ * @param axis which axis: 0→X, 1→Y, 2→Z
*/
@Deprecated
public void setUpAxis(int axis) {
@@ -147,6 +169,11 @@ public void setUpAxis(int axis) {
}
}
+ /**
+ * Alter this character's "up" direction.
+ *
+ * @param axis the desired direction (not null, not zero, unaffected)
+ */
public void setUp(Vector3f axis) {
setUp(characterId, axis);
}
@@ -154,6 +181,11 @@ public void setUp(Vector3f axis) {
private native void setUp(long characterId, Vector3f axis);
+ /**
+ * Alter this character's angular velocity.
+ *
+ * @param v the desired angular velocity vector (not null, unaffected)
+ */
public void setAngularVelocity(Vector3f v){
setAngularVelocity(characterId,v);
@@ -161,7 +193,13 @@ public void setAngularVelocity(Vector3f v){
private native void setAngularVelocity(long characterId, Vector3f v);
-
+ /**
+ * Copy this character's angular velocity.
+ *
+ * @param out storage for the result (modified if not null)
+ * @return the velocity vector (either the provided storage or a new vector,
+ * not null)
+ */
public Vector3f getAngularVelocity(Vector3f out){
if(out==null)out=new Vector3f();
getAngularVelocity(characterId,out);
@@ -171,13 +209,23 @@ public Vector3f getAngularVelocity(Vector3f out){
private native void getAngularVelocity(long characterId, Vector3f out);
+ /**
+ * Alter the linear velocity of this character's center of mass.
+ *
+ * @param v the desired velocity vector (not null)
+ */
public void setLinearVelocity(Vector3f v){
setLinearVelocity(characterId,v);
}
private native void setLinearVelocity(long characterId, Vector3f v);
-
+ /**
+ * Copy the linear velocity of this character's center of mass.
+ *
+ * @param out storage for the result (modified if not null)
+ * @return a vector (either the provided storage or a new vector, not null)
+ */
public Vector3f getLinearVelocity(Vector3f out){
if(out==null)out=new Vector3f();
getLinearVelocity(characterId,out);
@@ -187,10 +235,20 @@ public Vector3f getLinearVelocity(Vector3f out){
private native void getLinearVelocity(long characterId, Vector3f out);
+ /**
+ * Read the index of the "up" axis.
+ *
+ * @return which axis: 0→X, 1→Y, 2→Z
+ */
public int getUpAxis() {
return upAxis;
}
+ /**
+ * Alter this character's fall speed.
+ *
+ * @param fallSpeed the desired speed (default=55)
+ */
public void setFallSpeed(float fallSpeed) {
this.fallSpeed = fallSpeed;
setFallSpeed(characterId, fallSpeed);
@@ -198,10 +256,20 @@ public void setFallSpeed(float fallSpeed) {
private native void setFallSpeed(long characterId, float fallSpeed);
+ /**
+ * Read this character's fall speed.
+ *
+ * @return speed
+ */
public float getFallSpeed() {
return fallSpeed;
}
+ /**
+ * Alter this character's jump speed.
+ *
+ * @param jumpSpeed the desired speed (default=10)
+ */
public void setJumpSpeed(float jumpSpeed) {
this.jumpSpeed = jumpSpeed;
setJumpSpeed(characterId, jumpSpeed);
@@ -209,18 +277,31 @@ public void setJumpSpeed(float jumpSpeed) {
private native void setJumpSpeed(long characterId, float jumpSpeed);
+ /**
+ * Read this character's jump speed.
+ *
+ * @return speed
+ */
public float getJumpSpeed() {
return jumpSpeed;
}
/**
- * @deprecated Deprecated in bullet 2.86.1. Use setGravity(Vector3f) instead.
+ * @deprecated Deprecated in bullet 2.86.1. Use setGravity(Vector3f)
+ * instead.
+ * @param value the desired upward component of the acceleration (typically
+ * negative)
*/
@Deprecated
public void setGravity(float value) {
setGravity(new Vector3f(0,value,0));
}
+ /**
+ * Alter this character's gravitational acceleration.
+ *
+ * @param value the desired acceleration vector (not null, unaffected)
+ */
public void setGravity(Vector3f value) {
setGravity(characterId, value);
}
@@ -228,13 +309,22 @@ public void setGravity(Vector3f value) {
private native void setGravity(long characterId, Vector3f gravity);
/**
- * @deprecated Deprecated in bullet 2.86.1. Use getGravity(Vector3f) instead.
+ * @deprecated Deprecated in bullet 2.86.1. Use getGravity(Vector3f)
+ * instead.
+ * @return the upward component of the acceleration (typically negative)
*/
@Deprecated
public float getGravity() {
return getGravity(null).y;
}
+ /**
+ * Copy this character's gravitational acceleration.
+ *
+ * @param out storage for the result (modified if not null)
+ * @return the acceleration vector (either the provided storage or a new
+ * vector, not null)
+ */
public Vector3f getGravity(Vector3f out) {
if(out==null)out=new Vector3f();
getGravity(characterId,out);
@@ -244,12 +334,24 @@ public Vector3f getGravity(Vector3f out) {
private native void getGravity(long characterId,Vector3f out);
+ /**
+ * Read this character's linear damping.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getLinearDamping(){
return getLinearDamping(characterId);
}
private native float getLinearDamping(long characterId);
+ /**
+ * Alter this character's linear damping.
+ *
+ * @param v the desired viscous damping ratio (0→no damping,
+ * 1→critically damped)
+ */
public void setLinearDamping(float v ){
setLinearDamping(characterId,v );
@@ -258,13 +360,24 @@ public void setLinearDamping(float v ){
private native void setLinearDamping(long characterId,float v);
+ /**
+ * Read this character's angular damping.
+ *
+ * @return the viscous damping ratio (0→no damping, 1→critically
+ * damped)
+ */
public float getAngularDamping(){
return getAngularDamping(characterId);
}
private native float getAngularDamping(long characterId);
-
+ /**
+ * Alter this character's angular damping.
+ *
+ * @param v the desired viscous damping ratio (0→no damping,
+ * 1→critically damped, default=0)
+ */
public void setAngularDamping(float v ){
setAngularDamping(characterId,v );
}
@@ -272,13 +385,22 @@ public void setAngularDamping(float v ){
private native void setAngularDamping(long characterId,float v);
+ /**
+ * Read this character's step height.
+ *
+ * @return the height (in physics-space units)
+ */
public float getStepHeight(){
return getStepHeight(characterId);
}
private native float getStepHeight(long characterId);
-
+ /**
+ * Alter this character's step height.
+ *
+ * @param v the desired height (in physics-space units)
+ */
public void setStepHeight(float v ){
setStepHeight(characterId,v );
}
@@ -286,13 +408,22 @@ public void setStepHeight(float v ){
private native void setStepHeight(long characterId,float v);
+ /**
+ * Read this character's maximum penetration depth.
+ *
+ * @return the depth (in physics-space units)
+ */
public float getMaxPenetrationDepth(){
return getMaxPenetrationDepth(characterId);
}
private native float getMaxPenetrationDepth(long characterId);
-
+ /**
+ * Alter this character's maximum penetration depth.
+ *
+ * @param v the desired depth (in physics-space units)
+ */
public void setMaxPenetrationDepth(float v ){
setMaxPenetrationDepth(characterId,v );
}
@@ -303,18 +434,33 @@ public void setMaxPenetrationDepth(float v ){
+ /**
+ * Alter this character's maximum slope angle.
+ *
+ * @param slopeRadians the desired angle (in radians)
+ */
public void setMaxSlope(float slopeRadians) {
setMaxSlope(characterId, slopeRadians);
}
private native void setMaxSlope(long characterId, float slopeRadians);
+ /**
+ * Read this character's maximum slope angle.
+ *
+ * @return the angle (in radians)
+ */
public float getMaxSlope() {
return getMaxSlope(characterId);
}
private native float getMaxSlope(long characterId);
+ /**
+ * Test whether this character is on the ground.
+ *
+ * @return true if on the ground, otherwise false
+ */
public boolean onGround() {
return onGround(characterId);
}
@@ -330,12 +476,24 @@ public void jump() {
}
+ /**
+ * Jump in the specified direction.
+ *
+ * @param dir desired jump direction (not null, unaffected)
+ */
public void jump(Vector3f dir) {
jump(characterId,dir);
}
private native void jump(long characterId,Vector3f v);
+ /**
+ * Apply the specified CollisionShape to this character. Note that the
+ * character should not be in any physics space while changing shape; the
+ * character gets rebuilt on the physics side.
+ *
+ * @param collisionShape the shape to apply (not null, alias created)
+ */
@Override
public void setCollisionShape(CollisionShape collisionShape) {
// if (!(collisionShape.getObjectId() instanceof ConvexShape)) {
@@ -350,15 +508,21 @@ public void setCollisionShape(CollisionShape collisionShape) {
}
/**
- * Set the physics location (same as warp())
- * @param location the location of the actual physics object
+ * Directly alter this character's location. (Same as
+ * {@link #warp(com.jme3.math.Vector3f)}).)
+ *
+ * @param location the desired location (not null, unaffected)
*/
public void setPhysicsLocation(Vector3f location) {
warp(location);
}
/**
- * @return the physicsLocation
+ * Copy the location of this character's center of mass.
+ *
+ * @param trans storage for the result (modified if not null)
+ * @return the location vector (either the provided storage or a new vector,
+ * not null)
*/
public Vector3f getPhysicsLocation(Vector3f trans) {
if (trans == null) {
@@ -371,36 +535,72 @@ public Vector3f getPhysicsLocation(Vector3f trans) {
private native void getPhysicsLocation(long objectId, Vector3f vec);
/**
- * @return the physicsLocation
+ * Copy the location of this character's center of mass.
+ *
+ * @return a new location vector (not null)
*/
public Vector3f getPhysicsLocation() {
return getPhysicsLocation(null);
}
+ /**
+ * Alter this character's continuous collision detection (CCD) swept sphere
+ * radius.
+ *
+ * @param radius (≥0, default=0)
+ */
public void setCcdSweptSphereRadius(float radius) {
setCcdSweptSphereRadius(objectId, radius);
}
private native void setCcdSweptSphereRadius(long objectId, float radius);
+ /**
+ * Alter the amount of motion required to activate continuous collision
+ * detection (CCD).
+ *
- * GhostObject can keep track of all objects that are overlapping.
- * By default, this overlap is based on the AABB.
- * This is useful for creating a character controller,
- * collision sensors/triggers, explosions etc.
+ * btGhostObject is a special btCollisionObject, useful for fast localized
+ * collision queries.
+ *
* @author normenhansen
*/
public class PhysicsGhostObject extends PhysicsCollisionObject {
@@ -61,9 +64,18 @@ public class PhysicsGhostObject extends PhysicsCollisionObject {
protected final Quaternion tmp_inverseWorldRotation = new Quaternion();
private List
- * This avoids the problem of fast objects moving through other objects, set to zero to disable (default)
- * @param threshold
+ * Alter the amount of motion required to activate continuous collision
+ * detection (CCD).
+ *
- * Set this after adding the node to the PhysicsSpace,
- * the PhysicsSpace assigns its current gravity to the physics node when its added.
- * @param gravity the gravity vector to set
+ * Alter this body's gravitational acceleration.
+ *
- * To apply an impulse, use applyImpulse, use applyContinuousForce to apply continuous force.
- * @param force the force
+ * Apply a force to the PhysicsRigidBody. Effective only if the next physics
+ * update steps the physics space.
+ *
- * To apply an impulse, use applyImpulse.
- *
- * @param force the force
+ * Apply a force to the PhysicsRigidBody. Effective only if the next physics
+ * update steps the physics space.
+ *
- * To apply an impulse, use applyImpulse.
- *
- * @param torque the torque
+ * Apply a force to the PhysicsRigidBody. Effective only if the next physics
+ * update steps the physics space.
+ *
- * For most vehicle simulations, it is recommended to use the simplified Bullet
- * vehicle model as provided in btRaycastVehicle. Instead of simulation each wheel
- * and chassis as separate rigid bodies, connected by constraints, it uses a simplified model.
- * This simplified model has many benefits, and is widely used in commercial driving games.
- * The entire vehicle is represented as a single rigidbody, the chassis.
- * The collision detection of the wheels is approximated by ray casts,
- * and the tire friction is a basic anisotropic friction model.
- *
+ * For arcade style vehicle simulations, it is recommended to use the simplified
+ * Bullet vehicle model as provided in btRaycastVehicle. Instead of simulation
+ * each wheel and chassis as separate rigid bodies, connected by constraints, it
+ * uses a simplified model. This simplified model has many benefits, and is
+ * widely used in commercial driving games.
+ *
- * The coefficient of friction between the tyre and the ground.
- * Should be about 0.8 for realistic cars, but can increased for better handling.
- * Set large (10000.0) for kart racers
- * @param frictionSlip the frictionSlip to set
+ * Alter the initial friction for new wheels. Effective only before adding
+ * wheels. After adding a wheel, use {@link #setFrictionSlip(int, float)}.
+ *
- * The maximum distance the suspension can be compressed (centimetres)
- * @param maxSuspensionTravelCm the maxSuspensionTravelCm to set
+ * Alter the initial maximum suspension travel distance for new wheels.
+ * Effective only before adding wheels. After adding a wheel, use
+ * {@link #setMaxSuspensionTravelCm(int, float)}.
+ *
+ * @param maxSuspensionTravelCm the desired maximum distance the suspension
+ * can be compressed (in centimeters, default=500)
*/
public void setMaxSuspensionTravelCm(float maxSuspensionTravelCm) {
tuning.maxSuspensionTravelCm = maxSuspensionTravelCm;
}
/**
- * The maximum distance the suspension can be compressed (centimetres)
- * @param wheel
- * @param maxSuspensionTravelCm
+ * Alter the maximum suspension travel distance for the indexed wheel.
+ *
+ * @param wheel the index of the wheel to modify (≥0)
+ * @param maxSuspensionTravelCm the desired maximum distance the suspension
+ * can be compressed (in centimeters)
*/
public void setMaxSuspensionTravelCm(int wheel, float maxSuspensionTravelCm) {
wheels.get(wheel).setMaxSuspensionTravelCm(maxSuspensionTravelCm);
}
+ /**
+ * Read the initial maximum suspension force for new wheels.
+ *
+ * @return the maximum force per wheel
+ */
public float getMaxSuspensionForce() {
return tuning.maxSuspensionForce;
}
/**
- * This value caps the maximum suspension force, raise this above the default 6000 if your suspension cannot
- * handle the weight of your vehicle.
- * @param maxSuspensionForce
+ * Alter the initial maximum suspension force for new wheels. Effective only
+ * before adding wheels. After adding a wheel, use
+ * {@link #setMaxSuspensionForce(int, float)}.
+ *
- * The damping coefficient for when the suspension is compressed.
- * Set to k * 2.0 * FastMath.sqrt(m_suspensionStiffness) so k is proportional to critical damping.
- * k = 0.0 undamped & bouncy, k = 1.0 critical damping
- * 0.1 to 0.3 are good values
- * @param suspensionCompression the suspensionCompression to set
+ * Alter the initial damping (when the suspension is compressed) for new
+ * wheels. Effective only before adding wheels. After adding a wheel, use
+ * {@link #setSuspensionCompression(int, float)}.
+ *
- * k = 0.0 undamped & bouncy, k = 1.0 critical damping
- * 0.1 to 0.3 are good values
- * @param wheel
- * @param suspensionCompression
+ * Alter the damping (when the suspension is compressed) for the indexed
+ * wheel.
+ *
- * The damping coefficient for when the suspension is expanding.
- * See the comments for setSuspensionCompression for how to set k.
- * @param suspensionDamping the suspensionDamping to set
+ * Alter the initial damping (when the suspension is expanded) for new
+ * wheels. Effective only before adding wheels. After adding a wheel, use
+ * {@link #setSuspensionCompression(int, float)}.
+ *
- * The stiffness constant for the suspension. 10.0 - Offroad buggy, 50.0 - Sports car, 200.0 - F1 Car
- * @param suspensionStiffness
+ * Alter the initial suspension stiffness for new wheels. Effective only
+ * before adding wheels. After adding a wheel, use
+ * {@link #setSuspensionStiffness(int, float)}.
+ *
+ * @param suspensionStiffness the desired stiffness coefficient
+ * (10→off-road buggy, 50→sports car, 200→Formula-1 race car,
+ * default=5.88)
*/
public void setSuspensionStiffness(float suspensionStiffness) {
tuning.suspensionStiffness = suspensionStiffness;
}
/**
- * The stiffness constant for the suspension. 10.0 - Offroad buggy, 50.0 - Sports car, 200.0 - F1 Car
- * @param wheel
- * @param suspensionStiffness
+ * Alter the suspension stiffness of the indexed wheel.
+ *
+ * @param wheel the index of the wheel to modify (≥0)
+ * @param suspensionStiffness the desired stiffness coefficient
+ * (10→off-road buggy, 50→sports car, 200→Formula-1 race car,
+ * default=5.88)
*/
public void setSuspensionStiffness(int wheel, float suspensionStiffness) {
wheels.get(wheel).setSuspensionStiffness(suspensionStiffness);
}
/**
- * Reset the suspension
+ * Reset this vehicle's suspension.
*/
public void resetSuspension() {
resetSuspension(vehicleId);
@@ -397,8 +528,9 @@ public void resetSuspension() {
private native void resetSuspension(long vehicleId);
/**
- * Apply the given engine force to all wheels, works continuously
- * @param force the force
+ * Apply the specified engine force to all wheels. Works continuously.
+ *
+ * @param force the desired amount of force
*/
public void accelerate(float force) {
for (int i = 0; i < wheels.size(); i++) {
@@ -407,9 +539,10 @@ public void accelerate(float force) {
}
/**
- * Apply the given engine force, works continuously
- * @param wheel the wheel to apply the force on
- * @param force the force
+ * Apply the given engine force to the indexed wheel. Works continuously.
+ *
+ * @param wheel the index of the wheel to apply the force to (≥0)
+ * @param force the desired amount of force
*/
public void accelerate(int wheel, float force) {
applyEngineForce(vehicleId, wheel, force);
@@ -419,8 +552,9 @@ public void accelerate(int wheel, float force) {
private native void applyEngineForce(long vehicleId, int wheel, float force);
/**
- * Set the given steering value to all front wheels (0 = forward)
- * @param value the steering angle of the front wheels (Pi = 360deg)
+ * Alter the steering angle of all front wheels.
+ *
+ * @param value the desired steering angle (in radians, 0=straight)
*/
public void steer(float value) {
for (int i = 0; i < wheels.size(); i++) {
@@ -431,9 +565,10 @@ public void steer(float value) {
}
/**
- * Set the given steering value to the given wheel (0 = forward)
- * @param wheel the wheel to set the steering on
- * @param value the steering angle of the front wheels (Pi = 360deg)
+ * Alter the steering angle of the indexed wheel.
+ *
+ * @param wheel the index of the wheel to steer (≥0)
+ * @param value the desired steering angle (in radians, 0=straight)
*/
public void steer(int wheel, float value) {
steer(vehicleId, wheel, value);
@@ -442,8 +577,9 @@ public void steer(int wheel, float value) {
private native void steer(long vehicleId, int wheel, float value);
/**
- * Apply the given brake force to all wheels, works continuously
- * @param force the force
+ * Apply the given brake force to all wheels. Works continuously.
+ *
+ * @param force the desired amount of force
*/
public void brake(float force) {
for (int i = 0; i < wheels.size(); i++) {
@@ -452,9 +588,10 @@ public void brake(float force) {
}
/**
- * Apply the given brake force, works continuously
- * @param wheel the wheel to apply the force on
- * @param force the force
+ * Apply the given brake force to the indexed wheel. Works continuously.
+ *
+ * @param wheel the index of the wheel to apply the force to (≥0)
+ * @param force the desired amount of force
*/
public void brake(int wheel, float force) {
brake(vehicleId, wheel, force);
@@ -463,8 +600,9 @@ public void brake(int wheel, float force) {
private native void brake(long vehicleId, int wheel, float force);
/**
- * Get the current speed of the vehicle in km/h
- * @return
+ * Read the vehicle's speed in km/h.
+ *
+ * @return speed (in kilometers per hour)
*/
public float getCurrentVehicleSpeedKmHour() {
return getCurrentVehicleSpeedKmHour(vehicleId);
@@ -473,9 +611,11 @@ public float getCurrentVehicleSpeedKmHour() {
private native float getCurrentVehicleSpeedKmHour(long vehicleId);
/**
- * Get the current forward vector of the vehicle in world coordinates
- * @param vector
- * @return
+ * Copy the vehicle's forward direction.
+ *
+ * @param vector storage for the result (modified if not null)
+ * @return a direction vector (in physics-space coordinates, either the
+ * provided storage or a new vector, not null)
*/
public Vector3f getForwardVector(Vector3f vector) {
if (vector == null) {
@@ -489,11 +629,19 @@ public Vector3f getForwardVector(Vector3f vector) {
/**
* used internally
+ *
+ * @return the unique identifier
*/
public long getVehicleId() {
return vehicleId;
}
+ /**
+ * De-serialize this vehicle, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
InputCapsule capsule = im.getCapsule(this);
@@ -509,6 +657,12 @@ public void read(JmeImporter im) throws IOException {
super.read(im);
}
+ /**
+ * Serialize this vehicle, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
OutputCapsule capsule = ex.getCapsule(this);
@@ -522,6 +676,12 @@ public void write(JmeExporter ex) throws IOException {
super.write(ex);
}
+ /**
+ * Finalize this vehicle just before it is destroyed. Should be invoked only
+ * by a subclass or by the garbage collector.
+ *
+ * @throws Throwable ignored by the garbage collector
+ */
@Override
protected void finalize() throws Throwable {
super.finalize();
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/objects/VehicleWheel.java b/jme3-bullet/src/main/java/com/jme3/bullet/objects/VehicleWheel.java
index 1c7820907e..25fa2c1030 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/objects/VehicleWheel.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/objects/VehicleWheel.java
@@ -40,42 +40,142 @@
import java.io.IOException;
/**
- * Stores info about one wheel of a PhysicsVehicle
+ * Information about one wheel of a PhysicsVehicle.
+ *
* @author normenhansen
*/
public class VehicleWheel implements Savable {
+ /**
+ * unique identifier of the btRaycastVehicle
+ */
protected long wheelId = 0;
+ /**
+ * 0-origin index among the vehicle's wheels (≥0)
+ */
protected int wheelIndex = 0;
+ /**
+ * copy of wheel type: true→front (steering) wheel,
+ * false→non-front wheel
+ */
protected boolean frontWheel;
+ /**
+ * location where the suspension connects to the chassis (in chassis
+ * coordinates)
+ */
protected Vector3f location = new Vector3f();
+ /**
+ * suspension direction (in chassis coordinates, typically down/0,-1,0)
+ */
protected Vector3f direction = new Vector3f();
+ /**
+ * axis direction (in chassis coordinates, typically to the right/-1,0,0)
+ */
protected Vector3f axle = new Vector3f();
+ /**
+ * copy of suspension stiffness constant (10→off-road buggy,
+ * 50→sports car, 200→Formula-1 race car, default=20)
+ */
protected float suspensionStiffness = 20.0f;
+ /**
+ * copy of suspension damping when expanded (0→no damping, default=2.3)
+ */
protected float wheelsDampingRelaxation = 2.3f;
+ /**
+ * copy of suspension damping when compressed (0→no damping,
+ * default=4.4)
+ */
protected float wheelsDampingCompression = 4.4f;
+ /**
+ * copy of coefficient of friction between tyre and ground
+ * (0.8→realistic car, 10000→kart racer, default=10.5)
+ */
protected float frictionSlip = 10.5f;
+ /**
+ * copy of roll-influence factor (0→no roll torque, 1→realistic
+ * behavior, default=1)
+ */
protected float rollInfluence = 1.0f;
+ /**
+ * copy of maximum suspension travel distance (in centimeters, default=500)
+ */
protected float maxSuspensionTravelCm = 500f;
+ /**
+ * copy of maximum force exerted by the suspension (default=6000)
+ */
protected float maxSuspensionForce = 6000f;
+ /**
+ * copy of wheel radius (in physics-space units, >0)
+ */
protected float radius = 0.5f;
+ /**
+ * copy of rest length of the suspension (in physics-space units)
+ */
protected float restLength = 1f;
+ /**
+ * wheel location in physics-space coordinates
+ */
protected Vector3f wheelWorldLocation = new Vector3f();
+ /**
+ * wheel orientation in physics-space coordinates
+ */
protected Quaternion wheelWorldRotation = new Quaternion();
+ /**
+ * associated spatial, or null if none
+ */
protected Spatial wheelSpatial;
protected Matrix3f tmp_Matrix = new com.jme3.math.Matrix3f();
protected final Quaternion tmp_inverseWorldRotation = new Quaternion();
+ /**
+ * true → physics coordinates match local transform, false →
+ * physics coordinates match world transform
+ */
private boolean applyLocal = false;
+ /**
+ * No-argument constructor needed by SavableClassUtil. Do not invoke
+ * directly!
+ */
public VehicleWheel() {
}
+ /**
+ * Instantiate a wheel.
+ *
+ * @param spat the associated spatial, or null if none
+ * @param location the location where the suspension connects to the chassis
+ * (in chassis coordinates, not null, unaffected)
+ * @param direction the suspension direction (in chassis coordinates, not
+ * null, unaffected, typically down/0,-1,0)
+ * @param axle the axis direction (in chassis coordinates, not null,
+ * unaffected, typically right/-1,0,0)
+ * @param restLength the rest length of the suspension (in physics-space
+ * units)
+ * @param radius the wheel's radius (in physics-space units, ≥0)
+ * @param frontWheel true→front (steering) wheel, false→non-front
+ * wheel
+ */
public VehicleWheel(Spatial spat, Vector3f location, Vector3f direction, Vector3f axle,
float restLength, float radius, boolean frontWheel) {
this(location, direction, axle, restLength, radius, frontWheel);
wheelSpatial = spat;
}
+ /**
+ * Instantiate a wheel without an associated spatial.
+ *
+ * @param location the location where the suspension connects to the chassis
+ * (in chassis coordinates, not null, unaffected)
+ * @param direction the suspension direction (in chassis coordinates, not
+ * null, unaffected, typically down/0,-1,0)
+ * @param axle the axis direction (in chassis coordinates, not null,
+ * unaffected, typically right/-1,0,0)
+ * @param restLength the rest length of the suspension (in physics-space
+ * units)
+ * @param radius the wheel's radius (in physics-space units, ≥0)
+ * @param frontWheel true→front (steering) wheel, false→non-front
+ * wheel
+ */
public VehicleWheel(Vector3f location, Vector3f direction, Vector3f axle,
float restLength, float radius, boolean frontWheel) {
this.location.set(location);
@@ -86,6 +186,9 @@ public VehicleWheel(Vector3f location, Vector3f direction, Vector3f axle,
this.radius = radius;
}
+ /**
+ * Update this wheel's location and orientation in physics space.
+ */
public void updatePhysicsState() {
getWheelLocation(wheelId, wheelIndex, wheelWorldLocation);
getWheelRotation(wheelId, wheelIndex, tmp_Matrix);
@@ -96,6 +199,10 @@ public void updatePhysicsState() {
private native void getWheelRotation(long vehicleId, int wheelId, Matrix3f location);
+ /**
+ * Apply this wheel's physics location and orientation to its associated
+ * spatial, if any.
+ */
public void applyWheelTransform() {
if (wheelSpatial == null) {
return;
@@ -118,132 +225,232 @@ public void applyWheelTransform() {
}
}
+ /**
+ * Read the id of the btRaycastVehicle.
+ *
+ * @return the unique identifier (not zero)
+ */
public long getWheelId() {
return wheelId;
}
+ /**
+ * Assign this wheel to a vehicle.
+ *
+ * @param vehicleId the id of the btRaycastVehicle (not zero)
+ * @param wheelIndex index among the vehicle's wheels (≥0)
+ */
public void setVehicleId(long vehicleId, int wheelIndex) {
this.wheelId = vehicleId;
this.wheelIndex = wheelIndex;
applyInfo();
}
+ /**
+ * Test whether this wheel is a front wheel.
+ *
+ * @return true if front wheel, otherwise false
+ */
public boolean isFrontWheel() {
return frontWheel;
}
+ /**
+ * Alter whether this wheel is a front (steering) wheel.
+ *
+ * @param frontWheel true→front wheel, false→non-front wheel
+ */
public void setFrontWheel(boolean frontWheel) {
this.frontWheel = frontWheel;
applyInfo();
}
+ /**
+ * Access the location where the suspension connects to the chassis.
+ *
+ * @return the pre-existing location vector (in chassis coordinates, not
+ * null)
+ */
public Vector3f getLocation() {
return location;
}
+ /**
+ * Access this wheel's suspension direction.
+ *
+ * @return the pre-existing direction vector (in chassis coordinates, not
+ * null)
+ */
public Vector3f getDirection() {
return direction;
}
+ /**
+ * Access this wheel's axle direction.
+ *
+ * @return the pre-existing direction vector (not null)
+ */
public Vector3f getAxle() {
return axle;
}
+ /**
+ * Read the stiffness constant for this wheel's suspension.
+ *
+ * @return the stiffness constant
+ */
public float getSuspensionStiffness() {
return suspensionStiffness;
}
/**
- * the stiffness constant for the suspension. 10.0 - Offroad buggy, 50.0 - Sports car, 200.0 - F1 Car
- * @param suspensionStiffness
+ * Alter the stiffness constant for this wheel's suspension.
+ *
+ * @param suspensionStiffness the desired stiffness constant
+ * (10→off-road buggy, 50→sports car, 200→Formula-1 race car,
+ * default=20)
*/
public void setSuspensionStiffness(float suspensionStiffness) {
this.suspensionStiffness = suspensionStiffness;
applyInfo();
}
+ /**
+ * Read this wheel's damping when the suspension is expanded.
+ *
+ * @return the damping
+ */
public float getWheelsDampingRelaxation() {
return wheelsDampingRelaxation;
}
/**
- * the damping coefficient for when the suspension is expanding.
- * See the comments for setWheelsDampingCompression for how to set k.
- * @param wheelsDampingRelaxation
+ * Alter this wheel's damping when the suspension is expanded.
+ *
- * k = 0.0 undamped & bouncy, k = 1.0 critical damping
- * 0.1 to 0.3 are good values
- * @param wheelsDampingCompression
+ * Alter this wheel's damping when the suspension is compressed.
+ *
- * 0.0 = wheels are sliding, 1.0 = wheels have traction.
+ * Calculate to what extent the wheel is skidding (for skid sounds/smoke
+ * etc.)
+ *
+ * @return the relative amount of traction (0→wheel is sliding,
+ * 1→wheel has full traction)
*/
public float getSkidInfo() {
return getSkidInfo(wheelId, wheelIndex);
@@ -351,8 +592,9 @@ public float getSkidInfo() {
public native float getSkidInfo(long wheelId, int wheelIndex);
/**
- * returns how many degrees the wheel has turned since the last physics
- * step.
+ * Calculate how much this wheel has turned since the last physics step.
+ *
+ * @return the rotation angle (in radians)
*/
public float getDeltaRotation() {
return getDeltaRotation(wheelId, wheelIndex);
@@ -360,6 +602,12 @@ public float getDeltaRotation() {
public native float getDeltaRotation(long wheelId, int wheelIndex);
+ /**
+ * De-serialize this wheel, for example when loading from a J3O file.
+ *
+ * @param im importer (not null)
+ * @throws IOException from importer
+ */
@Override
public void read(JmeImporter im) throws IOException {
InputCapsule capsule = im.getCapsule(this);
@@ -379,6 +627,12 @@ public void read(JmeImporter im) throws IOException {
restLength = capsule.readFloat("restLength", 1f);
}
+ /**
+ * Serialize this wheel, for example when saving to a J3O file.
+ *
+ * @param ex exporter (not null)
+ * @throws IOException from exporter
+ */
@Override
public void write(JmeExporter ex) throws IOException {
OutputCapsule capsule = ex.getCapsule(this);
@@ -399,41 +653,59 @@ public void write(JmeExporter ex) throws IOException {
}
/**
- * @return the wheelSpatial
+ * Access the spatial associated with this wheel.
+ *
+ * @return the pre-existing instance, or null
*/
public Spatial getWheelSpatial() {
return wheelSpatial;
}
/**
- * @param wheelSpatial the wheelSpatial to set
+ * Alter which spatial is associated with this wheel.
+ *
+ * @param wheelSpatial the desired spatial, or null for none
*/
public void setWheelSpatial(Spatial wheelSpatial) {
this.wheelSpatial = wheelSpatial;
}
+ /**
+ * Test whether physics coordinates should match the local transform of the
+ * Spatial.
+ *
+ * @return true if matching local transform, false if matching world
+ * transform
+ */
public boolean isApplyLocal() {
return applyLocal;
}
+ /**
+ * Alter whether physics coordinates should match the local transform of the
+ * Spatial.
+ *
+ * @param applyLocal true→match local transform, false→match world
+ * transform (default=false)
+ */
public void setApplyLocal(boolean applyLocal) {
this.applyLocal = applyLocal;
}
/**
- * write the content of the wheelWorldRotation into the store
- *
- * @param store
- */
+ * Copy this wheel's physics-space orientation to the specified quaternion.
+ *
+ * @param store storage for the result (not null, modified)
+ */
public void getWheelWorldRotation(final Quaternion store) {
store.set(this.wheelWorldRotation);
}
/**
- * write the content of the wheelWorldLocation into the store
- *
- * @param store
- */
+ * Copy this wheel's physics-space location to the specified vector.
+ *
+ * @param store storage for the result (not null, modified)
+ */
public void getWheelWorldLocation(final Vector3f store) {
store.set(this.wheelWorldLocation);
}
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/objects/infos/RigidBodyMotionState.java b/jme3-bullet/src/main/java/com/jme3/bullet/objects/infos/RigidBodyMotionState.java
index 3406e7ae5c..bee3bf78df 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/objects/infos/RigidBodyMotionState.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/objects/infos/RigidBodyMotionState.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -40,8 +40,8 @@
import java.util.logging.Logger;
/**
- * stores transform info of a PhysicsNode in a threadsafe manner to
- * allow multithreaded access from the jme scenegraph and the bullet physicsspace
+ * The motion state (transform) of a rigid body, with thread-safe access.
+ *
* @author normenhansen
*/
public class RigidBodyMotionState {
@@ -51,9 +51,16 @@ public class RigidBodyMotionState {
private Quaternion worldRotationQuat = new Quaternion();
private Quaternion tmp_inverseWorldRotation = new Quaternion();
private PhysicsVehicle vehicle;
+ /**
+ * true → physics coordinates match local transform, false →
+ * physics coordinates match world transform
+ */
private boolean applyPhysicsLocal = false;
// protected LinkedList
- * To attach a debug shape to a physics object, call attachDebugShape(AssetManager manager); on it.
- * @param collisionShape
- * @return
+ * Create a debug spatial from the specified collision shape.
+ * attachDebugShape(AssetManager manager); on it.
+ *
+ * @param collisionShape the shape to visualize (may be null, unaffected)
+ * @return a new tree of geometries, or null
*/
public static Spatial getDebugShape(CollisionShape collisionShape) {
if (collisionShape == null) {
@@ -102,6 +105,12 @@ public static Spatial getDebugShape(CollisionShape collisionShape) {
return debugShape;
}
+ /**
+ * Create a geometry for visualizing the specified shape.
+ *
+ * @param shape (not null, unaffected)
+ * @return a new geometry (not null)
+ */
private static Geometry createDebugShape(CollisionShape shape) {
Geometry geom = new Geometry();
geom.setMesh(DebugShapeFactory.getDebugMesh(shape));
@@ -110,6 +119,12 @@ private static Geometry createDebugShape(CollisionShape shape) {
return geom;
}
+ /**
+ * Create a mesh for visualizing the specified shape.
+ *
+ * @param shape (not null, unaffected)
+ * @return a new mesh (not null)
+ */
public static Mesh getDebugMesh(CollisionShape shape) {
Mesh mesh = new Mesh();
DebugMeshCallback callback = new DebugMeshCallback();
diff --git a/jme3-bullet/src/main/java/com/jme3/bullet/util/NativeMeshUtil.java b/jme3-bullet/src/main/java/com/jme3/bullet/util/NativeMeshUtil.java
index fc3ad53d60..caf172c821 100644
--- a/jme3-bullet/src/main/java/com/jme3/bullet/util/NativeMeshUtil.java
+++ b/jme3-bullet/src/main/java/com/jme3/bullet/util/NativeMeshUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 jMonkeyEngine
+ * Copyright (c) 2009-2018 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -39,18 +39,26 @@
import java.nio.FloatBuffer;
/**
+ * A utility class for interfacing with Native Bullet.
*
* @author normenhansen
*/
public class NativeMeshUtil {
+ /**
+ * Pass a mesh to Native Bullet.
+ *
+ * @param mesh the JME mesh to pass (not null)
+ * @return the unique identifier of the resulting btTriangleIndexVertexArray
+ * (not 0)
+ */
public static long getTriangleIndexVertexArray(Mesh mesh){
ByteBuffer triangleIndexBase = BufferUtils.createByteBuffer(mesh.getTriangleCount() * 3 * 4);
ByteBuffer vertexBase = BufferUtils.createByteBuffer(mesh.getVertexCount() * 3 * 4);
int numVertices = mesh.getVertexCount();
- int vertexStride = 12; //3 verts * 4 bytes per.
+ int vertexStride = 12; //3 verts * 4 bytes each
int numTriangles = mesh.getTriangleCount();
- int triangleIndexStride = 12; //3 index entries * 4 bytes each.
+ int triangleIndexStride = 12; //3 index entries * 4 bytes each
IndexBuffer indices = mesh.getIndicesAsList();
FloatBuffer vertices = mesh.getFloatBuffer(Type.Position);
@@ -72,6 +80,18 @@ public static long getTriangleIndexVertexArray(Mesh mesh){
return createTriangleIndexVertexArray(triangleIndexBase, vertexBase, numTriangles, numVertices, vertexStride, triangleIndexStride);
}
+ /**
+ * Instantiate a btTriangleIndexVertexArray. Native method.
+ *
+ * @param triangleIndexBase index buffer (not null)
+ * @param vertexBase vertex buffer (not null)
+ * @param numTraingles the number of triangles in the mesh (≥0)
+ * @param numVertices the number of vertices in the mesh (≥0)
+ * @param vertextStride (in bytes, >0)
+ * @param triangleIndexStride (in bytes, >0)
+ * @return the unique identifier of the resulting btTriangleIndexVertexArray
+ * (not 0)
+ */
public static native long createTriangleIndexVertexArray(ByteBuffer triangleIndexBase, ByteBuffer vertexBase, int numTraingles, int numVertices, int vertextStride, int triangleIndexStride);
}
diff --git a/jme3-core/src/main/java/com/jme3/audio/AudioNode.java b/jme3-core/src/main/java/com/jme3/audio/AudioNode.java
index 579520f4e7..862348b635 100644
--- a/jme3-core/src/main/java/com/jme3/audio/AudioNode.java
+++ b/jme3-core/src/main/java/com/jme3/audio/AudioNode.java
@@ -722,25 +722,14 @@ public void updateLogicalState(float tpf) {
@Override
public void updateGeometricState() {
super.updateGeometricState();
-
- if (channel < 0) {
- return;
- }
-
+ if (channel < 0 || this.getParent() == null) return;
Vector3f currentWorldTranslation = worldTransform.getTranslation();
-
- if (Float.isNaN(previousWorldTranslation.x)
- || !previousWorldTranslation.equals(currentWorldTranslation)) {
-
+ if (!previousWorldTranslation.equals(currentWorldTranslation)) {
getRenderer().updateSourceParam(this, AudioParam.Position);
-
- if (velocityFromTranslation) {
- velocity.set(currentWorldTranslation).subtractLocal(previousWorldTranslation);
- velocity.multLocal(1f / lastTpf);
-
+ if (velocityFromTranslation && !Float.isNaN(previousWorldTranslation.x)) {
+ velocity.set(currentWorldTranslation).subtractLocal(previousWorldTranslation).multLocal(1f / lastTpf);
getRenderer().updateSourceParam(this, AudioParam.Velocity);
}
-
previousWorldTranslation.set(currentWorldTranslation);
}
}
@@ -748,10 +737,6 @@ public void updateGeometricState() {
@Override
public AudioNode clone(){
AudioNode clone = (AudioNode) super.clone();
-
- clone.direction = direction.clone();
- clone.velocity = velocity.clone();
-
return clone;
}
@@ -760,10 +745,11 @@ public AudioNode clone(){
*/
@Override
public void cloneFields( Cloner cloner, Object original ) {
- super.cloneFields(cloner, original);
+ super.cloneFields(cloner, original);
- this.direction = cloner.clone(direction);
- this.velocity = cloner.clone(velocity);
+ this.direction=cloner.clone(direction);
+ this.velocity=velocityFromTranslation?new Vector3f():cloner.clone(velocity);
+ this.previousWorldTranslation=Vector3f.NAN.clone();
// Change in behavior: the filters were not cloned before meaning
// that two cloned audio nodes would share the same filter instance.
diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticlePointMesh.java b/jme3-core/src/main/java/com/jme3/effect/ParticlePointMesh.java
index 3f56e483b4..b9c0f43d8b 100644
--- a/jme3-core/src/main/java/com/jme3/effect/ParticlePointMesh.java
+++ b/jme3-core/src/main/java/com/jme3/effect/ParticlePointMesh.java
@@ -144,7 +144,7 @@ public void updateParticleData(Particle[] particles, Camera cam, Matrix3f invers
colors.putInt(p.color.asIntABGR());
int imgX = p.imageIndex % imagesX;
- int imgY = (p.imageIndex - imgX) / imagesY;
+ int imgY = p.imageIndex/imagesX;
float startX = ((float) imgX) / imagesX;
float startY = ((float) imgY) / imagesY;
diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleTriMesh.java b/jme3-core/src/main/java/com/jme3/effect/ParticleTriMesh.java
index 8002197b04..16b9071d6d 100644
--- a/jme3-core/src/main/java/com/jme3/effect/ParticleTriMesh.java
+++ b/jme3-core/src/main/java/com/jme3/effect/ParticleTriMesh.java
@@ -251,7 +251,7 @@ public void updateParticleData(Particle[] particles, Camera cam, Matrix3f invers
if (uniqueTexCoords){
int imgX = p.imageIndex % imagesX;
- int imgY = (p.imageIndex - imgX) / imagesY;
+ int imgY = p.imageIndex / imagesX;
float startX = ((float) imgX) / imagesX;
float startY = ((float) imgY) / imagesY;
diff --git a/jme3-core/src/main/java/com/jme3/input/FlyByCamera.java b/jme3-core/src/main/java/com/jme3/input/FlyByCamera.java
index 30d7a3b78c..f7ffa78f11 100644
--- a/jme3-core/src/main/java/com/jme3/input/FlyByCamera.java
+++ b/jme3-core/src/main/java/com/jme3/input/FlyByCamera.java
@@ -412,7 +412,7 @@ protected void zoomCamera(float value){
* @param value translation amount
*/
protected void riseCamera(float value){
- Vector3f vel = new Vector3f(0, value * moveSpeed, 0);
+ Vector3f vel = initialUpVec.mult(value * moveSpeed);
Vector3f pos = cam.getLocation().clone();
if (motionAllowed != null)
diff --git a/jme3-core/src/main/java/com/jme3/math/Quaternion.java b/jme3-core/src/main/java/com/jme3/math/Quaternion.java
index d592640e1a..0625b8edd2 100644
--- a/jme3-core/src/main/java/com/jme3/math/Quaternion.java
+++ b/jme3-core/src/main/java/com/jme3/math/Quaternion.java
@@ -756,7 +756,7 @@ public Quaternion slerp(Quaternion q1, Quaternion q2, float t) {
* @param q2
* Final interpolation value
* @param changeAmnt
- * The amount diffrence
+ * The amount difference
*/
public void slerp(Quaternion q2, float changeAmnt) {
if (this.x == q2.x && this.y == q2.y && this.z == q2.z
diff --git a/jme3-core/src/plugins/java/com/jme3/material/plugins/J3MLoader.java b/jme3-core/src/plugins/java/com/jme3/material/plugins/J3MLoader.java
index c3ac904a56..bd0c597002 100644
--- a/jme3-core/src/plugins/java/com/jme3/material/plugins/J3MLoader.java
+++ b/jme3-core/src/plugins/java/com/jme3/material/plugins/J3MLoader.java
@@ -31,7 +31,6 @@
*/
package com.jme3.material.plugins;
-import com.jme3.material.logic.*;
import com.jme3.asset.*;
import com.jme3.material.*;
import com.jme3.material.RenderState.BlendEquation;
@@ -39,7 +38,7 @@
import com.jme3.material.RenderState.FaceCullMode;
import com.jme3.material.TechniqueDef.LightMode;
import com.jme3.material.TechniqueDef.ShadowMode;
-import com.jme3.material.logic.StaticPassLightingLogic;
+import com.jme3.material.logic.*;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector2f;
import com.jme3.math.Vector3f;
@@ -51,7 +50,6 @@
import com.jme3.util.blockparser.BlockLanguageParser;
import com.jme3.util.blockparser.Statement;
import com.jme3.util.clone.Cloner;
-
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
@@ -451,8 +449,15 @@ private void readWorldParams(Listtrue is the use of the headset camera is allowed and false otherwise.
+ * @return token for camera
+ */
+ public long initCamera(boolean allowed) {
+ hmdErrorStore.put(0, VR.EVRInitError_VRInitError_None); // clear the error store
+ if( allowed) {
+
+ long result = VR.VR_GetGenericInterface(VR.IVRTrackedCamera_Version, hmdErrorStore);
+ if (result > 0){
+ if(hmdErrorStore.get(0) == VR.EVRInitError_VRInitError_None ){
+ logger.config("OpenVR Camera initialized");
+ }
+ return result;
+ } else {
+ logger.severe("Failed to initialize camera");
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public void destroy() {
+ VR.VR_ShutdownInternal();
+ }
+
+ @Override
+ public boolean isInitialized() {
+ return initSuccess;
+ }
+
+ @Override
+ public void reset() {
+ VRSystem.VRSystem_ResetSeatedZeroPose();
+ hmdSeatToStand = null;
+ }
+
+ @Override
+ public void getRenderSize(Vector2f store) {
+ IntBuffer w = BufferUtils.createIntBuffer(1);
+ IntBuffer h = BufferUtils.createIntBuffer(1);
+ VRSystem.VRSystem_GetRecommendedRenderTargetSize(w, h);
+ logger.config("Recommended render width : " + w.get(0));
+ logger.config("Recommended render height: " + h.get(0));
+ store.x = w.get(0);
+ store.y = h.get(0);
+ }
+
+ @Override
+ public float getInterpupillaryDistance() {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public Quaternion getOrientation() {
+ VRUtil.convertMatrix4toQuat(hmdPose, rotStore);
+ return rotStore;
+ }
+
+ @Override
+ public Vector3f getPosition() {
+ // the hmdPose comes in rotated funny, fix that here
+ hmdPose.toTranslationVector(posStore);
+ posStore.x = -posStore.x;
+ posStore.z = -posStore.z;
+ return posStore;
+ }
+
+ @Override
+ public void getPositionAndOrientation(Vector3f storePos, Quaternion storeRot) {
+ hmdPose.toTranslationVector(storePos);
+ storePos.x = -storePos.x;
+ storePos.z = -storePos.z;
+ storeRot.set(getOrientation());
+ }
+
+ @Override
+ public void updatePose(){
+ int result = VRCompositor.nVRCompositor_WaitGetPoses(trackedDevicePose.address(), trackedDevicePose.remaining(), 0, 0);
+ // NPE when calling without a gamePoseArray. Issue filed with lwjgl #418
+// int result = VRCompositor.VRCompositor_WaitGetPoses(trackedDevicePose, null);
+ environment.getVRinput().updateControllerStates();
+
+ // read pose data from native
+ for (int nDevice = 0; nDevice < VR.k_unMaxTrackedDeviceCount; ++nDevice ){
+ if( hmdTrackedDevicePoses[nDevice].bPoseIsValid() ){
+ convertSteamVRMatrix3ToMatrix4f(hmdTrackedDevicePoses[nDevice].mDeviceToAbsoluteTracking(), poseMatrices[nDevice]);
+ }
+ }
+
+ if ( hmdTrackedDevicePoses[VR.k_unTrackedDeviceIndex_Hmd].bPoseIsValid()){
+ hmdPose.set(poseMatrices[VR.k_unTrackedDeviceIndex_Hmd]);
+ } else {
+ hmdPose.set(Matrix4f.IDENTITY);
+ }
+ }
+
+ @Override
+ public Matrix4f getHMDMatrixProjectionLeftEye(Camera cam){
+ if( hmdProjectionLeftEye != null ) {
+ return hmdProjectionLeftEye;
+ } else {
+ HmdMatrix44 mat = HmdMatrix44.create();
+ mat = VRSystem.VRSystem_GetProjectionMatrix(VR.EVREye_Eye_Left, cam.getFrustumNear(), cam.getFrustumFar(), mat);
+ hmdProjectionLeftEye = new Matrix4f();
+ convertSteamVRMatrix4ToMatrix4f(mat, hmdProjectionLeftEye);
+ return hmdProjectionLeftEye;
+ }
+ }
+
+ @Override
+ public Matrix4f getHMDMatrixProjectionRightEye(Camera cam){
+ if( hmdProjectionRightEye != null ) {
+ return hmdProjectionRightEye;
+ } else {
+ HmdMatrix44 mat = HmdMatrix44.create();
+ mat = VRSystem.VRSystem_GetProjectionMatrix(VR.EVREye_Eye_Right, cam.getFrustumNear(), cam.getFrustumFar(), mat);
+ hmdProjectionRightEye = new Matrix4f();
+ convertSteamVRMatrix4ToMatrix4f(mat, hmdProjectionRightEye);
+ return hmdProjectionRightEye;
+ }
+ }
+
+ @Override
+ public Vector3f getHMDVectorPoseLeftEye() {
+ if( hmdPoseLeftEyeVec == null ) {
+ hmdPoseLeftEyeVec = getHMDMatrixPoseLeftEye().toTranslationVector();
+ // set default IPD if none or broken
+ if( hmdPoseLeftEyeVec.x <= 0.080f * -0.5f || hmdPoseLeftEyeVec.x >= 0.040f * -0.5f ) {
+ hmdPoseLeftEyeVec.x = 0.065f * -0.5f;
+ }
+ if( flipEyes == false ) hmdPoseLeftEyeVec.x *= -1f; // it seems these need flipping
+ }
+ return hmdPoseLeftEyeVec;
+ }
+
+ @Override
+ public Vector3f getHMDVectorPoseRightEye() {
+ if( hmdPoseRightEyeVec == null ) {
+ hmdPoseRightEyeVec = getHMDMatrixPoseRightEye().toTranslationVector();
+ // set default IPD if none or broken
+ if( hmdPoseRightEyeVec.x >= 0.080f * 0.5f || hmdPoseRightEyeVec.x <= 0.040f * 0.5f ) {
+ hmdPoseRightEyeVec.x = 0.065f * 0.5f;
+ }
+ if( flipEyes == false ) hmdPoseRightEyeVec.x *= -1f; // it seems these need flipping
+ }
+ return hmdPoseRightEyeVec;
+ }
+
+ @Override
+ public Vector3f getSeatedToAbsolutePosition() {
+ if( environment.isSeatedExperience() == false ) return Vector3f.ZERO;
+ if( hmdSeatToStand == null ) {
+ hmdSeatToStand = new Vector3f();
+
+ HmdMatrix34 mat = HmdMatrix34.create();
+ VRSystem.VRSystem_GetSeatedZeroPoseToStandingAbsoluteTrackingPose(mat);
+ Matrix4f tempmat = new Matrix4f();
+ convertSteamVRMatrix3ToMatrix4f(mat, tempmat);
+ tempmat.toTranslationVector(hmdSeatToStand);
+ }
+ return hmdSeatToStand;
+ }
+
+ @Override
+ public Matrix4f getHMDMatrixPoseLeftEye(){
+ if( hmdPoseLeftEye != null ) {
+ return hmdPoseLeftEye;
+ } else {
+ HmdMatrix34 mat = HmdMatrix34.create();
+ VRSystem.VRSystem_GetEyeToHeadTransform(VR.EVREye_Eye_Left, mat);
+ hmdPoseLeftEye = new Matrix4f();
+ return convertSteamVRMatrix3ToMatrix4f(mat, hmdPoseLeftEye);
+ }
+ }
+
+
+ @Override
+ public Matrix4f getHMDMatrixPoseRightEye(){
+ if( hmdPoseRightEye != null ) {
+ return hmdPoseRightEye;
+ } else {
+ HmdMatrix34 mat = HmdMatrix34.create();
+ VRSystem.VRSystem_GetEyeToHeadTransform(VR.EVREye_Eye_Right, mat);
+ hmdPoseRightEye = new Matrix4f();
+ return convertSteamVRMatrix3ToMatrix4f(mat, hmdPoseRightEye);
+ }
+ }
+
+ @Override
+ public HmdType getType() {
+ String completeName = "";
+ String name = VRSystem.VRSystem_GetStringTrackedDeviceProperty(VR.k_unTrackedDeviceIndex_Hmd,
+ VR.ETrackedDeviceProperty_Prop_ManufacturerName_String,
+ 128, hmdErrorStore);
+ if( hmdErrorStore.get(0) == 0 ) completeName += name;
+ String number = VRSystem.VRSystem_GetStringTrackedDeviceProperty(VR.k_unTrackedDeviceIndex_Hmd,
+ VR.ETrackedDeviceProperty_Prop_ModelNumber_String,
+ 128, hmdErrorStore);
+ if( hmdErrorStore.get(0) == 0 ) completeName += " " + number;
+ if( completeName.length() > 0 ) {
+ completeName = completeName.toLowerCase(Locale.ENGLISH).trim();
+ if( completeName.contains("htc") || completeName.contains("vive") ) {
+ return HmdType.HTC_VIVE;
+ } else if( completeName.contains("osvr") ) {
+ return HmdType.OSVR;
+ } else if( completeName.contains("oculus") || completeName.contains("rift") ||
+ completeName.contains("dk1") || completeName.contains("dk2") || completeName.contains("cv1") ) {
+ return HmdType.OCULUS_RIFT;
+ } else if( completeName.contains("fove") ) {
+ return HmdType.FOVE;
+ } else if( completeName.contains("game") && completeName.contains("face") ) {
+ return HmdType.GAMEFACE;
+ } else if( completeName.contains("morpheus") ) {
+ return HmdType.MORPHEUS;
+ } else if( completeName.contains("gear") ) {
+ return HmdType.GEARVR;
+ } else if( completeName.contains("star") ) {
+ return HmdType.STARVR;
+ } else if( completeName.contains("null") ) {
+ return HmdType.NULL;
+ }
+ }
+ return HmdType.OTHER;
+ }
+
+ public void setTrackingSpace(boolean isSeated){
+ if( isSeated) {
+ VRCompositor.VRCompositor_SetTrackingSpace(VR.ETrackingUniverseOrigin_TrackingUniverseSeated);
+ } else {
+ VRCompositor.VRCompositor_SetTrackingSpace(VR.ETrackingUniverseOrigin_TrackingUniverseStanding);
+ }
+ }
+
+
+ public Matrix4f[] getPoseMatrices() {
+ return poseMatrices;
+ }
+
+}
\ No newline at end of file
diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRBounds.java b/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRBounds.java
new file mode 100644
index 0000000000..2d10f88888
--- /dev/null
+++ b/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRBounds.java
@@ -0,0 +1,53 @@
+package com.jme3.input.vr.lwjgl_openvr;
+
+import com.jme3.input.vr.VRAPI;
+import com.jme3.input.vr.VRBounds;
+import com.jme3.math.Vector2f;
+import com.jme3.util.BufferUtils;
+import java.nio.FloatBuffer;
+
+import java.util.logging.Logger;
+
+/**
+ * A class that represents VR world bounds.
+ * @author reden - phr00t - https://github.com/phr00t
+ * @author Julien Seinturier - COMEX SA - http://www.seinturier.fr
+ * @author Rickard Edén
+ */
+public class LWJGLOpenVRBounds implements VRBounds {
+
+ private static Logger logger = Logger.getLogger(LWJGLOpenVRBounds.class.getName());
+
+ private Vector2f playSize;
+ private boolean setup = false;
+
+ /**
+ * Initialize the VR bounds.
+ * @return true if the initialization is a success and false otherwise.
+ */
+ public boolean init(VRAPI api) {
+
+ logger.config("Initialize VR bounds...");
+
+ if( !setup ) {
+// vrChaperone = new VR_IVRChaperone_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRChaperone_Version, api.hmdErrorStore).getPointer());
+ FloatBuffer fbX = BufferUtils.createFloatBuffer(1);
+ FloatBuffer fbZ = BufferUtils.createFloatBuffer(1);
+ org.lwjgl.openvr.VRChaperone.VRChaperone_GetPlayAreaSize(fbX, fbZ);
+
+ playSize = new Vector2f(fbX.get(0), fbZ.get(0));
+ setup = true;
+ logger.config("Initialize VR bounds [SUCCESS]");
+ return true; // init success
+ }
+
+ logger.config("Initialize VR bounds already done.");
+ return true; // already initialized
+ }
+
+ @Override
+ public Vector2f getPlaySize() {
+ return playSize;
+ }
+
+}
\ No newline at end of file
diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRInput.java b/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRInput.java
new file mode 100644
index 0000000000..d0f49594d5
--- /dev/null
+++ b/jme3-vr/src/main/java/com/jme3/input/vr/lwjgl_openvr/LWJGLOpenVRInput.java
@@ -0,0 +1,498 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jme3.input.vr.lwjgl_openvr;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Logger;
+
+import com.jme3.app.VREnvironment;
+import com.jme3.input.vr.VRInputAPI;
+import com.jme3.input.vr.VRInputType;
+import com.jme3.input.vr.VRTrackedController;
+import com.jme3.input.vr.VRViewManager;
+import com.jme3.math.Quaternion;
+import com.jme3.math.Vector2f;
+import com.jme3.math.Vector3f;
+import com.jme3.renderer.Camera;
+import com.jme3.scene.Spatial;
+import com.jme3.util.VRUtil;
+import java.nio.IntBuffer;
+import org.lwjgl.BufferUtils;
+import org.lwjgl.openvr.HmdVector3;
+import org.lwjgl.openvr.VR;
+import org.lwjgl.openvr.VRControllerState;
+import org.lwjgl.openvr.VRSystem;
+
+/*
+make helper functions to pull the following easily from raw data (DONE)
+trigger:
+Controller#1, Axis#0 X: 0.0, Y: 0.0
+Controller#1, Axis#1 X: 1.0, Y: 0.0
+Controller#1, Axis#2 X: 0.0, Y: 0.0
+Controller#1, Axis#3 X: 0.0, Y: 0.0
+Controller#1, Axis#4 X: 0.0, Y: 0.0
+Button press: 8589934592 (when full), touch: 8589934592
+touchpad (upper left):
+Controller#1, Axis#0 X: -0.6059755, Y: 0.2301706
+Controller#1, Axis#1 X: 0.0, Y: 0.0
+Controller#1, Axis#2 X: 0.0, Y: 0.0
+Controller#1, Axis#3 X: 0.0, Y: 0.0
+Controller#1, Axis#4 X: 0.0, Y: 0.0
+Button press: 4294967296 (when pressed in), touch: 4294967296
+grip:
+Controller#1, Axis#0 X: 0.0, Y: 0.0
+Controller#1, Axis#1 X: 0.0, Y: 0.0
+Controller#1, Axis#2 X: 0.0, Y: 0.0
+Controller#1, Axis#3 X: 0.0, Y: 0.0
+Controller#1, Axis#4 X: 0.0, Y: 0.0
+Button press: 4, touch: 4
+thumb:
+Controller#1, Axis#0 X: 0.0, Y: 0.0
+Controller#1, Axis#1 X: 0.0, Y: 0.0
+Controller#1, Axis#2 X: 0.0, Y: 0.0
+Controller#1, Axis#3 X: 0.0, Y: 0.0
+Controller#1, Axis#4 X: 0.0, Y: 0.0
+Button press: 2, touch: 2
+ */
+/**
+ * A class that wraps an
+ * OpenVR
+ * input.
+ * null values will be returned if no valid pose exists, or that
+ * input device isn't available user code should check for null
+ * values.
+ *
+ * @author reden - phr00t
+ * @author Julien Seinturier - COMEX SA - http://www.seinturier.fr
+ * @author Rickard Edén
+ */
+public class LWJGLOpenVRInput implements VRInputAPI {
+
+ private static final Logger logger = Logger.getLogger(LWJGLOpenVRInput.class.getName());
+
+ private final VRControllerState[] cStates = new VRControllerState[VR.k_unMaxTrackedDeviceCount];
+
+ private final Quaternion[] rotStore = new Quaternion[VR.k_unMaxTrackedDeviceCount];
+
+ private final Vector3f[] posStore = new Vector3f[VR.k_unMaxTrackedDeviceCount];
+
+ private static final int[] controllerIndex = new int[VR.k_unMaxTrackedDeviceCount];
+
+ private int controllerCount = 0;
+
+ private final Vector2f tempAxis = new Vector2f(), temp2Axis = new Vector2f();
+
+ private final Vector2f lastCallAxis[] = new Vector2f[VR.k_unMaxTrackedDeviceCount];
+
+ private final boolean buttonDown[][] = new boolean[VR.k_unMaxTrackedDeviceCount][16];
+
+ private float axisMultiplier = 1f;
+
+ private final Vector3f tempVel = new Vector3f();
+
+ private final Quaternion tempq = new Quaternion();
+
+ private final VREnvironment environment;
+
+ private List
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class AppOverrideKeys_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1485
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class AppOverrideKeys_t extends Structure {
/**
- * const char *
- * C type : char*
- */
- public Pointer pchKey;
+ * const char *
+ * C type : char*
+ */
+ public Pointer pchKey;
/**
- * const char *
- * C type : char*
- */
- public Pointer pchValue;
- public AppOverrideKeys_t() {
- super();
- }
- protected List
+ * C type : char*
+ */
+ public Pointer pchValue;
+ public AppOverrideKeys_t() {
+ super();
+ }
+ protected List
- * C type : char*
- * @param pchValue const char *
- * C type : char*
- */
- public AppOverrideKeys_t(Pointer pchKey, Pointer pchValue) {
- super();
- this.pchKey = pchKey;
- this.pchValue = pchValue;
- }
- public AppOverrideKeys_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends AppOverrideKeys_t implements Structure.ByReference {
-
- };
- public static class ByValue extends AppOverrideKeys_t implements Structure.ByValue {
-
- };
+ * @param pchKey const char *
+ * C type : char*
+ * @param pchValue const char *
+ * C type : char*
+ */
+ public AppOverrideKeys_t(Pointer pchKey, Pointer pchValue) {
+ super();
+ this.pchKey = pchKey;
+ this.pchValue = pchValue;
+ }
+ public AppOverrideKeys_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends AppOverrideKeys_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends AppOverrideKeys_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/COpenVRContext.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/COpenVRContext.java
index 8f85d1e5c7..b57646031b 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/COpenVRContext.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/COpenVRContext.java
@@ -5,90 +5,105 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:1291
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class COpenVRContext extends Structure {
- /**
- * class vr::IVRSystem *
- * C type : intptr_t
- */
- public IntByReference m_pVRSystem;
- /**
- * class vr::IVRChaperone *
- * C type : intptr_t
- */
- public IntByReference m_pVRChaperone;
- /**
- * class vr::IVRChaperoneSetup *
- * C type : intptr_t
- */
- public IntByReference m_pVRChaperoneSetup;
- /**
- * class vr::IVRCompositor *
- * C type : intptr_t
- */
- public IntByReference m_pVRCompositor;
- /**
- * class vr::IVROverlay *
- * C type : intptr_t
- */
- public IntByReference m_pVROverlay;
- /**
- * class vr::IVRResources *
- * C type : intptr_t
- */
- public IntByReference m_pVRResources;
- /**
- * class vr::IVRRenderModels *
- * C type : intptr_t
- */
- public IntByReference m_pVRRenderModels;
- /**
- * class vr::IVRExtendedDisplay *
- * C type : intptr_t
- */
- public IntByReference m_pVRExtendedDisplay;
- /**
- * class vr::IVRSettings *
- * C type : intptr_t
- */
- public IntByReference m_pVRSettings;
- /**
- * class vr::IVRApplications *
- * C type : intptr_t
- */
- public IntByReference m_pVRApplications;
- /**
- * class vr::IVRTrackedCamera *
- * C type : intptr_t
- */
- public IntByReference m_pVRTrackedCamera;
- /**
- * class vr::IVRScreenshots *
- * C type : intptr_t
- */
- public IntByReference m_pVRScreenshots;
- /**
- * class vr::IVRDriverManager *
- * C type : intptr_t
- */
- public IntByReference m_pVRDriverManager;
- public COpenVRContext() {
- super();
- }
- protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class COpenVRContext extends Structure {
+ /**
+ * class vr::IVRSystem *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRSystem;
+ /**
+ * class vr::IVRChaperone *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRChaperone;
+ /**
+ * class vr::IVRChaperoneSetup *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRChaperoneSetup;
+ /**
+ * class vr::IVRCompositor *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRCompositor;
+ /**
+ * class vr::IVROverlay *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVROverlay;
+ /**
+ * class vr::IVRResources *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRResources;
+ /**
+ * class vr::IVRRenderModels *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRRenderModels;
+ /**
+ * class vr::IVRExtendedDisplay *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRExtendedDisplay;
+ /**
+ * class vr::IVRSettings *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRSettings;
+ /**
+ * class vr::IVRApplications *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRApplications;
+ /**
+ * class vr::IVRTrackedCamera *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRTrackedCamera;
+ /**
+ * class vr::IVRScreenshots *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRScreenshots;
+ /**
+ * class vr::IVRDriverManager *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRDriverManager;
+ /**
+ * class vr::IVRInput *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRInput;
+ /**
+ * class vr::IVRIOBuffer *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRIOBuffer;
+ /**
+ * class vr::IVRSpatialAnchors *
+ * C type : intptr_t
+ */
+ public IntByReference m_pVRSpatialAnchors;
+ public COpenVRContext() {
+ super();
+ }
+ protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class CVRSettingHelper extends Structure {
+ /**
+ * class vr::IVRSettings *
+ * C type : intptr_t
+ */
+ public IntByReference m_pSettings;
+ public CVRSettingHelper() {
+ super();
+ }
+ protected List
+ * C type : intptr_t
+ */
+ public CVRSettingHelper(IntByReference m_pSettings) {
+ super();
+ this.m_pSettings = m_pSettings;
+ }
+ public CVRSettingHelper(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends CVRSettingHelper implements Structure.ByReference {
+
+ };
+ public static class ByValue extends CVRSettingHelper implements Structure.ByValue {
+
+ };
+}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/CameraVideoStreamFrameHeader_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/CameraVideoStreamFrameHeader_t.java
index d7f7f690b4..dd7f346f78 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/CameraVideoStreamFrameHeader_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/CameraVideoStreamFrameHeader_t.java
@@ -4,50 +4,50 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:1154
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class CameraVideoStreamFrameHeader_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1466
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class CameraVideoStreamFrameHeader_t extends Structure {
/**
- * @see EVRTrackedCameraFrameType
- * C type : EVRTrackedCameraFrameType
- */
- public int eFrameType;
- public int nWidth;
- public int nHeight;
- public int nBytesPerPixel;
- public int nFrameSequence;
- /** C type : TrackedDevicePose_t */
- public TrackedDevicePose_t standingTrackedDevicePose;
- public CameraVideoStreamFrameHeader_t() {
- super();
- }
- protected List
+ * C type : EVRTrackedCameraFrameType
+ */
+ public int eFrameType;
+ public int nWidth;
+ public int nHeight;
+ public int nBytesPerPixel;
+ public int nFrameSequence;
+ /** C type : TrackedDevicePose_t */
+ public TrackedDevicePose_t standingTrackedDevicePose;
+ public CameraVideoStreamFrameHeader_t() {
+ super();
+ }
+ protected List
- * C type : EVRTrackedCameraFrameType
- * @param standingTrackedDevicePose C type : TrackedDevicePose_t
- */
- public CameraVideoStreamFrameHeader_t(int eFrameType, int nWidth, int nHeight, int nBytesPerPixel, int nFrameSequence, TrackedDevicePose_t standingTrackedDevicePose) {
- super();
- this.eFrameType = eFrameType;
- this.nWidth = nWidth;
- this.nHeight = nHeight;
- this.nBytesPerPixel = nBytesPerPixel;
- this.nFrameSequence = nFrameSequence;
- this.standingTrackedDevicePose = standingTrackedDevicePose;
- }
- public CameraVideoStreamFrameHeader_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends CameraVideoStreamFrameHeader_t implements Structure.ByReference {
-
- };
- public static class ByValue extends CameraVideoStreamFrameHeader_t implements Structure.ByValue {
-
- };
+ * @param eFrameType @see EVRTrackedCameraFrameType
+ * C type : EVRTrackedCameraFrameType
+ * @param standingTrackedDevicePose C type : TrackedDevicePose_t
+ */
+ public CameraVideoStreamFrameHeader_t(int eFrameType, int nWidth, int nHeight, int nBytesPerPixel, int nFrameSequence, TrackedDevicePose_t standingTrackedDevicePose) {
+ super();
+ this.eFrameType = eFrameType;
+ this.nWidth = nWidth;
+ this.nHeight = nHeight;
+ this.nBytesPerPixel = nBytesPerPixel;
+ this.nFrameSequence = nFrameSequence;
+ this.standingTrackedDevicePose = standingTrackedDevicePose;
+ }
+ public CameraVideoStreamFrameHeader_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends CameraVideoStreamFrameHeader_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends CameraVideoStreamFrameHeader_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/Compositor_CumulativeStats.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/Compositor_CumulativeStats.java
index 23f44fb911..c2e741fa42 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/Compositor_CumulativeStats.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/Compositor_CumulativeStats.java
@@ -4,40 +4,40 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:1203
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class Compositor_CumulativeStats extends Structure {
- public int m_nPid;
- public int m_nNumFramePresents;
- public int m_nNumDroppedFrames;
- public int m_nNumReprojectedFrames;
- public int m_nNumFramePresentsOnStartup;
- public int m_nNumDroppedFramesOnStartup;
- public int m_nNumReprojectedFramesOnStartup;
- public int m_nNumLoading;
- public int m_nNumFramePresentsLoading;
- public int m_nNumDroppedFramesLoading;
- public int m_nNumReprojectedFramesLoading;
- public int m_nNumTimedOut;
- public int m_nNumFramePresentsTimedOut;
- public int m_nNumDroppedFramesTimedOut;
- public int m_nNumReprojectedFramesTimedOut;
- public Compositor_CumulativeStats() {
- super();
- }
- protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class Compositor_CumulativeStats extends Structure {
+ public int m_nPid;
+ public int m_nNumFramePresents;
+ public int m_nNumDroppedFrames;
+ public int m_nNumReprojectedFrames;
+ public int m_nNumFramePresentsOnStartup;
+ public int m_nNumDroppedFramesOnStartup;
+ public int m_nNumReprojectedFramesOnStartup;
+ public int m_nNumLoading;
+ public int m_nNumFramePresentsLoading;
+ public int m_nNumDroppedFramesLoading;
+ public int m_nNumReprojectedFramesLoading;
+ public int m_nNumTimedOut;
+ public int m_nNumFramePresentsTimedOut;
+ public int m_nNumDroppedFramesTimedOut;
+ public int m_nNumReprojectedFramesTimedOut;
+ public Compositor_CumulativeStats() {
+ super();
+ }
+ protected List
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class Compositor_FrameTiming extends Structure {
- public int m_nSize;
- public int m_nFrameIndex;
- public int m_nNumFramePresents;
- public int m_nNumMisPresented;
- public int m_nNumDroppedFrames;
- public int m_nReprojectionFlags;
- public double m_flSystemTimeInSeconds;
- public float m_flPreSubmitGpuMs;
- public float m_flPostSubmitGpuMs;
- public float m_flTotalRenderGpuMs;
- public float m_flCompositorRenderGpuMs;
- public float m_flCompositorRenderCpuMs;
- public float m_flCompositorIdleCpuMs;
- public float m_flClientFrameIntervalMs;
- public float m_flPresentCallCpuMs;
- public float m_flWaitForPresentCpuMs;
- public float m_flSubmitFrameMs;
- public float m_flWaitGetPosesCalledMs;
- public float m_flNewPosesReadyMs;
- public float m_flNewFrameReadyMs;
- public float m_flCompositorUpdateStartMs;
- public float m_flCompositorUpdateEndMs;
- public float m_flCompositorRenderStartMs;
- /** C type : TrackedDevicePose_t */
- public TrackedDevicePose_t m_HmdPose;
- public Compositor_FrameTiming() {
- super();
- }
- protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class Compositor_FrameTiming extends Structure {
+ public int m_nSize;
+ public int m_nFrameIndex;
+ public int m_nNumFramePresents;
+ public int m_nNumMisPresented;
+ public int m_nNumDroppedFrames;
+ public int m_nReprojectionFlags;
+ public double m_flSystemTimeInSeconds;
+ public float m_flPreSubmitGpuMs;
+ public float m_flPostSubmitGpuMs;
+ public float m_flTotalRenderGpuMs;
+ public float m_flCompositorRenderGpuMs;
+ public float m_flCompositorRenderCpuMs;
+ public float m_flCompositorIdleCpuMs;
+ public float m_flClientFrameIntervalMs;
+ public float m_flPresentCallCpuMs;
+ public float m_flWaitForPresentCpuMs;
+ public float m_flSubmitFrameMs;
+ public float m_flWaitGetPosesCalledMs;
+ public float m_flNewPosesReadyMs;
+ public float m_flNewFrameReadyMs;
+ public float m_flCompositorUpdateStartMs;
+ public float m_flCompositorUpdateEndMs;
+ public float m_flCompositorRenderStartMs;
+ /** C type : TrackedDevicePose_t */
+ public TrackedDevicePose_t m_HmdPose;
+ public Compositor_FrameTiming() {
+ super();
+ }
+ protected List
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class Compositor_OverlaySettings extends Structure {
- public int size;
- public byte curved;
- public byte antialias;
- public float scale;
- public float distance;
- public float alpha;
- public float uOffset;
- public float vOffset;
- public float uScale;
- public float vScale;
- public float gridDivs;
- public float gridWidth;
- public float gridScale;
- /** C type : HmdMatrix44_t */
- public HmdMatrix44_t transform;
- public Compositor_OverlaySettings() {
- super();
- }
- protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class Compositor_OverlaySettings extends Structure {
+ public int size;
+ public byte curved;
+ public byte antialias;
+ public float scale;
+ public float distance;
+ public float alpha;
+ public float uOffset;
+ public float vOffset;
+ public float uScale;
+ public float vScale;
+ public float gridDivs;
+ public float gridWidth;
+ public float gridScale;
+ /** C type : HmdMatrix44_t */
+ public HmdMatrix44_t transform;
+ public Compositor_OverlaySettings() {
+ super();
+ }
+ protected List
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class D3D12TextureData_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1301
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class D3D12TextureData_t extends Structure {
/**
- * struct ID3D12Resource *
- * C type : ID3D12Resource*
- */
- public ID3D12Resource m_pResource;
+ * struct ID3D12Resource *
+ * C type : ID3D12Resource*
+ */
+ public ID3D12Resource m_pResource;
/**
- * struct ID3D12CommandQueue *
- * C type : ID3D12CommandQueue*
- */
- public ID3D12CommandQueue m_pCommandQueue;
- public int m_nNodeMask;
- public D3D12TextureData_t() {
- super();
- }
- protected List
+ * C type : ID3D12CommandQueue*
+ */
+ public ID3D12CommandQueue m_pCommandQueue;
+ public int m_nNodeMask;
+ public D3D12TextureData_t() {
+ super();
+ }
+ protected List
- * C type : ID3D12Resource*
- * @param m_pCommandQueue struct ID3D12CommandQueue *
- * C type : ID3D12CommandQueue*
- */
- public D3D12TextureData_t(ID3D12Resource m_pResource, ID3D12CommandQueue m_pCommandQueue, int m_nNodeMask) {
- super();
- this.m_pResource = m_pResource;
- this.m_pCommandQueue = m_pCommandQueue;
- this.m_nNodeMask = m_nNodeMask;
- }
- public D3D12TextureData_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends D3D12TextureData_t implements Structure.ByReference {
-
- };
- public static class ByValue extends D3D12TextureData_t implements Structure.ByValue {
-
- };
+ * @param m_pResource struct ID3D12Resource *
+ * C type : ID3D12Resource*
+ * @param m_pCommandQueue struct ID3D12CommandQueue *
+ * C type : ID3D12CommandQueue*
+ */
+ public D3D12TextureData_t(ID3D12Resource m_pResource, ID3D12CommandQueue m_pCommandQueue, int m_nNodeMask) {
+ super();
+ this.m_pResource = m_pResource;
+ this.m_pCommandQueue = m_pCommandQueue;
+ this.m_nNodeMask = m_nNodeMask;
+ }
+ public D3D12TextureData_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends D3D12TextureData_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends D3D12TextureData_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/DistortionCoordinates_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/DistortionCoordinates_t.java
index 780da58451..e2f61e38d0 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/DistortionCoordinates_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/DistortionCoordinates_t.java
@@ -4,60 +4,60 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:981
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class DistortionCoordinates_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1237
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class DistortionCoordinates_t extends Structure {
/**
- * float[2]
- * C type : float[2]
- */
- public float[] rfRed = new float[2];
+ * float[2]
+ * C type : float[2]
+ */
+ public float[] rfRed = new float[2];
/**
- * float[2]
- * C type : float[2]
- */
- public float[] rfGreen = new float[2];
+ * float[2]
+ * C type : float[2]
+ */
+ public float[] rfGreen = new float[2];
/**
- * float[2]
- * C type : float[2]
- */
- public float[] rfBlue = new float[2];
- public DistortionCoordinates_t() {
- super();
- }
- protected List
+ * C type : float[2]
+ */
+ public float[] rfBlue = new float[2];
+ public DistortionCoordinates_t() {
+ super();
+ }
+ protected List
- * C type : float[2]
- * @param rfGreen float[2]
- * C type : float[2]
- * @param rfBlue float[2]
- * C type : float[2]
- */
- public DistortionCoordinates_t(float rfRed[], float rfGreen[], float rfBlue[]) {
- super();
- if ((rfRed.length != this.rfRed.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.rfRed = rfRed;
- if ((rfGreen.length != this.rfGreen.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.rfGreen = rfGreen;
- if ((rfBlue.length != this.rfBlue.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.rfBlue = rfBlue;
- }
- public DistortionCoordinates_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends DistortionCoordinates_t implements Structure.ByReference {
-
- };
- public static class ByValue extends DistortionCoordinates_t implements Structure.ByValue {
-
- };
+ * @param rfRed float[2]
+ * C type : float[2]
+ * @param rfGreen float[2]
+ * C type : float[2]
+ * @param rfBlue float[2]
+ * C type : float[2]
+ */
+ public DistortionCoordinates_t(float rfRed[], float rfGreen[], float rfBlue[]) {
+ super();
+ if ((rfRed.length != this.rfRed.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.rfRed = rfRed;
+ if ((rfGreen.length != this.rfGreen.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.rfGreen = rfGreen;
+ if ((rfBlue.length != this.rfBlue.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.rfBlue = rfBlue;
+ }
+ public DistortionCoordinates_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends DistortionCoordinates_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends DistortionCoordinates_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/DriverDirectMode_FrameTiming.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/DriverDirectMode_FrameTiming.java
new file mode 100644
index 0000000000..ca52264aba
--- /dev/null
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/DriverDirectMode_FrameTiming.java
@@ -0,0 +1,41 @@
+package com.jme3.system.jopenvr;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import java.util.Arrays;
+import java.util.List;
+/**
+ * native declaration : headers\openvr_capi.h:1473
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class DriverDirectMode_FrameTiming extends Structure {
+ public int m_nSize;
+ public int m_nNumFramePresents;
+ public int m_nNumMisPresented;
+ public int m_nNumDroppedFrames;
+ public int m_nReprojectionFlags;
+ public DriverDirectMode_FrameTiming() {
+ super();
+ }
+ protected List
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HiddenAreaMesh_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1425
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HiddenAreaMesh_t extends Structure {
/**
- * const struct vr::HmdVector2_t *
- * C type : HmdVector2_t*
- */
- public com.jme3.system.jopenvr.HmdVector2_t.ByReference pVertexData;
- public int unTriangleCount;
- public HiddenAreaMesh_t() {
- super();
- }
- protected List
+ * C type : HmdVector2_t*
+ */
+ public com.jme3.system.jopenvr.HmdVector2_t.ByReference pVertexData;
+ public int unTriangleCount;
+ public HiddenAreaMesh_t() {
+ super();
+ }
+ protected List
- * C type : HmdVector2_t*
- */
- public HiddenAreaMesh_t(com.jme3.system.jopenvr.HmdVector2_t.ByReference pVertexData, int unTriangleCount) {
- super();
- this.pVertexData = pVertexData;
- this.unTriangleCount = unTriangleCount;
- }
- public HiddenAreaMesh_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends HiddenAreaMesh_t implements Structure.ByReference {
-
- };
- public static class ByValue extends HiddenAreaMesh_t implements Structure.ByValue {
-
- };
+ * @param pVertexData const struct vr::HmdVector2_t *
+ * C type : HmdVector2_t*
+ */
+ public HiddenAreaMesh_t(com.jme3.system.jopenvr.HmdVector2_t.ByReference pVertexData, int unTriangleCount) {
+ super();
+ this.pVertexData = pVertexData;
+ this.unTriangleCount = unTriangleCount;
+ }
+ public HiddenAreaMesh_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HiddenAreaMesh_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HiddenAreaMesh_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdColor_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdColor_t.java
index 32e3ef1fb3..78bedfbcf5 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdColor_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdColor_t.java
@@ -4,36 +4,36 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:965
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdColor_t extends Structure {
- public float r;
- public float g;
- public float b;
- public float a;
- public HmdColor_t() {
- super();
- }
- protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdColor_t extends Structure {
+ public float r;
+ public float g;
+ public float b;
+ public float a;
+ public HmdColor_t() {
+ super();
+ }
+ protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdMatrix33_t extends Structure {
+ /**
+ * float[3][3]
+ * C type : float[3][3]
+ */
+ public float[] m = new float[((3) * (3))];
+ public HmdMatrix33_t() {
+ super();
+ }
+ protected List
+ * C type : float[3][3]
+ */
+ public HmdMatrix33_t(float m[]) {
+ super();
+ if ((m.length != this.m.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.m = m;
+ }
+ public HmdMatrix33_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HmdMatrix33_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HmdMatrix33_t implements Structure.ByValue {
+
+ };
+}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdMatrix34_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdMatrix34_t.java
index e28e27c1dc..6593938053 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdMatrix34_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdMatrix34_t.java
@@ -4,40 +4,40 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:933
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdMatrix34_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1179
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdMatrix34_t extends Structure {
/**
- * float[3][4]
- * C type : float[3][4]
- */
- public float[] m = new float[((3) * (4))];
- public HmdMatrix34_t() {
- super();
- }
- protected List
+ * C type : float[3][4]
+ */
+ public float[] m = new float[((3) * (4))];
+ public HmdMatrix34_t() {
+ super();
+ }
+ protected List
- * C type : float[3][4]
- */
- public HmdMatrix34_t(float m[]) {
- super();
- if ((m.length != this.m.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.m = m;
- }
- public HmdMatrix34_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends HmdMatrix34_t implements Structure.ByReference {
-
- };
- public static class ByValue extends HmdMatrix34_t implements Structure.ByValue {
-
- };
+ * @param m float[3][4]
+ * C type : float[3][4]
+ */
+ public HmdMatrix34_t(float m[]) {
+ super();
+ if ((m.length != this.m.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.m = m;
+ }
+ public HmdMatrix34_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HmdMatrix34_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HmdMatrix34_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdMatrix44_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdMatrix44_t.java
index 83a093abd5..216aa73410 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdMatrix44_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdMatrix44_t.java
@@ -4,40 +4,40 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:937
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdMatrix44_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1187
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdMatrix44_t extends Structure {
/**
- * float[4][4]
- * C type : float[4][4]
- */
- public float[] m = new float[((4) * (4))];
- public HmdMatrix44_t() {
- super();
- }
- protected List
+ * C type : float[4][4]
+ */
+ public float[] m = new float[((4) * (4))];
+ public HmdMatrix44_t() {
+ super();
+ }
+ protected List
- * C type : float[4][4]
- */
- public HmdMatrix44_t(float m[]) {
- super();
- if ((m.length != this.m.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.m = m;
- }
- public HmdMatrix44_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends HmdMatrix44_t implements Structure.ByReference {
-
- };
- public static class ByValue extends HmdMatrix44_t implements Structure.ByValue {
-
- };
+ * @param m float[4][4]
+ * C type : float[4][4]
+ */
+ public HmdMatrix44_t(float m[]) {
+ super();
+ if ((m.length != this.m.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.m = m;
+ }
+ public HmdMatrix44_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HmdMatrix44_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HmdMatrix44_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdQuad_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdQuad_t.java
index f0ddccb70b..0142d8ef13 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdQuad_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdQuad_t.java
@@ -4,40 +4,40 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:969
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdQuad_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1225
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdQuad_t extends Structure {
/**
- * struct vr::HmdVector3_t[4]
- * C type : HmdVector3_t[4]
- */
- public HmdVector3_t[] vCorners = new HmdVector3_t[4];
- public HmdQuad_t() {
- super();
- }
- protected List
+ * C type : HmdVector3_t[4]
+ */
+ public HmdVector3_t[] vCorners = new HmdVector3_t[4];
+ public HmdQuad_t() {
+ super();
+ }
+ protected List
- * C type : HmdVector3_t[4]
- */
- public HmdQuad_t(HmdVector3_t vCorners[]) {
- super();
- if ((vCorners.length != this.vCorners.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.vCorners = vCorners;
- }
- public HmdQuad_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends HmdQuad_t implements Structure.ByReference {
-
- };
- public static class ByValue extends HmdQuad_t implements Structure.ByValue {
-
- };
+ * @param vCorners struct vr::HmdVector3_t[4]
+ * C type : HmdVector3_t[4]
+ */
+ public HmdQuad_t(HmdVector3_t vCorners[]) {
+ super();
+ if ((vCorners.length != this.vCorners.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.vCorners = vCorners;
+ }
+ public HmdQuad_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HmdQuad_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HmdQuad_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdQuaternion_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdQuaternion_t.java
index a02389493d..fb0073ee79 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdQuaternion_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdQuaternion_t.java
@@ -4,36 +4,36 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:959
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdQuaternion_t extends Structure {
- public double w;
- public double x;
- public double y;
- public double z;
- public HmdQuaternion_t() {
- super();
- }
- protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdQuaternion_t extends Structure {
+ public double w;
+ public double x;
+ public double y;
+ public double z;
+ public HmdQuaternion_t() {
+ super();
+ }
+ protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdQuaternionf_t extends Structure {
+ public float w;
+ public float x;
+ public float y;
+ public float z;
+ public HmdQuaternionf_t() {
+ super();
+ }
+ protected List
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdRect2_t extends Structure {
- /** C type : HmdVector2_t */
- public HmdVector2_t vTopLeft;
- /** C type : HmdVector2_t */
- public HmdVector2_t vBottomRight;
- public HmdRect2_t() {
- super();
- }
- protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdRect2_t extends Structure {
+ /** C type : HmdVector2_t */
+ public HmdVector2_t vTopLeft;
+ /** C type : HmdVector2_t */
+ public HmdVector2_t vBottomRight;
+ public HmdRect2_t() {
+ super();
+ }
+ protected List
- * @param vBottomRight C type : HmdVector2_t
- */
- public HmdRect2_t(HmdVector2_t vTopLeft, HmdVector2_t vBottomRight) {
- super();
- this.vTopLeft = vTopLeft;
- this.vBottomRight = vBottomRight;
- }
- public HmdRect2_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends HmdRect2_t implements Structure.ByReference {
-
- };
- public static class ByValue extends HmdRect2_t implements Structure.ByValue {
-
- };
+ * @param vTopLeft C type : HmdVector2_t
+ * @param vBottomRight C type : HmdVector2_t
+ */
+ public HmdRect2_t(HmdVector2_t vTopLeft, HmdVector2_t vBottomRight) {
+ super();
+ this.vTopLeft = vTopLeft;
+ this.vBottomRight = vBottomRight;
+ }
+ public HmdRect2_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HmdRect2_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HmdRect2_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector2_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector2_t.java
index 700bf9a5e2..7a885d4c7d 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector2_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector2_t.java
@@ -4,40 +4,40 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:953
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdVector2_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1203
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdVector2_t extends Structure {
/**
- * float[2]
- * C type : float[2]
- */
- public float[] v = new float[2];
- public HmdVector2_t() {
- super();
- }
- protected List
+ * C type : float[2]
+ */
+ public float[] v = new float[2];
+ public HmdVector2_t() {
+ super();
+ }
+ protected List
- * C type : float[2]
- */
- public HmdVector2_t(float v[]) {
- super();
- if ((v.length != this.v.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.v = v;
- }
- public HmdVector2_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends HmdVector2_t implements Structure.ByReference {
-
- };
- public static class ByValue extends HmdVector2_t implements Structure.ByValue {
-
- };
+ * @param v float[2]
+ * C type : float[2]
+ */
+ public HmdVector2_t(float v[]) {
+ super();
+ if ((v.length != this.v.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.v = v;
+ }
+ public HmdVector2_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HmdVector2_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HmdVector2_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector3_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector3_t.java
index b136791e12..ed87e69916 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector3_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector3_t.java
@@ -4,40 +4,40 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:941
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdVector3_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1191
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdVector3_t extends Structure {
/**
- * float[3]
- * C type : float[3]
- */
- public float[] v = new float[3];
- public HmdVector3_t() {
- super();
- }
- protected List
+ * C type : float[3]
+ */
+ public float[] v = new float[3];
+ public HmdVector3_t() {
+ super();
+ }
+ protected List
- * C type : float[3]
- */
- public HmdVector3_t(float v[]) {
- super();
- if ((v.length != this.v.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.v = v;
- }
- public HmdVector3_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends HmdVector3_t implements Structure.ByReference {
-
- };
- public static class ByValue extends HmdVector3_t implements Structure.ByValue {
-
- };
+ * @param v float[3]
+ * C type : float[3]
+ */
+ public HmdVector3_t(float v[]) {
+ super();
+ if ((v.length != this.v.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.v = v;
+ }
+ public HmdVector3_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HmdVector3_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HmdVector3_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector3d_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector3d_t.java
index 8a4f0b4994..1b1bfe2b9c 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector3d_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector3d_t.java
@@ -4,40 +4,40 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:949
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdVector3d_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1199
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdVector3d_t extends Structure {
/**
- * double[3]
- * C type : double[3]
- */
- public double[] v = new double[3];
- public HmdVector3d_t() {
- super();
- }
- protected List
+ * C type : double[3]
+ */
+ public double[] v = new double[3];
+ public HmdVector3d_t() {
+ super();
+ }
+ protected List
- * C type : double[3]
- */
- public HmdVector3d_t(double v[]) {
- super();
- if ((v.length != this.v.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.v = v;
- }
- public HmdVector3d_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends HmdVector3d_t implements Structure.ByReference {
-
- };
- public static class ByValue extends HmdVector3d_t implements Structure.ByValue {
-
- };
+ * @param v double[3]
+ * C type : double[3]
+ */
+ public HmdVector3d_t(double v[]) {
+ super();
+ if ((v.length != this.v.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.v = v;
+ }
+ public HmdVector3d_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HmdVector3d_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HmdVector3d_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector4_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector4_t.java
index c2c3d06a35..b022e05d61 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector4_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/HmdVector4_t.java
@@ -4,40 +4,40 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:945
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class HmdVector4_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1195
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class HmdVector4_t extends Structure {
/**
- * float[4]
- * C type : float[4]
- */
- public float[] v = new float[4];
- public HmdVector4_t() {
- super();
- }
- protected List
+ * C type : float[4]
+ */
+ public float[] v = new float[4];
+ public HmdVector4_t() {
+ super();
+ }
+ protected List
- * C type : float[4]
- */
- public HmdVector4_t(float v[]) {
- super();
- if ((v.length != this.v.length))
- throw new IllegalArgumentException("Wrong array size !");
- this.v = v;
- }
- public HmdVector4_t(Pointer peer) {
- super(peer);
- }
- public static class ByReference extends HmdVector4_t implements Structure.ByReference {
-
- };
- public static class ByValue extends HmdVector4_t implements Structure.ByValue {
-
- };
+ * @param v float[4]
+ * C type : float[4]
+ */
+ public HmdVector4_t(float v[]) {
+ super();
+ if ((v.length != this.v.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.v = v;
+ }
+ public HmdVector4_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends HmdVector4_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends HmdVector4_t implements Structure.ByValue {
+
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/ImuSample_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/ImuSample_t.java
new file mode 100644
index 0000000000..799893d2eb
--- /dev/null
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/ImuSample_t.java
@@ -0,0 +1,45 @@
+package com.jme3.system.jopenvr;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import java.util.Arrays;
+import java.util.List;
+/**
+ * native declaration : headers\openvr_capi.h:1479
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class ImuSample_t extends Structure {
+ public double fSampleTime;
+ /** C type : HmdVector3d_t */
+ public HmdVector3d_t vAccel;
+ /** C type : HmdVector3d_t */
+ public HmdVector3d_t vGyro;
+ public int unOffScaleFlags;
+ public ImuSample_t() {
+ super();
+ }
+ protected List
+ * @param vGyro C type : HmdVector3d_t
+ */
+ public ImuSample_t(double fSampleTime, HmdVector3d_t vAccel, HmdVector3d_t vGyro, int unOffScaleFlags) {
+ super();
+ this.fSampleTime = fSampleTime;
+ this.vAccel = vAccel;
+ this.vGyro = vGyro;
+ this.unOffScaleFlags = unOffScaleFlags;
+ }
+ public ImuSample_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends ImuSample_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends ImuSample_t implements Structure.ByValue {
+
+ };
+}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/InputAnalogActionData_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/InputAnalogActionData_t.java
new file mode 100644
index 0000000000..61fee6243c
--- /dev/null
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/InputAnalogActionData_t.java
@@ -0,0 +1,51 @@
+package com.jme3.system.jopenvr;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import java.util.Arrays;
+import java.util.List;
+/**
+ * native declaration : headers\openvr_capi.h:1603
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class InputAnalogActionData_t extends Structure {
+ public byte bActive;
+ /** C type : VRInputValueHandle_t */
+ public long activeOrigin;
+ public float x;
+ public float y;
+ public float z;
+ public float deltaX;
+ public float deltaY;
+ public float deltaZ;
+ public float fUpdateTime;
+ public InputAnalogActionData_t() {
+ super();
+ }
+ protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class InputDigitalActionData_t extends Structure {
+ public byte bActive;
+ /** C type : VRInputValueHandle_t */
+ public long activeOrigin;
+ public byte bState;
+ public byte bChanged;
+ public float fUpdateTime;
+ public InputDigitalActionData_t() {
+ super();
+ }
+ protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class InputOriginInfo_t extends Structure {
+ /** C type : VRInputValueHandle_t */
+ public long devicePath;
+ /** C type : TrackedDeviceIndex_t */
+ public int trackedDeviceIndex;
+ /**
+ * char[128]
+ * C type : char*[128]
+ */
+ public Pointer[] rchRenderModelComponentName = new Pointer[128];
+ public InputOriginInfo_t() {
+ super();
+ }
+ protected List
+ * @param trackedDeviceIndex C type : TrackedDeviceIndex_t
+ * @param rchRenderModelComponentName char[128]
+ * C type : char*[128]
+ */
+ public InputOriginInfo_t(long devicePath, int trackedDeviceIndex, Pointer rchRenderModelComponentName[]) {
+ super();
+ this.devicePath = devicePath;
+ this.trackedDeviceIndex = trackedDeviceIndex;
+ if ((rchRenderModelComponentName.length != this.rchRenderModelComponentName.length))
+ throw new IllegalArgumentException("Wrong array size !");
+ this.rchRenderModelComponentName = rchRenderModelComponentName;
+ }
+ public InputOriginInfo_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends InputOriginInfo_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends InputOriginInfo_t implements Structure.ByValue {
+
+ };
+}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/InputPoseActionData_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/InputPoseActionData_t.java
new file mode 100644
index 0000000000..747493078a
--- /dev/null
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/InputPoseActionData_t.java
@@ -0,0 +1,43 @@
+package com.jme3.system.jopenvr;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import java.util.Arrays;
+import java.util.List;
+/**
+ * native declaration : headers\openvr_capi.h:1615
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class InputPoseActionData_t extends Structure {
+ public byte bActive;
+ /** C type : VRInputValueHandle_t */
+ public long activeOrigin;
+ /** C type : TrackedDevicePose_t */
+ public TrackedDevicePose_t pose;
+ public InputPoseActionData_t() {
+ super();
+ }
+ protected List
+ * @param pose C type : TrackedDevicePose_t
+ */
+ public InputPoseActionData_t(byte bActive, long activeOrigin, TrackedDevicePose_t pose) {
+ super();
+ this.bActive = bActive;
+ this.activeOrigin = activeOrigin;
+ this.pose = pose;
+ }
+ public InputPoseActionData_t(Pointer peer) {
+ super(peer);
+ }
+ public static class ByReference extends InputPoseActionData_t implements Structure.ByReference {
+
+ };
+ public static class ByValue extends InputPoseActionData_t implements Structure.ByValue {
+
+ };
+}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/InputSkeletalActionData_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/InputSkeletalActionData_t.java
new file mode 100644
index 0000000000..d9d32b9516
--- /dev/null
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/InputSkeletalActionData_t.java
@@ -0,0 +1,39 @@
+package com.jme3.system.jopenvr;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import java.util.Arrays;
+import java.util.List;
+/**
+ * native declaration : headers\openvr_capi.h:1620
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class InputSkeletalActionData_t extends Structure {
+ public byte bActive;
+ /** C type : VRInputValueHandle_t */
+ public long activeOrigin;
+ public int boneCount;
+ public InputSkeletalActionData_t() {
+ super();
+ }
+ protected List
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class IntersectionMaskCircle_t extends Structure {
- public float m_flCenterX;
- public float m_flCenterY;
- public float m_flRadius;
- public IntersectionMaskCircle_t() {
- super();
- }
- protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class IntersectionMaskCircle_t extends Structure {
+ public float m_flCenterX;
+ public float m_flCenterY;
+ public float m_flRadius;
+ public IntersectionMaskCircle_t() {
+ super();
+ }
+ protected List
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class IntersectionMaskRectangle_t extends Structure {
- public float m_flTopLeftX;
- public float m_flTopLeftY;
- public float m_flWidth;
- public float m_flHeight;
- public IntersectionMaskRectangle_t() {
- super();
- }
- protected List
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class IntersectionMaskRectangle_t extends Structure {
+ public float m_flTopLeftX;
+ public float m_flTopLeftY;
+ public float m_flWidth;
+ public float m_flHeight;
+ public IntersectionMaskRectangle_t() {
+ super();
+ }
+ protected List
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class JOpenVRLibrary implements Library {
-
+ * JNA Wrapper for library JOpenVR
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class JOpenVRLibrary implements Library {
private static final Logger logger = Logger.getLogger(JOpenVRLibrary.class.getName());
private static String JNA_LIBRARY_NAME;
@@ -26,11 +26,7 @@ public class JOpenVRLibrary implements Library {
* If this property is not set, the embedded library is loaded.
*/
public static final String JNA_OPENVR_LIBRARY_PATH = "openvr.library.path";
-/*
- static {
- init();
- }
-*/
+
/**
* Init the native binding to the underlying system library.
* @return true if the link is effective and false otherwise.
@@ -65,1828 +61,2271 @@ public static void init() throws UnsatisfiedLinkError {
public static String getSystemLibraryName(){
return ""+JNA_LIBRARY_NAME;
}
-
+
+
/**
- * native declaration : headers\openvr_capi.h:181
- * enum values
- */
- public static interface EVREye {
- /** native declaration : headers\openvr_capi.h:179 */
- public static final int EVREye_Eye_Left = 0;
- /** native declaration : headers\openvr_capi.h:180 */
- public static final int EVREye_Eye_Right = 1;
- };
- /**
- * native declaration : headers\openvr_capi.h:188
- * enum values
- */
- public static interface ETextureType {
- /** native declaration : headers\openvr_capi.h:183 */
- public static final int ETextureType_TextureType_DirectX = 0;
- /** native declaration : headers\openvr_capi.h:184 */
- public static final int ETextureType_TextureType_OpenGL = 1;
- /** native declaration : headers\openvr_capi.h:185 */
- public static final int ETextureType_TextureType_Vulkan = 2;
- /** native declaration : headers\openvr_capi.h:186 */
- public static final int ETextureType_TextureType_IOSurface = 3;
- /** native declaration : headers\openvr_capi.h:187 */
- public static final int ETextureType_TextureType_DirectX12 = 4;
- };
- /**
- * native declaration : headers\openvr_capi.h:193
- * enum values
- */
- public static interface EColorSpace {
- /** native declaration : headers\openvr_capi.h:190 */
- public static final int EColorSpace_ColorSpace_Auto = 0;
- /** native declaration : headers\openvr_capi.h:191 */
- public static final int EColorSpace_ColorSpace_Gamma = 1;
- /** native declaration : headers\openvr_capi.h:192 */
- public static final int EColorSpace_ColorSpace_Linear = 2;
- };
- /**
- * native declaration : headers\openvr_capi.h:200
- * enum values
- */
- public static interface ETrackingResult {
- /** native declaration : headers\openvr_capi.h:195 */
- public static final int ETrackingResult_TrackingResult_Uninitialized = 1;
- /** native declaration : headers\openvr_capi.h:196 */
- public static final int ETrackingResult_TrackingResult_Calibrating_InProgress = 100;
- /** native declaration : headers\openvr_capi.h:197 */
- public static final int ETrackingResult_TrackingResult_Calibrating_OutOfRange = 101;
- /** native declaration : headers\openvr_capi.h:198 */
- public static final int ETrackingResult_TrackingResult_Running_OK = 200;
- /** native declaration : headers\openvr_capi.h:199 */
- public static final int ETrackingResult_TrackingResult_Running_OutOfRange = 201;
- };
- /**
- * native declaration : headers\openvr_capi.h:208
- * enum values
- */
- public static interface ETrackedDeviceClass {
- /** native declaration : headers\openvr_capi.h:202 */
- public static final int ETrackedDeviceClass_TrackedDeviceClass_Invalid = 0;
- /** native declaration : headers\openvr_capi.h:203 */
- public static final int ETrackedDeviceClass_TrackedDeviceClass_HMD = 1;
- /** native declaration : headers\openvr_capi.h:204 */
- public static final int ETrackedDeviceClass_TrackedDeviceClass_Controller = 2;
- /** native declaration : headers\openvr_capi.h:205 */
- public static final int ETrackedDeviceClass_TrackedDeviceClass_GenericTracker = 3;
- /** native declaration : headers\openvr_capi.h:206 */
- public static final int ETrackedDeviceClass_TrackedDeviceClass_TrackingReference = 4;
- /** native declaration : headers\openvr_capi.h:207 */
- public static final int ETrackedDeviceClass_TrackedDeviceClass_DisplayRedirect = 5;
- };
- /**
- * native declaration : headers\openvr_capi.h:213
- * enum values
- */
- public static interface ETrackedControllerRole {
- /** native declaration : headers\openvr_capi.h:210 */
- public static final int ETrackedControllerRole_TrackedControllerRole_Invalid = 0;
- /** native declaration : headers\openvr_capi.h:211 */
- public static final int ETrackedControllerRole_TrackedControllerRole_LeftHand = 1;
- /** native declaration : headers\openvr_capi.h:212 */
- public static final int ETrackedControllerRole_TrackedControllerRole_RightHand = 2;
- };
- /**
- * native declaration : headers\openvr_capi.h:218
- * enum values
- */
- public static interface ETrackingUniverseOrigin {
- /** native declaration : headers\openvr_capi.h:215 */
- public static final int ETrackingUniverseOrigin_TrackingUniverseSeated = 0;
- /** native declaration : headers\openvr_capi.h:216 */
- public static final int ETrackingUniverseOrigin_TrackingUniverseStanding = 1;
- /** native declaration : headers\openvr_capi.h:217 */
- public static final int ETrackingUniverseOrigin_TrackingUniverseRawAndUncalibrated = 2;
- };
- /**
- * native declaration : headers\openvr_capi.h:339
- * enum values
- */
- public static interface ETrackedDeviceProperty {
- /** native declaration : headers\openvr_capi.h:220 */
- public static final int ETrackedDeviceProperty_Prop_Invalid = 0;
- /** native declaration : headers\openvr_capi.h:221 */
- public static final int ETrackedDeviceProperty_Prop_TrackingSystemName_String = 1000;
- /** native declaration : headers\openvr_capi.h:222 */
- public static final int ETrackedDeviceProperty_Prop_ModelNumber_String = 1001;
- /** native declaration : headers\openvr_capi.h:223 */
- public static final int ETrackedDeviceProperty_Prop_SerialNumber_String = 1002;
- /** native declaration : headers\openvr_capi.h:224 */
- public static final int ETrackedDeviceProperty_Prop_RenderModelName_String = 1003;
- /** native declaration : headers\openvr_capi.h:225 */
- public static final int ETrackedDeviceProperty_Prop_WillDriftInYaw_Bool = 1004;
- /** native declaration : headers\openvr_capi.h:226 */
- public static final int ETrackedDeviceProperty_Prop_ManufacturerName_String = 1005;
- /** native declaration : headers\openvr_capi.h:227 */
- public static final int ETrackedDeviceProperty_Prop_TrackingFirmwareVersion_String = 1006;
- /** native declaration : headers\openvr_capi.h:228 */
- public static final int ETrackedDeviceProperty_Prop_HardwareRevision_String = 1007;
- /** native declaration : headers\openvr_capi.h:229 */
- public static final int ETrackedDeviceProperty_Prop_AllWirelessDongleDescriptions_String = 1008;
- /** native declaration : headers\openvr_capi.h:230 */
- public static final int ETrackedDeviceProperty_Prop_ConnectedWirelessDongle_String = 1009;
- /** native declaration : headers\openvr_capi.h:231 */
- public static final int ETrackedDeviceProperty_Prop_DeviceIsWireless_Bool = 1010;
- /** native declaration : headers\openvr_capi.h:232 */
- public static final int ETrackedDeviceProperty_Prop_DeviceIsCharging_Bool = 1011;
- /** native declaration : headers\openvr_capi.h:233 */
- public static final int ETrackedDeviceProperty_Prop_DeviceBatteryPercentage_Float = 1012;
- /** native declaration : headers\openvr_capi.h:234 */
- public static final int ETrackedDeviceProperty_Prop_StatusDisplayTransform_Matrix34 = 1013;
- /** native declaration : headers\openvr_capi.h:235 */
- public static final int ETrackedDeviceProperty_Prop_Firmware_UpdateAvailable_Bool = 1014;
- /** native declaration : headers\openvr_capi.h:236 */
- public static final int ETrackedDeviceProperty_Prop_Firmware_ManualUpdate_Bool = 1015;
- /** native declaration : headers\openvr_capi.h:237 */
- public static final int ETrackedDeviceProperty_Prop_Firmware_ManualUpdateURL_String = 1016;
- /** native declaration : headers\openvr_capi.h:238 */
- public static final int ETrackedDeviceProperty_Prop_HardwareRevision_Uint64 = 1017;
- /** native declaration : headers\openvr_capi.h:239 */
- public static final int ETrackedDeviceProperty_Prop_FirmwareVersion_Uint64 = 1018;
- /** native declaration : headers\openvr_capi.h:240 */
- public static final int ETrackedDeviceProperty_Prop_FPGAVersion_Uint64 = 1019;
- /** native declaration : headers\openvr_capi.h:241 */
- public static final int ETrackedDeviceProperty_Prop_VRCVersion_Uint64 = 1020;
- /** native declaration : headers\openvr_capi.h:242 */
- public static final int ETrackedDeviceProperty_Prop_RadioVersion_Uint64 = 1021;
- /** native declaration : headers\openvr_capi.h:243 */
- public static final int ETrackedDeviceProperty_Prop_DongleVersion_Uint64 = 1022;
- /** native declaration : headers\openvr_capi.h:244 */
- public static final int ETrackedDeviceProperty_Prop_BlockServerShutdown_Bool = 1023;
- /** native declaration : headers\openvr_capi.h:245 */
- public static final int ETrackedDeviceProperty_Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024;
- /** native declaration : headers\openvr_capi.h:246 */
- public static final int ETrackedDeviceProperty_Prop_ContainsProximitySensor_Bool = 1025;
- /** native declaration : headers\openvr_capi.h:247 */
- public static final int ETrackedDeviceProperty_Prop_DeviceProvidesBatteryStatus_Bool = 1026;
- /** native declaration : headers\openvr_capi.h:248 */
- public static final int ETrackedDeviceProperty_Prop_DeviceCanPowerOff_Bool = 1027;
- /** native declaration : headers\openvr_capi.h:249 */
- public static final int ETrackedDeviceProperty_Prop_Firmware_ProgrammingTarget_String = 1028;
- /** native declaration : headers\openvr_capi.h:250 */
- public static final int ETrackedDeviceProperty_Prop_DeviceClass_Int32 = 1029;
- /** native declaration : headers\openvr_capi.h:251 */
- public static final int ETrackedDeviceProperty_Prop_HasCamera_Bool = 1030;
- /** native declaration : headers\openvr_capi.h:252 */
- public static final int ETrackedDeviceProperty_Prop_DriverVersion_String = 1031;
- /** native declaration : headers\openvr_capi.h:253 */
- public static final int ETrackedDeviceProperty_Prop_Firmware_ForceUpdateRequired_Bool = 1032;
- /** native declaration : headers\openvr_capi.h:254 */
- public static final int ETrackedDeviceProperty_Prop_ViveSystemButtonFixRequired_Bool = 1033;
- /** native declaration : headers\openvr_capi.h:255 */
- public static final int ETrackedDeviceProperty_Prop_ParentDriver_Uint64 = 1034;
- /** native declaration : headers\openvr_capi.h:256 */
- public static final int ETrackedDeviceProperty_Prop_ResourceRoot_String = 1035;
- /** native declaration : headers\openvr_capi.h:257 */
- public static final int ETrackedDeviceProperty_Prop_ReportsTimeSinceVSync_Bool = 2000;
- /** native declaration : headers\openvr_capi.h:258 */
- public static final int ETrackedDeviceProperty_Prop_SecondsFromVsyncToPhotons_Float = 2001;
- /** native declaration : headers\openvr_capi.h:259 */
- public static final int ETrackedDeviceProperty_Prop_DisplayFrequency_Float = 2002;
- /** native declaration : headers\openvr_capi.h:260 */
- public static final int ETrackedDeviceProperty_Prop_UserIpdMeters_Float = 2003;
- /** native declaration : headers\openvr_capi.h:261 */
- public static final int ETrackedDeviceProperty_Prop_CurrentUniverseId_Uint64 = 2004;
- /** native declaration : headers\openvr_capi.h:262 */
- public static final int ETrackedDeviceProperty_Prop_PreviousUniverseId_Uint64 = 2005;
- /** native declaration : headers\openvr_capi.h:263 */
- public static final int ETrackedDeviceProperty_Prop_DisplayFirmwareVersion_Uint64 = 2006;
- /** native declaration : headers\openvr_capi.h:264 */
- public static final int ETrackedDeviceProperty_Prop_IsOnDesktop_Bool = 2007;
- /** native declaration : headers\openvr_capi.h:265 */
- public static final int ETrackedDeviceProperty_Prop_DisplayMCType_Int32 = 2008;
- /** native declaration : headers\openvr_capi.h:266 */
- public static final int ETrackedDeviceProperty_Prop_DisplayMCOffset_Float = 2009;
- /** native declaration : headers\openvr_capi.h:267 */
- public static final int ETrackedDeviceProperty_Prop_DisplayMCScale_Float = 2010;
- /** native declaration : headers\openvr_capi.h:268 */
- public static final int ETrackedDeviceProperty_Prop_EdidVendorID_Int32 = 2011;
- /** native declaration : headers\openvr_capi.h:269 */
- public static final int ETrackedDeviceProperty_Prop_DisplayMCImageLeft_String = 2012;
- /** native declaration : headers\openvr_capi.h:270 */
- public static final int ETrackedDeviceProperty_Prop_DisplayMCImageRight_String = 2013;
- /** native declaration : headers\openvr_capi.h:271 */
- public static final int ETrackedDeviceProperty_Prop_DisplayGCBlackClamp_Float = 2014;
- /** native declaration : headers\openvr_capi.h:272 */
- public static final int ETrackedDeviceProperty_Prop_EdidProductID_Int32 = 2015;
- /** native declaration : headers\openvr_capi.h:273 */
- public static final int ETrackedDeviceProperty_Prop_CameraToHeadTransform_Matrix34 = 2016;
- /** native declaration : headers\openvr_capi.h:274 */
- public static final int ETrackedDeviceProperty_Prop_DisplayGCType_Int32 = 2017;
- /** native declaration : headers\openvr_capi.h:275 */
- public static final int ETrackedDeviceProperty_Prop_DisplayGCOffset_Float = 2018;
- /** native declaration : headers\openvr_capi.h:276 */
- public static final int ETrackedDeviceProperty_Prop_DisplayGCScale_Float = 2019;
- /** native declaration : headers\openvr_capi.h:277 */
- public static final int ETrackedDeviceProperty_Prop_DisplayGCPrescale_Float = 2020;
- /** native declaration : headers\openvr_capi.h:278 */
- public static final int ETrackedDeviceProperty_Prop_DisplayGCImage_String = 2021;
- /** native declaration : headers\openvr_capi.h:279 */
- public static final int ETrackedDeviceProperty_Prop_LensCenterLeftU_Float = 2022;
- /** native declaration : headers\openvr_capi.h:280 */
- public static final int ETrackedDeviceProperty_Prop_LensCenterLeftV_Float = 2023;
- /** native declaration : headers\openvr_capi.h:281 */
- public static final int ETrackedDeviceProperty_Prop_LensCenterRightU_Float = 2024;
- /** native declaration : headers\openvr_capi.h:282 */
- public static final int ETrackedDeviceProperty_Prop_LensCenterRightV_Float = 2025;
- /** native declaration : headers\openvr_capi.h:283 */
- public static final int ETrackedDeviceProperty_Prop_UserHeadToEyeDepthMeters_Float = 2026;
- /** native declaration : headers\openvr_capi.h:284 */
- public static final int ETrackedDeviceProperty_Prop_CameraFirmwareVersion_Uint64 = 2027;
- /** native declaration : headers\openvr_capi.h:285 */
- public static final int ETrackedDeviceProperty_Prop_CameraFirmwareDescription_String = 2028;
- /** native declaration : headers\openvr_capi.h:286 */
- public static final int ETrackedDeviceProperty_Prop_DisplayFPGAVersion_Uint64 = 2029;
- /** native declaration : headers\openvr_capi.h:287 */
- public static final int ETrackedDeviceProperty_Prop_DisplayBootloaderVersion_Uint64 = 2030;
- /** native declaration : headers\openvr_capi.h:288 */
- public static final int ETrackedDeviceProperty_Prop_DisplayHardwareVersion_Uint64 = 2031;
- /** native declaration : headers\openvr_capi.h:289 */
- public static final int ETrackedDeviceProperty_Prop_AudioFirmwareVersion_Uint64 = 2032;
- /** native declaration : headers\openvr_capi.h:290 */
- public static final int ETrackedDeviceProperty_Prop_CameraCompatibilityMode_Int32 = 2033;
- /** native declaration : headers\openvr_capi.h:291 */
- public static final int ETrackedDeviceProperty_Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034;
- /** native declaration : headers\openvr_capi.h:292 */
- public static final int ETrackedDeviceProperty_Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035;
- /** native declaration : headers\openvr_capi.h:293 */
- public static final int ETrackedDeviceProperty_Prop_DisplaySuppressed_Bool = 2036;
- /** native declaration : headers\openvr_capi.h:294 */
- public static final int ETrackedDeviceProperty_Prop_DisplayAllowNightMode_Bool = 2037;
- /** native declaration : headers\openvr_capi.h:295 */
- public static final int ETrackedDeviceProperty_Prop_DisplayMCImageWidth_Int32 = 2038;
- /** native declaration : headers\openvr_capi.h:296 */
- public static final int ETrackedDeviceProperty_Prop_DisplayMCImageHeight_Int32 = 2039;
- /** native declaration : headers\openvr_capi.h:297 */
- public static final int ETrackedDeviceProperty_Prop_DisplayMCImageNumChannels_Int32 = 2040;
- /** native declaration : headers\openvr_capi.h:298 */
- public static final int ETrackedDeviceProperty_Prop_DisplayMCImageData_Binary = 2041;
- /** native declaration : headers\openvr_capi.h:299 */
- public static final int ETrackedDeviceProperty_Prop_SecondsFromPhotonsToVblank_Float = 2042;
- /** native declaration : headers\openvr_capi.h:300 */
- public static final int ETrackedDeviceProperty_Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043;
- /** native declaration : headers\openvr_capi.h:301 */
- public static final int ETrackedDeviceProperty_Prop_DisplayDebugMode_Bool = 2044;
- /** native declaration : headers\openvr_capi.h:302 */
- public static final int ETrackedDeviceProperty_Prop_GraphicsAdapterLuid_Uint64 = 2045;
- /** native declaration : headers\openvr_capi.h:303 */
- public static final int ETrackedDeviceProperty_Prop_DriverProvidedChaperonePath_String = 2048;
- /** native declaration : headers\openvr_capi.h:304 */
- public static final int ETrackedDeviceProperty_Prop_AttachedDeviceId_String = 3000;
- /** native declaration : headers\openvr_capi.h:305 */
- public static final int ETrackedDeviceProperty_Prop_SupportedButtons_Uint64 = 3001;
- /** native declaration : headers\openvr_capi.h:306 */
- public static final int ETrackedDeviceProperty_Prop_Axis0Type_Int32 = 3002;
- /** native declaration : headers\openvr_capi.h:307 */
- public static final int ETrackedDeviceProperty_Prop_Axis1Type_Int32 = 3003;
- /** native declaration : headers\openvr_capi.h:308 */
- public static final int ETrackedDeviceProperty_Prop_Axis2Type_Int32 = 3004;
- /** native declaration : headers\openvr_capi.h:309 */
- public static final int ETrackedDeviceProperty_Prop_Axis3Type_Int32 = 3005;
- /** native declaration : headers\openvr_capi.h:310 */
- public static final int ETrackedDeviceProperty_Prop_Axis4Type_Int32 = 3006;
- /** native declaration : headers\openvr_capi.h:311 */
- public static final int ETrackedDeviceProperty_Prop_ControllerRoleHint_Int32 = 3007;
- /** native declaration : headers\openvr_capi.h:312 */
- public static final int ETrackedDeviceProperty_Prop_FieldOfViewLeftDegrees_Float = 4000;
- /** native declaration : headers\openvr_capi.h:313 */
- public static final int ETrackedDeviceProperty_Prop_FieldOfViewRightDegrees_Float = 4001;
- /** native declaration : headers\openvr_capi.h:314 */
- public static final int ETrackedDeviceProperty_Prop_FieldOfViewTopDegrees_Float = 4002;
- /** native declaration : headers\openvr_capi.h:315 */
- public static final int ETrackedDeviceProperty_Prop_FieldOfViewBottomDegrees_Float = 4003;
- /** native declaration : headers\openvr_capi.h:316 */
- public static final int ETrackedDeviceProperty_Prop_TrackingRangeMinimumMeters_Float = 4004;
- /** native declaration : headers\openvr_capi.h:317 */
- public static final int ETrackedDeviceProperty_Prop_TrackingRangeMaximumMeters_Float = 4005;
- /** native declaration : headers\openvr_capi.h:318 */
- public static final int ETrackedDeviceProperty_Prop_ModeLabel_String = 4006;
- /** native declaration : headers\openvr_capi.h:319 */
- public static final int ETrackedDeviceProperty_Prop_IconPathName_String = 5000;
- /** native declaration : headers\openvr_capi.h:320 */
- public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceOff_String = 5001;
- /** native declaration : headers\openvr_capi.h:321 */
- public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearching_String = 5002;
- /** native declaration : headers\openvr_capi.h:322 */
- public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearchingAlert_String = 5003;
- /** native declaration : headers\openvr_capi.h:323 */
- public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceReady_String = 5004;
- /** native declaration : headers\openvr_capi.h:324 */
- public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceReadyAlert_String = 5005;
- /** native declaration : headers\openvr_capi.h:325 */
- public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceNotReady_String = 5006;
- /** native declaration : headers\openvr_capi.h:326 */
- public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceStandby_String = 5007;
- /** native declaration : headers\openvr_capi.h:327 */
- public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceAlertLow_String = 5008;
- /** native declaration : headers\openvr_capi.h:328 */
- public static final int ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_Start = 5100;
- /** native declaration : headers\openvr_capi.h:329 */
- public static final int ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_End = 5150;
- /** native declaration : headers\openvr_capi.h:330 */
- public static final int ETrackedDeviceProperty_Prop_UserConfigPath_String = 6000;
- /** native declaration : headers\openvr_capi.h:331 */
- public static final int ETrackedDeviceProperty_Prop_InstallPath_String = 6001;
- /** native declaration : headers\openvr_capi.h:332 */
- public static final int ETrackedDeviceProperty_Prop_HasDisplayComponent_Bool = 6002;
- /** native declaration : headers\openvr_capi.h:333 */
- public static final int ETrackedDeviceProperty_Prop_HasControllerComponent_Bool = 6003;
- /** native declaration : headers\openvr_capi.h:334 */
- public static final int ETrackedDeviceProperty_Prop_HasCameraComponent_Bool = 6004;
- /** native declaration : headers\openvr_capi.h:335 */
- public static final int ETrackedDeviceProperty_Prop_HasDriverDirectModeComponent_Bool = 6005;
- /** native declaration : headers\openvr_capi.h:336 */
- public static final int ETrackedDeviceProperty_Prop_HasVirtualDisplayComponent_Bool = 6006;
- /** native declaration : headers\openvr_capi.h:337 */
- public static final int ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_Start = 10000;
- /** native declaration : headers\openvr_capi.h:338 */
- public static final int ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_End = 10999;
- };
- /**
- * native declaration : headers\openvr_capi.h:353
- * enum values
- */
- public static interface ETrackedPropertyError {
- /** native declaration : headers\openvr_capi.h:341 */
- public static final int ETrackedPropertyError_TrackedProp_Success = 0;
- /** native declaration : headers\openvr_capi.h:342 */
- public static final int ETrackedPropertyError_TrackedProp_WrongDataType = 1;
- /** native declaration : headers\openvr_capi.h:343 */
- public static final int ETrackedPropertyError_TrackedProp_WrongDeviceClass = 2;
- /** native declaration : headers\openvr_capi.h:344 */
- public static final int ETrackedPropertyError_TrackedProp_BufferTooSmall = 3;
- /** native declaration : headers\openvr_capi.h:345 */
- public static final int ETrackedPropertyError_TrackedProp_UnknownProperty = 4;
- /** native declaration : headers\openvr_capi.h:346 */
- public static final int ETrackedPropertyError_TrackedProp_InvalidDevice = 5;
- /** native declaration : headers\openvr_capi.h:347 */
- public static final int ETrackedPropertyError_TrackedProp_CouldNotContactServer = 6;
- /** native declaration : headers\openvr_capi.h:348 */
- public static final int ETrackedPropertyError_TrackedProp_ValueNotProvidedByDevice = 7;
- /** native declaration : headers\openvr_capi.h:349 */
- public static final int ETrackedPropertyError_TrackedProp_StringExceedsMaximumLength = 8;
- /** native declaration : headers\openvr_capi.h:350 */
- public static final int ETrackedPropertyError_TrackedProp_NotYetAvailable = 9;
- /** native declaration : headers\openvr_capi.h:351 */
- public static final int ETrackedPropertyError_TrackedProp_PermissionDenied = 10;
- /** native declaration : headers\openvr_capi.h:352 */
- public static final int ETrackedPropertyError_TrackedProp_InvalidOperation = 11;
- };
- /**
- * native declaration : headers\openvr_capi.h:359
- * enum values
- */
- public static interface EVRSubmitFlags {
- /** native declaration : headers\openvr_capi.h:355 */
- public static final int EVRSubmitFlags_Submit_Default = 0;
- /** native declaration : headers\openvr_capi.h:356 */
- public static final int EVRSubmitFlags_Submit_LensDistortionAlreadyApplied = 1;
- /** native declaration : headers\openvr_capi.h:357 */
- public static final int EVRSubmitFlags_Submit_GlRenderBuffer = 2;
- /** native declaration : headers\openvr_capi.h:358 */
- public static final int EVRSubmitFlags_Submit_Reserved = 4;
- };
- /**
- * native declaration : headers\openvr_capi.h:370
- * enum values
- */
- public static interface EVRState {
- /** native declaration : headers\openvr_capi.h:361 */
- public static final int EVRState_VRState_Undefined = -1;
- /** native declaration : headers\openvr_capi.h:362 */
- public static final int EVRState_VRState_Off = 0;
- /** native declaration : headers\openvr_capi.h:363 */
- public static final int EVRState_VRState_Searching = 1;
- /** native declaration : headers\openvr_capi.h:364 */
- public static final int EVRState_VRState_Searching_Alert = 2;
- /** native declaration : headers\openvr_capi.h:365 */
- public static final int EVRState_VRState_Ready = 3;
- /** native declaration : headers\openvr_capi.h:366 */
- public static final int EVRState_VRState_Ready_Alert = 4;
- /** native declaration : headers\openvr_capi.h:367 */
- public static final int EVRState_VRState_NotReady = 5;
- /** native declaration : headers\openvr_capi.h:368 */
- public static final int EVRState_VRState_Standby = 6;
- /** native declaration : headers\openvr_capi.h:369 */
- public static final int EVRState_VRState_Ready_Alert_Low = 7;
- };
- /**
- * native declaration : headers\openvr_capi.h:486
- * enum values
- */
- public static interface EVREventType {
- /** native declaration : headers\openvr_capi.h:372 */
- public static final int EVREventType_VREvent_None = 0;
- /** native declaration : headers\openvr_capi.h:373 */
- public static final int EVREventType_VREvent_TrackedDeviceActivated = 100;
- /** native declaration : headers\openvr_capi.h:374 */
- public static final int EVREventType_VREvent_TrackedDeviceDeactivated = 101;
- /** native declaration : headers\openvr_capi.h:375 */
- public static final int EVREventType_VREvent_TrackedDeviceUpdated = 102;
- /** native declaration : headers\openvr_capi.h:376 */
- public static final int EVREventType_VREvent_TrackedDeviceUserInteractionStarted = 103;
- /** native declaration : headers\openvr_capi.h:377 */
- public static final int EVREventType_VREvent_TrackedDeviceUserInteractionEnded = 104;
- /** native declaration : headers\openvr_capi.h:378 */
- public static final int EVREventType_VREvent_IpdChanged = 105;
- /** native declaration : headers\openvr_capi.h:379 */
- public static final int EVREventType_VREvent_EnterStandbyMode = 106;
- /** native declaration : headers\openvr_capi.h:380 */
- public static final int EVREventType_VREvent_LeaveStandbyMode = 107;
- /** native declaration : headers\openvr_capi.h:381 */
- public static final int EVREventType_VREvent_TrackedDeviceRoleChanged = 108;
- /** native declaration : headers\openvr_capi.h:382 */
- public static final int EVREventType_VREvent_WatchdogWakeUpRequested = 109;
- /** native declaration : headers\openvr_capi.h:383 */
- public static final int EVREventType_VREvent_LensDistortionChanged = 110;
- /** native declaration : headers\openvr_capi.h:384 */
- public static final int EVREventType_VREvent_PropertyChanged = 111;
- /** native declaration : headers\openvr_capi.h:385 */
- public static final int EVREventType_VREvent_WirelessDisconnect = 112;
- /** native declaration : headers\openvr_capi.h:386 */
- public static final int EVREventType_VREvent_WirelessReconnect = 113;
- /** native declaration : headers\openvr_capi.h:387 */
- public static final int EVREventType_VREvent_ButtonPress = 200;
- /** native declaration : headers\openvr_capi.h:388 */
- public static final int EVREventType_VREvent_ButtonUnpress = 201;
- /** native declaration : headers\openvr_capi.h:389 */
- public static final int EVREventType_VREvent_ButtonTouch = 202;
- /** native declaration : headers\openvr_capi.h:390 */
- public static final int EVREventType_VREvent_ButtonUntouch = 203;
- /** native declaration : headers\openvr_capi.h:391 */
- public static final int EVREventType_VREvent_MouseMove = 300;
- /** native declaration : headers\openvr_capi.h:392 */
- public static final int EVREventType_VREvent_MouseButtonDown = 301;
- /** native declaration : headers\openvr_capi.h:393 */
- public static final int EVREventType_VREvent_MouseButtonUp = 302;
- /** native declaration : headers\openvr_capi.h:394 */
- public static final int EVREventType_VREvent_FocusEnter = 303;
- /** native declaration : headers\openvr_capi.h:395 */
- public static final int EVREventType_VREvent_FocusLeave = 304;
- /** native declaration : headers\openvr_capi.h:396 */
- public static final int EVREventType_VREvent_Scroll = 305;
- /** native declaration : headers\openvr_capi.h:397 */
- public static final int EVREventType_VREvent_TouchPadMove = 306;
- /** native declaration : headers\openvr_capi.h:398 */
- public static final int EVREventType_VREvent_OverlayFocusChanged = 307;
- /** native declaration : headers\openvr_capi.h:399 */
- public static final int EVREventType_VREvent_InputFocusCaptured = 400;
- /** native declaration : headers\openvr_capi.h:400 */
- public static final int EVREventType_VREvent_InputFocusReleased = 401;
- /** native declaration : headers\openvr_capi.h:401 */
- public static final int EVREventType_VREvent_SceneFocusLost = 402;
- /** native declaration : headers\openvr_capi.h:402 */
- public static final int EVREventType_VREvent_SceneFocusGained = 403;
- /** native declaration : headers\openvr_capi.h:403 */
- public static final int EVREventType_VREvent_SceneApplicationChanged = 404;
- /** native declaration : headers\openvr_capi.h:404 */
- public static final int EVREventType_VREvent_SceneFocusChanged = 405;
- /** native declaration : headers\openvr_capi.h:405 */
- public static final int EVREventType_VREvent_InputFocusChanged = 406;
- /** native declaration : headers\openvr_capi.h:406 */
- public static final int EVREventType_VREvent_SceneApplicationSecondaryRenderingStarted = 407;
- /** native declaration : headers\openvr_capi.h:407 */
- public static final int EVREventType_VREvent_HideRenderModels = 410;
- /** native declaration : headers\openvr_capi.h:408 */
- public static final int EVREventType_VREvent_ShowRenderModels = 411;
- /** native declaration : headers\openvr_capi.h:409 */
- public static final int EVREventType_VREvent_OverlayShown = 500;
- /** native declaration : headers\openvr_capi.h:410 */
- public static final int EVREventType_VREvent_OverlayHidden = 501;
- /** native declaration : headers\openvr_capi.h:411 */
- public static final int EVREventType_VREvent_DashboardActivated = 502;
- /** native declaration : headers\openvr_capi.h:412 */
- public static final int EVREventType_VREvent_DashboardDeactivated = 503;
- /** native declaration : headers\openvr_capi.h:413 */
- public static final int EVREventType_VREvent_DashboardThumbSelected = 504;
- /** native declaration : headers\openvr_capi.h:414 */
- public static final int EVREventType_VREvent_DashboardRequested = 505;
- /** native declaration : headers\openvr_capi.h:415 */
- public static final int EVREventType_VREvent_ResetDashboard = 506;
- /** native declaration : headers\openvr_capi.h:416 */
- public static final int EVREventType_VREvent_RenderToast = 507;
- /** native declaration : headers\openvr_capi.h:417 */
- public static final int EVREventType_VREvent_ImageLoaded = 508;
- /** native declaration : headers\openvr_capi.h:418 */
- public static final int EVREventType_VREvent_ShowKeyboard = 509;
- /** native declaration : headers\openvr_capi.h:419 */
- public static final int EVREventType_VREvent_HideKeyboard = 510;
- /** native declaration : headers\openvr_capi.h:420 */
- public static final int EVREventType_VREvent_OverlayGamepadFocusGained = 511;
- /** native declaration : headers\openvr_capi.h:421 */
- public static final int EVREventType_VREvent_OverlayGamepadFocusLost = 512;
- /** native declaration : headers\openvr_capi.h:422 */
- public static final int EVREventType_VREvent_OverlaySharedTextureChanged = 513;
- /** native declaration : headers\openvr_capi.h:423 */
- public static final int EVREventType_VREvent_DashboardGuideButtonDown = 514;
- /** native declaration : headers\openvr_capi.h:424 */
- public static final int EVREventType_VREvent_DashboardGuideButtonUp = 515;
- /** native declaration : headers\openvr_capi.h:425 */
- public static final int EVREventType_VREvent_ScreenshotTriggered = 516;
- /** native declaration : headers\openvr_capi.h:426 */
- public static final int EVREventType_VREvent_ImageFailed = 517;
- /** native declaration : headers\openvr_capi.h:427 */
- public static final int EVREventType_VREvent_DashboardOverlayCreated = 518;
- /** native declaration : headers\openvr_capi.h:428 */
- public static final int EVREventType_VREvent_RequestScreenshot = 520;
- /** native declaration : headers\openvr_capi.h:429 */
- public static final int EVREventType_VREvent_ScreenshotTaken = 521;
- /** native declaration : headers\openvr_capi.h:430 */
- public static final int EVREventType_VREvent_ScreenshotFailed = 522;
- /** native declaration : headers\openvr_capi.h:431 */
- public static final int EVREventType_VREvent_SubmitScreenshotToDashboard = 523;
- /** native declaration : headers\openvr_capi.h:432 */
- public static final int EVREventType_VREvent_ScreenshotProgressToDashboard = 524;
- /** native declaration : headers\openvr_capi.h:433 */
- public static final int EVREventType_VREvent_PrimaryDashboardDeviceChanged = 525;
- /** native declaration : headers\openvr_capi.h:434 */
- public static final int EVREventType_VREvent_Notification_Shown = 600;
- /** native declaration : headers\openvr_capi.h:435 */
- public static final int EVREventType_VREvent_Notification_Hidden = 601;
- /** native declaration : headers\openvr_capi.h:436 */
- public static final int EVREventType_VREvent_Notification_BeginInteraction = 602;
- /** native declaration : headers\openvr_capi.h:437 */
- public static final int EVREventType_VREvent_Notification_Destroyed = 603;
- /** native declaration : headers\openvr_capi.h:438 */
- public static final int EVREventType_VREvent_Quit = 700;
- /** native declaration : headers\openvr_capi.h:439 */
- public static final int EVREventType_VREvent_ProcessQuit = 701;
- /** native declaration : headers\openvr_capi.h:440 */
- public static final int EVREventType_VREvent_QuitAborted_UserPrompt = 702;
- /** native declaration : headers\openvr_capi.h:441 */
- public static final int EVREventType_VREvent_QuitAcknowledged = 703;
- /** native declaration : headers\openvr_capi.h:442 */
- public static final int EVREventType_VREvent_DriverRequestedQuit = 704;
- /** native declaration : headers\openvr_capi.h:443 */
- public static final int EVREventType_VREvent_ChaperoneDataHasChanged = 800;
- /** native declaration : headers\openvr_capi.h:444 */
- public static final int EVREventType_VREvent_ChaperoneUniverseHasChanged = 801;
- /** native declaration : headers\openvr_capi.h:445 */
- public static final int EVREventType_VREvent_ChaperoneTempDataHasChanged = 802;
- /** native declaration : headers\openvr_capi.h:446 */
- public static final int EVREventType_VREvent_ChaperoneSettingsHaveChanged = 803;
- /** native declaration : headers\openvr_capi.h:447 */
- public static final int EVREventType_VREvent_SeatedZeroPoseReset = 804;
- /** native declaration : headers\openvr_capi.h:448 */
- public static final int EVREventType_VREvent_AudioSettingsHaveChanged = 820;
- /** native declaration : headers\openvr_capi.h:449 */
- public static final int EVREventType_VREvent_BackgroundSettingHasChanged = 850;
- /** native declaration : headers\openvr_capi.h:450 */
- public static final int EVREventType_VREvent_CameraSettingsHaveChanged = 851;
- /** native declaration : headers\openvr_capi.h:451 */
- public static final int EVREventType_VREvent_ReprojectionSettingHasChanged = 852;
- /** native declaration : headers\openvr_capi.h:452 */
- public static final int EVREventType_VREvent_ModelSkinSettingsHaveChanged = 853;
- /** native declaration : headers\openvr_capi.h:453 */
- public static final int EVREventType_VREvent_EnvironmentSettingsHaveChanged = 854;
- /** native declaration : headers\openvr_capi.h:454 */
- public static final int EVREventType_VREvent_PowerSettingsHaveChanged = 855;
- /** native declaration : headers\openvr_capi.h:455 */
- public static final int EVREventType_VREvent_EnableHomeAppSettingsHaveChanged = 856;
- /** native declaration : headers\openvr_capi.h:456 */
- public static final int EVREventType_VREvent_StatusUpdate = 900;
- /** native declaration : headers\openvr_capi.h:457 */
- public static final int EVREventType_VREvent_MCImageUpdated = 1000;
- /** native declaration : headers\openvr_capi.h:458 */
- public static final int EVREventType_VREvent_FirmwareUpdateStarted = 1100;
- /** native declaration : headers\openvr_capi.h:459 */
- public static final int EVREventType_VREvent_FirmwareUpdateFinished = 1101;
- /** native declaration : headers\openvr_capi.h:460 */
- public static final int EVREventType_VREvent_KeyboardClosed = 1200;
- /** native declaration : headers\openvr_capi.h:461 */
- public static final int EVREventType_VREvent_KeyboardCharInput = 1201;
- /** native declaration : headers\openvr_capi.h:462 */
- public static final int EVREventType_VREvent_KeyboardDone = 1202;
- /** native declaration : headers\openvr_capi.h:463 */
- public static final int EVREventType_VREvent_ApplicationTransitionStarted = 1300;
- /** native declaration : headers\openvr_capi.h:464 */
- public static final int EVREventType_VREvent_ApplicationTransitionAborted = 1301;
- /** native declaration : headers\openvr_capi.h:465 */
- public static final int EVREventType_VREvent_ApplicationTransitionNewAppStarted = 1302;
- /** native declaration : headers\openvr_capi.h:466 */
- public static final int EVREventType_VREvent_ApplicationListUpdated = 1303;
- /** native declaration : headers\openvr_capi.h:467 */
- public static final int EVREventType_VREvent_ApplicationMimeTypeLoad = 1304;
- /** native declaration : headers\openvr_capi.h:468 */
- public static final int EVREventType_VREvent_ApplicationTransitionNewAppLaunchComplete = 1305;
- /** native declaration : headers\openvr_capi.h:469 */
- public static final int EVREventType_VREvent_ProcessConnected = 1306;
- /** native declaration : headers\openvr_capi.h:470 */
- public static final int EVREventType_VREvent_ProcessDisconnected = 1307;
- /** native declaration : headers\openvr_capi.h:471 */
- public static final int EVREventType_VREvent_Compositor_MirrorWindowShown = 1400;
- /** native declaration : headers\openvr_capi.h:472 */
- public static final int EVREventType_VREvent_Compositor_MirrorWindowHidden = 1401;
- /** native declaration : headers\openvr_capi.h:473 */
- public static final int EVREventType_VREvent_Compositor_ChaperoneBoundsShown = 1410;
- /** native declaration : headers\openvr_capi.h:474 */
- public static final int EVREventType_VREvent_Compositor_ChaperoneBoundsHidden = 1411;
- /** native declaration : headers\openvr_capi.h:475 */
- public static final int EVREventType_VREvent_TrackedCamera_StartVideoStream = 1500;
- /** native declaration : headers\openvr_capi.h:476 */
- public static final int EVREventType_VREvent_TrackedCamera_StopVideoStream = 1501;
- /** native declaration : headers\openvr_capi.h:477 */
- public static final int EVREventType_VREvent_TrackedCamera_PauseVideoStream = 1502;
- /** native declaration : headers\openvr_capi.h:478 */
- public static final int EVREventType_VREvent_TrackedCamera_ResumeVideoStream = 1503;
- /** native declaration : headers\openvr_capi.h:479 */
- public static final int EVREventType_VREvent_TrackedCamera_EditingSurface = 1550;
- /** native declaration : headers\openvr_capi.h:480 */
- public static final int EVREventType_VREvent_PerformanceTest_EnableCapture = 1600;
- /** native declaration : headers\openvr_capi.h:481 */
- public static final int EVREventType_VREvent_PerformanceTest_DisableCapture = 1601;
- /** native declaration : headers\openvr_capi.h:482 */
- public static final int EVREventType_VREvent_PerformanceTest_FidelityLevel = 1602;
- /** native declaration : headers\openvr_capi.h:483 */
- public static final int EVREventType_VREvent_MessageOverlay_Closed = 1650;
- /** native declaration : headers\openvr_capi.h:484 */
- public static final int EVREventType_VREvent_VendorSpecific_Reserved_Start = 10000;
- /** native declaration : headers\openvr_capi.h:485 */
- public static final int EVREventType_VREvent_VendorSpecific_Reserved_End = 19999;
- };
- /**
- * native declaration : headers\openvr_capi.h:493
- * enum values
- */
- public static interface EDeviceActivityLevel {
- /** native declaration : headers\openvr_capi.h:488 */
- public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_Unknown = -1;
- /** native declaration : headers\openvr_capi.h:489 */
- public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_Idle = 0;
- /** native declaration : headers\openvr_capi.h:490 */
- public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction = 1;
- /** native declaration : headers\openvr_capi.h:491 */
- public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction_Timeout = 2;
- /** native declaration : headers\openvr_capi.h:492 */
- public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_Standby = 3;
- };
- /**
- * native declaration : headers\openvr_capi.h:513
- * enum values
- */
- public static interface EVRButtonId {
- /** native declaration : headers\openvr_capi.h:495 */
- public static final int EVRButtonId_k_EButton_System = 0;
- /** native declaration : headers\openvr_capi.h:496 */
- public static final int EVRButtonId_k_EButton_ApplicationMenu = 1;
- /** native declaration : headers\openvr_capi.h:497 */
- public static final int EVRButtonId_k_EButton_Grip = 2;
- /** native declaration : headers\openvr_capi.h:498 */
- public static final int EVRButtonId_k_EButton_DPad_Left = 3;
- /** native declaration : headers\openvr_capi.h:499 */
- public static final int EVRButtonId_k_EButton_DPad_Up = 4;
- /** native declaration : headers\openvr_capi.h:500 */
- public static final int EVRButtonId_k_EButton_DPad_Right = 5;
- /** native declaration : headers\openvr_capi.h:501 */
- public static final int EVRButtonId_k_EButton_DPad_Down = 6;
- /** native declaration : headers\openvr_capi.h:502 */
- public static final int EVRButtonId_k_EButton_A = 7;
- /** native declaration : headers\openvr_capi.h:503 */
- public static final int EVRButtonId_k_EButton_ProximitySensor = 31;
- /** native declaration : headers\openvr_capi.h:504 */
- public static final int EVRButtonId_k_EButton_Axis0 = 32;
- /** native declaration : headers\openvr_capi.h:505 */
- public static final int EVRButtonId_k_EButton_Axis1 = 33;
- /** native declaration : headers\openvr_capi.h:506 */
- public static final int EVRButtonId_k_EButton_Axis2 = 34;
- /** native declaration : headers\openvr_capi.h:507 */
- public static final int EVRButtonId_k_EButton_Axis3 = 35;
- /** native declaration : headers\openvr_capi.h:508 */
- public static final int EVRButtonId_k_EButton_Axis4 = 36;
- /** native declaration : headers\openvr_capi.h:509 */
- public static final int EVRButtonId_k_EButton_SteamVR_Touchpad = 32;
- /** native declaration : headers\openvr_capi.h:510 */
- public static final int EVRButtonId_k_EButton_SteamVR_Trigger = 33;
- /** native declaration : headers\openvr_capi.h:511 */
- public static final int EVRButtonId_k_EButton_Dashboard_Back = 2;
- /** native declaration : headers\openvr_capi.h:512 */
- public static final int EVRButtonId_k_EButton_Max = 64;
- };
- /**
- * native declaration : headers\openvr_capi.h:518
- * enum values
- */
- public static interface EVRMouseButton {
- /** native declaration : headers\openvr_capi.h:515 */
- public static final int EVRMouseButton_VRMouseButton_Left = 1;
- /** native declaration : headers\openvr_capi.h:516 */
- public static final int EVRMouseButton_VRMouseButton_Right = 2;
- /** native declaration : headers\openvr_capi.h:517 */
- public static final int EVRMouseButton_VRMouseButton_Middle = 4;
- };
- /**
- * native declaration : headers\openvr_capi.h:524
- * enum values
- */
- public static interface EHiddenAreaMeshType {
- /** native declaration : headers\openvr_capi.h:520 */
- public static final int EHiddenAreaMeshType_k_eHiddenAreaMesh_Standard = 0;
- /** native declaration : headers\openvr_capi.h:521 */
- public static final int EHiddenAreaMeshType_k_eHiddenAreaMesh_Inverse = 1;
- /** native declaration : headers\openvr_capi.h:522 */
- public static final int EHiddenAreaMeshType_k_eHiddenAreaMesh_LineLoop = 2;
- /** native declaration : headers\openvr_capi.h:523 */
- public static final int EHiddenAreaMeshType_k_eHiddenAreaMesh_Max = 3;
- };
- /**
- * native declaration : headers\openvr_capi.h:530
- * enum values
- */
- public static interface EVRControllerAxisType {
- /** native declaration : headers\openvr_capi.h:526 */
- public static final int EVRControllerAxisType_k_eControllerAxis_None = 0;
- /** native declaration : headers\openvr_capi.h:527 */
- public static final int EVRControllerAxisType_k_eControllerAxis_TrackPad = 1;
- /** native declaration : headers\openvr_capi.h:528 */
- public static final int EVRControllerAxisType_k_eControllerAxis_Joystick = 2;
- /** native declaration : headers\openvr_capi.h:529 */
- public static final int EVRControllerAxisType_k_eControllerAxis_Trigger = 3;
- };
- /**
- * native declaration : headers\openvr_capi.h:534
- * enum values
- */
- public static interface EVRControllerEventOutputType {
- /** native declaration : headers\openvr_capi.h:532 */
- public static final int EVRControllerEventOutputType_ControllerEventOutput_OSEvents = 0;
- /** native declaration : headers\openvr_capi.h:533 */
- public static final int EVRControllerEventOutputType_ControllerEventOutput_VREvents = 1;
- };
- /**
- * native declaration : headers\openvr_capi.h:542
- * enum values
- */
- public static interface ECollisionBoundsStyle {
- /** native declaration : headers\openvr_capi.h:536 */
- public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_BEGINNER = 0;
- /** native declaration : headers\openvr_capi.h:537 */
- public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_INTERMEDIATE = 1;
- /** native declaration : headers\openvr_capi.h:538 */
- public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_SQUARES = 2;
- /** native declaration : headers\openvr_capi.h:539 */
- public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_ADVANCED = 3;
- /** native declaration : headers\openvr_capi.h:540 */
- public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_NONE = 4;
- /** native declaration : headers\openvr_capi.h:541 */
- public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_COUNT = 5;
- };
- /**
- * native declaration : headers\openvr_capi.h:565
- * enum values
- */
- public static interface EVROverlayError {
- /** native declaration : headers\openvr_capi.h:544 */
- public static final int EVROverlayError_VROverlayError_None = 0;
- /** native declaration : headers\openvr_capi.h:545 */
- public static final int EVROverlayError_VROverlayError_UnknownOverlay = 10;
- /** native declaration : headers\openvr_capi.h:546 */
- public static final int EVROverlayError_VROverlayError_InvalidHandle = 11;
- /** native declaration : headers\openvr_capi.h:547 */
- public static final int EVROverlayError_VROverlayError_PermissionDenied = 12;
- /** native declaration : headers\openvr_capi.h:548 */
- public static final int EVROverlayError_VROverlayError_OverlayLimitExceeded = 13;
- /** native declaration : headers\openvr_capi.h:549 */
- public static final int EVROverlayError_VROverlayError_WrongVisibilityType = 14;
- /** native declaration : headers\openvr_capi.h:550 */
- public static final int EVROverlayError_VROverlayError_KeyTooLong = 15;
- /** native declaration : headers\openvr_capi.h:551 */
- public static final int EVROverlayError_VROverlayError_NameTooLong = 16;
- /** native declaration : headers\openvr_capi.h:552 */
- public static final int EVROverlayError_VROverlayError_KeyInUse = 17;
- /** native declaration : headers\openvr_capi.h:553 */
- public static final int EVROverlayError_VROverlayError_WrongTransformType = 18;
- /** native declaration : headers\openvr_capi.h:554 */
- public static final int EVROverlayError_VROverlayError_InvalidTrackedDevice = 19;
- /** native declaration : headers\openvr_capi.h:555 */
- public static final int EVROverlayError_VROverlayError_InvalidParameter = 20;
- /** native declaration : headers\openvr_capi.h:556 */
- public static final int EVROverlayError_VROverlayError_ThumbnailCantBeDestroyed = 21;
- /** native declaration : headers\openvr_capi.h:557 */
- public static final int EVROverlayError_VROverlayError_ArrayTooSmall = 22;
- /** native declaration : headers\openvr_capi.h:558 */
- public static final int EVROverlayError_VROverlayError_RequestFailed = 23;
- /** native declaration : headers\openvr_capi.h:559 */
- public static final int EVROverlayError_VROverlayError_InvalidTexture = 24;
- /** native declaration : headers\openvr_capi.h:560 */
- public static final int EVROverlayError_VROverlayError_UnableToLoadFile = 25;
- /** native declaration : headers\openvr_capi.h:561 */
- public static final int EVROverlayError_VROverlayError_KeyboardAlreadyInUse = 26;
- /** native declaration : headers\openvr_capi.h:562 */
- public static final int EVROverlayError_VROverlayError_NoNeighbor = 27;
- /** native declaration : headers\openvr_capi.h:563 */
- public static final int EVROverlayError_VROverlayError_TooManyMaskPrimitives = 29;
- /** native declaration : headers\openvr_capi.h:564 */
- public static final int EVROverlayError_VROverlayError_BadMaskPrimitive = 30;
- };
- /**
- * native declaration : headers\openvr_capi.h:576
- * enum values
- */
- public static interface EVRApplicationType {
- /** native declaration : headers\openvr_capi.h:567 */
- public static final int EVRApplicationType_VRApplication_Other = 0;
- /** native declaration : headers\openvr_capi.h:568 */
- public static final int EVRApplicationType_VRApplication_Scene = 1;
- /** native declaration : headers\openvr_capi.h:569 */
- public static final int EVRApplicationType_VRApplication_Overlay = 2;
- /** native declaration : headers\openvr_capi.h:570 */
- public static final int EVRApplicationType_VRApplication_Background = 3;
- /** native declaration : headers\openvr_capi.h:571 */
- public static final int EVRApplicationType_VRApplication_Utility = 4;
- /** native declaration : headers\openvr_capi.h:572 */
- public static final int EVRApplicationType_VRApplication_VRMonitor = 5;
- /** native declaration : headers\openvr_capi.h:573 */
- public static final int EVRApplicationType_VRApplication_SteamWatchdog = 6;
- /** native declaration : headers\openvr_capi.h:574 */
- public static final int EVRApplicationType_VRApplication_Bootstrapper = 7;
- /** native declaration : headers\openvr_capi.h:575 */
- public static final int EVRApplicationType_VRApplication_Max = 8;
- };
- /**
- * native declaration : headers\openvr_capi.h:581
- * enum values
- */
- public static interface EVRFirmwareError {
- /** native declaration : headers\openvr_capi.h:578 */
- public static final int EVRFirmwareError_VRFirmwareError_None = 0;
- /** native declaration : headers\openvr_capi.h:579 */
- public static final int EVRFirmwareError_VRFirmwareError_Success = 1;
- /** native declaration : headers\openvr_capi.h:580 */
- public static final int EVRFirmwareError_VRFirmwareError_Fail = 2;
- };
- /**
- * native declaration : headers\openvr_capi.h:588
- * enum values
- */
- public static interface EVRNotificationError {
- /** native declaration : headers\openvr_capi.h:583 */
- public static final int EVRNotificationError_VRNotificationError_OK = 0;
- /** native declaration : headers\openvr_capi.h:584 */
- public static final int EVRNotificationError_VRNotificationError_InvalidNotificationId = 100;
- /** native declaration : headers\openvr_capi.h:585 */
- public static final int EVRNotificationError_VRNotificationError_NotificationQueueFull = 101;
- /** native declaration : headers\openvr_capi.h:586 */
- public static final int EVRNotificationError_VRNotificationError_InvalidOverlayHandle = 102;
- /** native declaration : headers\openvr_capi.h:587 */
- public static final int EVRNotificationError_VRNotificationError_SystemWithUserValueAlreadyExists = 103;
- };
- /**
- * native declaration : headers\openvr_capi.h:671
- * enum values
- */
- public static interface EVRInitError {
- /** native declaration : headers\openvr_capi.h:590 */
- public static final int EVRInitError_VRInitError_None = 0;
- /** native declaration : headers\openvr_capi.h:591 */
- public static final int EVRInitError_VRInitError_Unknown = 1;
- /** native declaration : headers\openvr_capi.h:592 */
- public static final int EVRInitError_VRInitError_Init_InstallationNotFound = 100;
- /** native declaration : headers\openvr_capi.h:593 */
- public static final int EVRInitError_VRInitError_Init_InstallationCorrupt = 101;
- /** native declaration : headers\openvr_capi.h:594 */
- public static final int EVRInitError_VRInitError_Init_VRClientDLLNotFound = 102;
- /** native declaration : headers\openvr_capi.h:595 */
- public static final int EVRInitError_VRInitError_Init_FileNotFound = 103;
- /** native declaration : headers\openvr_capi.h:596 */
- public static final int EVRInitError_VRInitError_Init_FactoryNotFound = 104;
- /** native declaration : headers\openvr_capi.h:597 */
- public static final int EVRInitError_VRInitError_Init_InterfaceNotFound = 105;
- /** native declaration : headers\openvr_capi.h:598 */
- public static final int EVRInitError_VRInitError_Init_InvalidInterface = 106;
- /** native declaration : headers\openvr_capi.h:599 */
- public static final int EVRInitError_VRInitError_Init_UserConfigDirectoryInvalid = 107;
- /** native declaration : headers\openvr_capi.h:600 */
- public static final int EVRInitError_VRInitError_Init_HmdNotFound = 108;
- /** native declaration : headers\openvr_capi.h:601 */
- public static final int EVRInitError_VRInitError_Init_NotInitialized = 109;
- /** native declaration : headers\openvr_capi.h:602 */
- public static final int EVRInitError_VRInitError_Init_PathRegistryNotFound = 110;
- /** native declaration : headers\openvr_capi.h:603 */
- public static final int EVRInitError_VRInitError_Init_NoConfigPath = 111;
- /** native declaration : headers\openvr_capi.h:604 */
- public static final int EVRInitError_VRInitError_Init_NoLogPath = 112;
- /** native declaration : headers\openvr_capi.h:605 */
- public static final int EVRInitError_VRInitError_Init_PathRegistryNotWritable = 113;
- /** native declaration : headers\openvr_capi.h:606 */
- public static final int EVRInitError_VRInitError_Init_AppInfoInitFailed = 114;
- /** native declaration : headers\openvr_capi.h:607 */
- public static final int EVRInitError_VRInitError_Init_Retry = 115;
- /** native declaration : headers\openvr_capi.h:608 */
- public static final int EVRInitError_VRInitError_Init_InitCanceledByUser = 116;
- /** native declaration : headers\openvr_capi.h:609 */
- public static final int EVRInitError_VRInitError_Init_AnotherAppLaunching = 117;
- /** native declaration : headers\openvr_capi.h:610 */
- public static final int EVRInitError_VRInitError_Init_SettingsInitFailed = 118;
- /** native declaration : headers\openvr_capi.h:611 */
- public static final int EVRInitError_VRInitError_Init_ShuttingDown = 119;
- /** native declaration : headers\openvr_capi.h:612 */
- public static final int EVRInitError_VRInitError_Init_TooManyObjects = 120;
- /** native declaration : headers\openvr_capi.h:613 */
- public static final int EVRInitError_VRInitError_Init_NoServerForBackgroundApp = 121;
- /** native declaration : headers\openvr_capi.h:614 */
- public static final int EVRInitError_VRInitError_Init_NotSupportedWithCompositor = 122;
- /** native declaration : headers\openvr_capi.h:615 */
- public static final int EVRInitError_VRInitError_Init_NotAvailableToUtilityApps = 123;
- /** native declaration : headers\openvr_capi.h:616 */
- public static final int EVRInitError_VRInitError_Init_Internal = 124;
- /** native declaration : headers\openvr_capi.h:617 */
- public static final int EVRInitError_VRInitError_Init_HmdDriverIdIsNone = 125;
- /** native declaration : headers\openvr_capi.h:618 */
- public static final int EVRInitError_VRInitError_Init_HmdNotFoundPresenceFailed = 126;
- /** native declaration : headers\openvr_capi.h:619 */
- public static final int EVRInitError_VRInitError_Init_VRMonitorNotFound = 127;
- /** native declaration : headers\openvr_capi.h:620 */
- public static final int EVRInitError_VRInitError_Init_VRMonitorStartupFailed = 128;
- /** native declaration : headers\openvr_capi.h:621 */
- public static final int EVRInitError_VRInitError_Init_LowPowerWatchdogNotSupported = 129;
- /** native declaration : headers\openvr_capi.h:622 */
- public static final int EVRInitError_VRInitError_Init_InvalidApplicationType = 130;
- /** native declaration : headers\openvr_capi.h:623 */
- public static final int EVRInitError_VRInitError_Init_NotAvailableToWatchdogApps = 131;
- /** native declaration : headers\openvr_capi.h:624 */
- public static final int EVRInitError_VRInitError_Init_WatchdogDisabledInSettings = 132;
- /** native declaration : headers\openvr_capi.h:625 */
- public static final int EVRInitError_VRInitError_Init_VRDashboardNotFound = 133;
- /** native declaration : headers\openvr_capi.h:626 */
- public static final int EVRInitError_VRInitError_Init_VRDashboardStartupFailed = 134;
- /** native declaration : headers\openvr_capi.h:627 */
- public static final int EVRInitError_VRInitError_Init_VRHomeNotFound = 135;
- /** native declaration : headers\openvr_capi.h:628 */
- public static final int EVRInitError_VRInitError_Init_VRHomeStartupFailed = 136;
- /** native declaration : headers\openvr_capi.h:629 */
- public static final int EVRInitError_VRInitError_Driver_Failed = 200;
- /** native declaration : headers\openvr_capi.h:630 */
- public static final int EVRInitError_VRInitError_Driver_Unknown = 201;
- /** native declaration : headers\openvr_capi.h:631 */
- public static final int EVRInitError_VRInitError_Driver_HmdUnknown = 202;
- /** native declaration : headers\openvr_capi.h:632 */
- public static final int EVRInitError_VRInitError_Driver_NotLoaded = 203;
- /** native declaration : headers\openvr_capi.h:633 */
- public static final int EVRInitError_VRInitError_Driver_RuntimeOutOfDate = 204;
- /** native declaration : headers\openvr_capi.h:634 */
- public static final int EVRInitError_VRInitError_Driver_HmdInUse = 205;
- /** native declaration : headers\openvr_capi.h:635 */
- public static final int EVRInitError_VRInitError_Driver_NotCalibrated = 206;
- /** native declaration : headers\openvr_capi.h:636 */
- public static final int EVRInitError_VRInitError_Driver_CalibrationInvalid = 207;
- /** native declaration : headers\openvr_capi.h:637 */
- public static final int EVRInitError_VRInitError_Driver_HmdDisplayNotFound = 208;
- /** native declaration : headers\openvr_capi.h:638 */
- public static final int EVRInitError_VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209;
- /** native declaration : headers\openvr_capi.h:639 */
- public static final int EVRInitError_VRInitError_Driver_HmdDriverIdOutOfBounds = 211;
- /** native declaration : headers\openvr_capi.h:640 */
- public static final int EVRInitError_VRInitError_Driver_HmdDisplayMirrored = 212;
- /** native declaration : headers\openvr_capi.h:641 */
- public static final int EVRInitError_VRInitError_IPC_ServerInitFailed = 300;
- /** native declaration : headers\openvr_capi.h:642 */
- public static final int EVRInitError_VRInitError_IPC_ConnectFailed = 301;
- /** native declaration : headers\openvr_capi.h:643 */
- public static final int EVRInitError_VRInitError_IPC_SharedStateInitFailed = 302;
- /** native declaration : headers\openvr_capi.h:644 */
- public static final int EVRInitError_VRInitError_IPC_CompositorInitFailed = 303;
- /** native declaration : headers\openvr_capi.h:645 */
- public static final int EVRInitError_VRInitError_IPC_MutexInitFailed = 304;
- /** native declaration : headers\openvr_capi.h:646 */
- public static final int EVRInitError_VRInitError_IPC_Failed = 305;
- /** native declaration : headers\openvr_capi.h:647 */
- public static final int EVRInitError_VRInitError_IPC_CompositorConnectFailed = 306;
- /** native declaration : headers\openvr_capi.h:648 */
- public static final int EVRInitError_VRInitError_IPC_CompositorInvalidConnectResponse = 307;
- /** native declaration : headers\openvr_capi.h:649 */
- public static final int EVRInitError_VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308;
- /** native declaration : headers\openvr_capi.h:650 */
- public static final int EVRInitError_VRInitError_Compositor_Failed = 400;
- /** native declaration : headers\openvr_capi.h:651 */
- public static final int EVRInitError_VRInitError_Compositor_D3D11HardwareRequired = 401;
- /** native declaration : headers\openvr_capi.h:652 */
- public static final int EVRInitError_VRInitError_Compositor_FirmwareRequiresUpdate = 402;
- /** native declaration : headers\openvr_capi.h:653 */
- public static final int EVRInitError_VRInitError_Compositor_OverlayInitFailed = 403;
- /** native declaration : headers\openvr_capi.h:654 */
- public static final int EVRInitError_VRInitError_Compositor_ScreenshotsInitFailed = 404;
- /** native declaration : headers\openvr_capi.h:655 */
- public static final int EVRInitError_VRInitError_Compositor_UnableToCreateDevice = 405;
- /** native declaration : headers\openvr_capi.h:656 */
- public static final int EVRInitError_VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000;
- /** native declaration : headers\openvr_capi.h:657 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101;
- /** native declaration : headers\openvr_capi.h:658 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102;
- /** native declaration : headers\openvr_capi.h:659 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103;
- /** native declaration : headers\openvr_capi.h:660 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104;
- /** native declaration : headers\openvr_capi.h:661 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105;
- /** native declaration : headers\openvr_capi.h:662 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106;
- /** native declaration : headers\openvr_capi.h:663 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107;
- /** native declaration : headers\openvr_capi.h:664 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108;
- /** native declaration : headers\openvr_capi.h:665 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109;
- /** native declaration : headers\openvr_capi.h:666 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110;
- /** native declaration : headers\openvr_capi.h:667 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111;
- /** native declaration : headers\openvr_capi.h:668 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataError = 1112;
- /** native declaration : headers\openvr_capi.h:669 */
- public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113;
- /** native declaration : headers\openvr_capi.h:670 */
- public static final int EVRInitError_VRInitError_Steam_SteamInstallationNotFound = 2000;
- };
- /**
- * native declaration : headers\openvr_capi.h:679
- * enum values
- */
- public static interface EVRScreenshotType {
- /** native declaration : headers\openvr_capi.h:673 */
- public static final int EVRScreenshotType_VRScreenshotType_None = 0;
- /** native declaration : headers\openvr_capi.h:674 */
- public static final int EVRScreenshotType_VRScreenshotType_Mono = 1;
- /** native declaration : headers\openvr_capi.h:675 */
- public static final int EVRScreenshotType_VRScreenshotType_Stereo = 2;
- /** native declaration : headers\openvr_capi.h:676 */
- public static final int EVRScreenshotType_VRScreenshotType_Cubemap = 3;
- /** native declaration : headers\openvr_capi.h:677 */
- public static final int EVRScreenshotType_VRScreenshotType_MonoPanorama = 4;
- /** native declaration : headers\openvr_capi.h:678 */
- public static final int EVRScreenshotType_VRScreenshotType_StereoPanorama = 5;
- };
- /**
- * native declaration : headers\openvr_capi.h:683
- * enum values
- */
- public static interface EVRScreenshotPropertyFilenames {
- /** native declaration : headers\openvr_capi.h:681 */
- public static final int EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_Preview = 0;
- /** native declaration : headers\openvr_capi.h:682 */
- public static final int EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_VR = 1;
- };
- /**
- * native declaration : headers\openvr_capi.h:702
- * enum values
- */
- public static interface EVRTrackedCameraError {
- /** native declaration : headers\openvr_capi.h:685 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_None = 0;
- /** native declaration : headers\openvr_capi.h:686 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_OperationFailed = 100;
- /** native declaration : headers\openvr_capi.h:687 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidHandle = 101;
- /** native declaration : headers\openvr_capi.h:688 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameHeaderVersion = 102;
- /** native declaration : headers\openvr_capi.h:689 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_OutOfHandles = 103;
- /** native declaration : headers\openvr_capi.h:690 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_IPCFailure = 104;
- /** native declaration : headers\openvr_capi.h:691 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_NotSupportedForThisDevice = 105;
- /** native declaration : headers\openvr_capi.h:692 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_SharedMemoryFailure = 106;
- /** native declaration : headers\openvr_capi.h:693 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_FrameBufferingFailure = 107;
- /** native declaration : headers\openvr_capi.h:694 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_StreamSetupFailure = 108;
- /** native declaration : headers\openvr_capi.h:695 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidGLTextureId = 109;
- /** native declaration : headers\openvr_capi.h:696 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidSharedTextureHandle = 110;
- /** native declaration : headers\openvr_capi.h:697 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_FailedToGetGLTextureId = 111;
- /** native declaration : headers\openvr_capi.h:698 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_SharedTextureFailure = 112;
- /** native declaration : headers\openvr_capi.h:699 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_NoFrameAvailable = 113;
- /** native declaration : headers\openvr_capi.h:700 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidArgument = 114;
- /** native declaration : headers\openvr_capi.h:701 */
- public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameBufferSize = 115;
- };
- /**
- * native declaration : headers\openvr_capi.h:708
- * enum values
- */
- public static interface EVRTrackedCameraFrameType {
- /** native declaration : headers\openvr_capi.h:704 */
- public static final int EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Distorted = 0;
- /** native declaration : headers\openvr_capi.h:705 */
- public static final int EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Undistorted = 1;
- /** native declaration : headers\openvr_capi.h:706 */
- public static final int EVRTrackedCameraFrameType_VRTrackedCameraFrameType_MaximumUndistorted = 2;
- /** native declaration : headers\openvr_capi.h:707 */
- public static final int EVRTrackedCameraFrameType_MAX_CAMERA_FRAME_TYPES = 3;
- };
- /**
- * native declaration : headers\openvr_capi.h:731
- * enum values
- */
- public static interface EVRApplicationError {
- /** native declaration : headers\openvr_capi.h:710 */
- public static final int EVRApplicationError_VRApplicationError_None = 0;
- /** native declaration : headers\openvr_capi.h:711 */
- public static final int EVRApplicationError_VRApplicationError_AppKeyAlreadyExists = 100;
- /** native declaration : headers\openvr_capi.h:712 */
- public static final int EVRApplicationError_VRApplicationError_NoManifest = 101;
- /** native declaration : headers\openvr_capi.h:713 */
- public static final int EVRApplicationError_VRApplicationError_NoApplication = 102;
- /** native declaration : headers\openvr_capi.h:714 */
- public static final int EVRApplicationError_VRApplicationError_InvalidIndex = 103;
- /** native declaration : headers\openvr_capi.h:715 */
- public static final int EVRApplicationError_VRApplicationError_UnknownApplication = 104;
- /** native declaration : headers\openvr_capi.h:716 */
- public static final int EVRApplicationError_VRApplicationError_IPCFailed = 105;
- /** native declaration : headers\openvr_capi.h:717 */
- public static final int EVRApplicationError_VRApplicationError_ApplicationAlreadyRunning = 106;
- /** native declaration : headers\openvr_capi.h:718 */
- public static final int EVRApplicationError_VRApplicationError_InvalidManifest = 107;
- /** native declaration : headers\openvr_capi.h:719 */
- public static final int EVRApplicationError_VRApplicationError_InvalidApplication = 108;
- /** native declaration : headers\openvr_capi.h:720 */
- public static final int EVRApplicationError_VRApplicationError_LaunchFailed = 109;
- /** native declaration : headers\openvr_capi.h:721 */
- public static final int EVRApplicationError_VRApplicationError_ApplicationAlreadyStarting = 110;
- /** native declaration : headers\openvr_capi.h:722 */
- public static final int EVRApplicationError_VRApplicationError_LaunchInProgress = 111;
- /** native declaration : headers\openvr_capi.h:723 */
- public static final int EVRApplicationError_VRApplicationError_OldApplicationQuitting = 112;
- /** native declaration : headers\openvr_capi.h:724 */
- public static final int EVRApplicationError_VRApplicationError_TransitionAborted = 113;
- /** native declaration : headers\openvr_capi.h:725 */
- public static final int EVRApplicationError_VRApplicationError_IsTemplate = 114;
- /** native declaration : headers\openvr_capi.h:726 */
- public static final int EVRApplicationError_VRApplicationError_SteamVRIsExiting = 115;
- /** native declaration : headers\openvr_capi.h:727 */
- public static final int EVRApplicationError_VRApplicationError_BufferTooSmall = 200;
- /** native declaration : headers\openvr_capi.h:728 */
- public static final int EVRApplicationError_VRApplicationError_PropertyNotSet = 201;
- /** native declaration : headers\openvr_capi.h:729 */
- public static final int EVRApplicationError_VRApplicationError_UnknownProperty = 202;
- /** native declaration : headers\openvr_capi.h:730 */
- public static final int EVRApplicationError_VRApplicationError_InvalidParameter = 203;
- };
- /**
- * native declaration : headers\openvr_capi.h:749
- * enum values
- */
- public static interface EVRApplicationProperty {
- /** native declaration : headers\openvr_capi.h:733 */
- public static final int EVRApplicationProperty_VRApplicationProperty_Name_String = 0;
- /** native declaration : headers\openvr_capi.h:734 */
- public static final int EVRApplicationProperty_VRApplicationProperty_LaunchType_String = 11;
- /** native declaration : headers\openvr_capi.h:735 */
- public static final int EVRApplicationProperty_VRApplicationProperty_WorkingDirectory_String = 12;
- /** native declaration : headers\openvr_capi.h:736 */
- public static final int EVRApplicationProperty_VRApplicationProperty_BinaryPath_String = 13;
- /** native declaration : headers\openvr_capi.h:737 */
- public static final int EVRApplicationProperty_VRApplicationProperty_Arguments_String = 14;
- /** native declaration : headers\openvr_capi.h:738 */
- public static final int EVRApplicationProperty_VRApplicationProperty_URL_String = 15;
- /** native declaration : headers\openvr_capi.h:739 */
- public static final int EVRApplicationProperty_VRApplicationProperty_Description_String = 50;
- /** native declaration : headers\openvr_capi.h:740 */
- public static final int EVRApplicationProperty_VRApplicationProperty_NewsURL_String = 51;
- /** native declaration : headers\openvr_capi.h:741 */
- public static final int EVRApplicationProperty_VRApplicationProperty_ImagePath_String = 52;
- /** native declaration : headers\openvr_capi.h:742 */
- public static final int EVRApplicationProperty_VRApplicationProperty_Source_String = 53;
- /** native declaration : headers\openvr_capi.h:743 */
- public static final int EVRApplicationProperty_VRApplicationProperty_IsDashboardOverlay_Bool = 60;
- /** native declaration : headers\openvr_capi.h:744 */
- public static final int EVRApplicationProperty_VRApplicationProperty_IsTemplate_Bool = 61;
- /** native declaration : headers\openvr_capi.h:745 */
- public static final int EVRApplicationProperty_VRApplicationProperty_IsInstanced_Bool = 62;
- /** native declaration : headers\openvr_capi.h:746 */
- public static final int EVRApplicationProperty_VRApplicationProperty_IsInternal_Bool = 63;
- /** native declaration : headers\openvr_capi.h:747 */
- public static final int EVRApplicationProperty_VRApplicationProperty_WantsCompositorPauseInStandby_Bool = 64;
- /** native declaration : headers\openvr_capi.h:748 */
- public static final int EVRApplicationProperty_VRApplicationProperty_LastLaunchTime_Uint64 = 70;
- };
- /**
- * native declaration : headers\openvr_capi.h:755
- * enum values
- */
- public static interface EVRApplicationTransitionState {
- /** native declaration : headers\openvr_capi.h:751 */
- public static final int EVRApplicationTransitionState_VRApplicationTransition_None = 0;
- /** native declaration : headers\openvr_capi.h:752 */
- public static final int EVRApplicationTransitionState_VRApplicationTransition_OldAppQuitSent = 10;
- /** native declaration : headers\openvr_capi.h:753 */
- public static final int EVRApplicationTransitionState_VRApplicationTransition_WaitingForExternalLaunch = 11;
- /** native declaration : headers\openvr_capi.h:754 */
- public static final int EVRApplicationTransitionState_VRApplicationTransition_NewAppLaunched = 20;
- };
- /**
- * native declaration : headers\openvr_capi.h:767
- * enum values
- */
- public static interface ChaperoneCalibrationState {
- /** native declaration : headers\openvr_capi.h:757 */
- public static final int ChaperoneCalibrationState_OK = 1;
- /** native declaration : headers\openvr_capi.h:758 */
- public static final int ChaperoneCalibrationState_Warning = 100;
- /** native declaration : headers\openvr_capi.h:759 */
- public static final int ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved = 101;
- /** native declaration : headers\openvr_capi.h:760 */
- public static final int ChaperoneCalibrationState_Warning_BaseStationRemoved = 102;
- /** native declaration : headers\openvr_capi.h:761 */
- public static final int ChaperoneCalibrationState_Warning_SeatedBoundsInvalid = 103;
- /** native declaration : headers\openvr_capi.h:762 */
- public static final int ChaperoneCalibrationState_Error = 200;
- /** native declaration : headers\openvr_capi.h:763 */
- public static final int ChaperoneCalibrationState_Error_BaseStationUninitialized = 201;
- /** native declaration : headers\openvr_capi.h:764 */
- public static final int ChaperoneCalibrationState_Error_BaseStationConflict = 202;
- /** native declaration : headers\openvr_capi.h:765 */
- public static final int ChaperoneCalibrationState_Error_PlayAreaInvalid = 203;
- /** native declaration : headers\openvr_capi.h:766 */
- public static final int ChaperoneCalibrationState_Error_CollisionBoundsInvalid = 204;
- };
- /**
- * native declaration : headers\openvr_capi.h:771
- * enum values
- */
- public static interface EChaperoneConfigFile {
- /** native declaration : headers\openvr_capi.h:769 */
- public static final int EChaperoneConfigFile_Live = 1;
- /** native declaration : headers\openvr_capi.h:770 */
- public static final int EChaperoneConfigFile_Temp = 2;
- };
- /**
- * native declaration : headers\openvr_capi.h:774
- * enum values
- */
- public static interface EChaperoneImportFlags {
- /** native declaration : headers\openvr_capi.h:773 */
- public static final int EChaperoneImportFlags_EChaperoneImport_BoundsOnly = 1;
- };
+ * native declaration : headers\openvr_capi.h:229
+ * enum values
+ */
+ public static interface EVREye {
+ /** native declaration : headers\openvr_capi.h:227 */
+ public static final int EVREye_Eye_Left = 0;
+ /** native declaration : headers\openvr_capi.h:228 */
+ public static final int EVREye_Eye_Right = 1;
+ };
/**
- * native declaration : headers\openvr_capi.h:788
- * enum values
- */
- public static interface EVRCompositorError {
- /** native declaration : headers\openvr_capi.h:776 */
- public static final int EVRCompositorError_VRCompositorError_None = 0;
- /** native declaration : headers\openvr_capi.h:777 */
- public static final int EVRCompositorError_VRCompositorError_RequestFailed = 1;
- /** native declaration : headers\openvr_capi.h:778 */
- public static final int EVRCompositorError_VRCompositorError_IncompatibleVersion = 100;
- /** native declaration : headers\openvr_capi.h:779 */
- public static final int EVRCompositorError_VRCompositorError_DoNotHaveFocus = 101;
- /** native declaration : headers\openvr_capi.h:780 */
- public static final int EVRCompositorError_VRCompositorError_InvalidTexture = 102;
- /** native declaration : headers\openvr_capi.h:781 */
- public static final int EVRCompositorError_VRCompositorError_IsNotSceneApplication = 103;
- /** native declaration : headers\openvr_capi.h:782 */
- public static final int EVRCompositorError_VRCompositorError_TextureIsOnWrongDevice = 104;
- /** native declaration : headers\openvr_capi.h:783 */
- public static final int EVRCompositorError_VRCompositorError_TextureUsesUnsupportedFormat = 105;
- /** native declaration : headers\openvr_capi.h:784 */
- public static final int EVRCompositorError_VRCompositorError_SharedTexturesNotSupported = 106;
- /** native declaration : headers\openvr_capi.h:785 */
- public static final int EVRCompositorError_VRCompositorError_IndexOutOfRange = 107;
- /** native declaration : headers\openvr_capi.h:786 */
- public static final int EVRCompositorError_VRCompositorError_AlreadySubmitted = 108;
- /** native declaration : headers\openvr_capi.h:787 */
- public static final int EVRCompositorError_VRCompositorError_InvalidBounds = 109;
- };
- /**
- * native declaration : headers\openvr_capi.h:792
- * enum values
- */
- public static interface VROverlayInputMethod {
- /** native declaration : headers\openvr_capi.h:790 */
- public static final int VROverlayInputMethod_None = 0;
- /** native declaration : headers\openvr_capi.h:791 */
- public static final int VROverlayInputMethod_Mouse = 1;
- };
- /**
- * native declaration : headers\openvr_capi.h:798
- * enum values
- */
- public static interface VROverlayTransformType {
- /** native declaration : headers\openvr_capi.h:794 */
- public static final int VROverlayTransformType_VROverlayTransform_Absolute = 0;
- /** native declaration : headers\openvr_capi.h:795 */
- public static final int VROverlayTransformType_VROverlayTransform_TrackedDeviceRelative = 1;
- /** native declaration : headers\openvr_capi.h:796 */
- public static final int VROverlayTransformType_VROverlayTransform_SystemOverlay = 2;
- /** native declaration : headers\openvr_capi.h:797 */
- public static final int VROverlayTransformType_VROverlayTransform_TrackedComponent = 3;
- };
- /**
- * native declaration : headers\openvr_capi.h:816
- * enum values
- */
- public static interface VROverlayFlags {
- /** native declaration : headers\openvr_capi.h:800 */
- public static final int VROverlayFlags_None = 0;
- /** native declaration : headers\openvr_capi.h:801 */
- public static final int VROverlayFlags_Curved = 1;
- /** native declaration : headers\openvr_capi.h:802 */
- public static final int VROverlayFlags_RGSS4X = 2;
- /** native declaration : headers\openvr_capi.h:803 */
- public static final int VROverlayFlags_NoDashboardTab = 3;
- /** native declaration : headers\openvr_capi.h:804 */
- public static final int VROverlayFlags_AcceptsGamepadEvents = 4;
- /** native declaration : headers\openvr_capi.h:805 */
- public static final int VROverlayFlags_ShowGamepadFocus = 5;
- /** native declaration : headers\openvr_capi.h:806 */
- public static final int VROverlayFlags_SendVRScrollEvents = 6;
- /** native declaration : headers\openvr_capi.h:807 */
- public static final int VROverlayFlags_SendVRTouchpadEvents = 7;
- /** native declaration : headers\openvr_capi.h:808 */
- public static final int VROverlayFlags_ShowTouchPadScrollWheel = 8;
- /** native declaration : headers\openvr_capi.h:809 */
- public static final int VROverlayFlags_TransferOwnershipToInternalProcess = 9;
- /** native declaration : headers\openvr_capi.h:810 */
- public static final int VROverlayFlags_SideBySide_Parallel = 10;
- /** native declaration : headers\openvr_capi.h:811 */
- public static final int VROverlayFlags_SideBySide_Crossed = 11;
- /** native declaration : headers\openvr_capi.h:812 */
- public static final int VROverlayFlags_Panorama = 12;
- /** native declaration : headers\openvr_capi.h:813 */
- public static final int VROverlayFlags_StereoPanorama = 13;
- /** native declaration : headers\openvr_capi.h:814 */
- public static final int VROverlayFlags_SortWithNonSceneOverlays = 14;
- /** native declaration : headers\openvr_capi.h:815 */
- public static final int VROverlayFlags_VisibleInDashboard = 15;
- };
- /**
- * native declaration : headers\openvr_capi.h:825
- * enum values
- */
- public static interface VRMessageOverlayResponse {
- /** native declaration : headers\openvr_capi.h:818 */
- public static final int VRMessageOverlayResponse_ButtonPress_0 = 0;
- /** native declaration : headers\openvr_capi.h:819 */
- public static final int VRMessageOverlayResponse_ButtonPress_1 = 1;
- /** native declaration : headers\openvr_capi.h:820 */
- public static final int VRMessageOverlayResponse_ButtonPress_2 = 2;
- /** native declaration : headers\openvr_capi.h:821 */
- public static final int VRMessageOverlayResponse_ButtonPress_3 = 3;
- /** native declaration : headers\openvr_capi.h:822 */
- public static final int VRMessageOverlayResponse_CouldntFindSystemOverlay = 4;
- /** native declaration : headers\openvr_capi.h:823 */
- public static final int VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay = 5;
- /** native declaration : headers\openvr_capi.h:824 */
- public static final int VRMessageOverlayResponse_ApplicationQuit = 6;
- };
- /**
- * native declaration : headers\openvr_capi.h:830
- * enum values
- */
- public static interface EGamepadTextInputMode {
- /** native declaration : headers\openvr_capi.h:827 */
- public static final int EGamepadTextInputMode_k_EGamepadTextInputModeNormal = 0;
- /** native declaration : headers\openvr_capi.h:828 */
- public static final int EGamepadTextInputMode_k_EGamepadTextInputModePassword = 1;
- /** native declaration : headers\openvr_capi.h:829 */
- public static final int EGamepadTextInputMode_k_EGamepadTextInputModeSubmit = 2;
- };
- /**
- * native declaration : headers\openvr_capi.h:834
- * enum values
- */
- public static interface EGamepadTextInputLineMode {
- /** native declaration : headers\openvr_capi.h:832 */
- public static final int EGamepadTextInputLineMode_k_EGamepadTextInputLineModeSingleLine = 0;
- /** native declaration : headers\openvr_capi.h:833 */
- public static final int EGamepadTextInputLineMode_k_EGamepadTextInputLineModeMultipleLines = 1;
- };
- /**
- * native declaration : headers\openvr_capi.h:841
- * enum values
- */
- public static interface EOverlayDirection {
- /** native declaration : headers\openvr_capi.h:836 */
- public static final int EOverlayDirection_OverlayDirection_Up = 0;
- /** native declaration : headers\openvr_capi.h:837 */
- public static final int EOverlayDirection_OverlayDirection_Down = 1;
- /** native declaration : headers\openvr_capi.h:838 */
- public static final int EOverlayDirection_OverlayDirection_Left = 2;
- /** native declaration : headers\openvr_capi.h:839 */
- public static final int EOverlayDirection_OverlayDirection_Right = 3;
- /** native declaration : headers\openvr_capi.h:840 */
- public static final int EOverlayDirection_OverlayDirection_Count = 4;
- };
- /**
- * native declaration : headers\openvr_capi.h:845
- * enum values
- */
- public static interface EVROverlayIntersectionMaskPrimitiveType {
- /** native declaration : headers\openvr_capi.h:843 */
- public static final int EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Rectangle = 0;
- /** native declaration : headers\openvr_capi.h:844 */
- public static final int EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Circle = 1;
- };
- /**
- * native declaration : headers\openvr_capi.h:860
- * enum values
- */
- public static interface EVRRenderModelError {
- /** native declaration : headers\openvr_capi.h:847 */
- public static final int EVRRenderModelError_VRRenderModelError_None = 0;
- /** native declaration : headers\openvr_capi.h:848 */
- public static final int EVRRenderModelError_VRRenderModelError_Loading = 100;
- /** native declaration : headers\openvr_capi.h:849 */
- public static final int EVRRenderModelError_VRRenderModelError_NotSupported = 200;
- /** native declaration : headers\openvr_capi.h:850 */
- public static final int EVRRenderModelError_VRRenderModelError_InvalidArg = 300;
- /** native declaration : headers\openvr_capi.h:851 */
- public static final int EVRRenderModelError_VRRenderModelError_InvalidModel = 301;
- /** native declaration : headers\openvr_capi.h:852 */
- public static final int EVRRenderModelError_VRRenderModelError_NoShapes = 302;
- /** native declaration : headers\openvr_capi.h:853 */
- public static final int EVRRenderModelError_VRRenderModelError_MultipleShapes = 303;
- /** native declaration : headers\openvr_capi.h:854 */
- public static final int EVRRenderModelError_VRRenderModelError_TooManyVertices = 304;
- /** native declaration : headers\openvr_capi.h:855 */
- public static final int EVRRenderModelError_VRRenderModelError_MultipleTextures = 305;
- /** native declaration : headers\openvr_capi.h:856 */
- public static final int EVRRenderModelError_VRRenderModelError_BufferTooSmall = 306;
- /** native declaration : headers\openvr_capi.h:857 */
- public static final int EVRRenderModelError_VRRenderModelError_NotEnoughNormals = 307;
- /** native declaration : headers\openvr_capi.h:858 */
- public static final int EVRRenderModelError_VRRenderModelError_NotEnoughTexCoords = 308;
- /** native declaration : headers\openvr_capi.h:859 */
- public static final int EVRRenderModelError_VRRenderModelError_InvalidTexture = 400;
- };
- /**
- * native declaration : headers\openvr_capi.h:867
- * enum values
- */
- public static interface EVRComponentProperty {
- /** native declaration : headers\openvr_capi.h:862 */
- public static final int EVRComponentProperty_VRComponentProperty_IsStatic = 1;
- /** native declaration : headers\openvr_capi.h:863 */
- public static final int EVRComponentProperty_VRComponentProperty_IsVisible = 2;
- /** native declaration : headers\openvr_capi.h:864 */
- public static final int EVRComponentProperty_VRComponentProperty_IsTouched = 4;
- /** native declaration : headers\openvr_capi.h:865 */
- public static final int EVRComponentProperty_VRComponentProperty_IsPressed = 8;
- /** native declaration : headers\openvr_capi.h:866 */
- public static final int EVRComponentProperty_VRComponentProperty_IsScrolled = 16;
- };
- /**
- * native declaration : headers\openvr_capi.h:872
- * enum values
- */
- public static interface EVRNotificationType {
- /** native declaration : headers\openvr_capi.h:869 */
- public static final int EVRNotificationType_Transient = 0;
- /** native declaration : headers\openvr_capi.h:870 */
- public static final int EVRNotificationType_Persistent = 1;
- /** native declaration : headers\openvr_capi.h:871 */
- public static final int EVRNotificationType_Transient_SystemWithUserValue = 2;
- };
- /**
- * native declaration : headers\openvr_capi.h:879
- * enum values
- */
- public static interface EVRNotificationStyle {
- /** native declaration : headers\openvr_capi.h:874 */
- public static final int EVRNotificationStyle_None = 0;
- /** native declaration : headers\openvr_capi.h:875 */
- public static final int EVRNotificationStyle_Application = 100;
- /** native declaration : headers\openvr_capi.h:876 */
- public static final int EVRNotificationStyle_Contact_Disabled = 200;
- /** native declaration : headers\openvr_capi.h:877 */
- public static final int EVRNotificationStyle_Contact_Enabled = 201;
- /** native declaration : headers\openvr_capi.h:878 */
- public static final int EVRNotificationStyle_Contact_Active = 202;
- };
- /**
- * native declaration : headers\openvr_capi.h:887
- * enum values
- */
- public static interface EVRSettingsError {
- /** native declaration : headers\openvr_capi.h:881 */
- public static final int EVRSettingsError_VRSettingsError_None = 0;
- /** native declaration : headers\openvr_capi.h:882 */
- public static final int EVRSettingsError_VRSettingsError_IPCFailed = 1;
- /** native declaration : headers\openvr_capi.h:883 */
- public static final int EVRSettingsError_VRSettingsError_WriteFailed = 2;
- /** native declaration : headers\openvr_capi.h:884 */
- public static final int EVRSettingsError_VRSettingsError_ReadFailed = 3;
- /** native declaration : headers\openvr_capi.h:885 */
- public static final int EVRSettingsError_VRSettingsError_JsonParseFailed = 4;
- /** native declaration : headers\openvr_capi.h:886 */
- public static final int EVRSettingsError_VRSettingsError_UnsetSettingHasNoDefault = 5;
- };
- /**
- * native declaration : headers\openvr_capi.h:895
- * enum values
- */
- public static interface EVRScreenshotError {
- /** native declaration : headers\openvr_capi.h:889 */
- public static final int EVRScreenshotError_VRScreenshotError_None = 0;
- /** native declaration : headers\openvr_capi.h:890 */
- public static final int EVRScreenshotError_VRScreenshotError_RequestFailed = 1;
- /** native declaration : headers\openvr_capi.h:891 */
- public static final int EVRScreenshotError_VRScreenshotError_IncompatibleVersion = 100;
- /** native declaration : headers\openvr_capi.h:892 */
- public static final int EVRScreenshotError_VRScreenshotError_NotFound = 101;
- /** native declaration : headers\openvr_capi.h:893 */
- public static final int EVRScreenshotError_VRScreenshotError_BufferTooSmall = 102;
- /** native declaration : headers\openvr_capi.h:894 */
- public static final int EVRScreenshotError_VRScreenshotError_ScreenshotAlreadyInProgress = 108;
- };
-
- /** OpenVR Constants */
- public static final long k_nDriverNone = 4294967295L;
- public static final int k_unMaxDriverDebugResponseSize = 32768;
- public static final int k_unTrackedDeviceIndex_Hmd = 0;
- public static final int k_unMaxTrackedDeviceCount = 16;
- public static final int k_unTrackedDeviceIndexOther = -2;
- public static final long k_unTrackedDeviceIndexInvalid = 4294967295L;
- public static final long k_ulInvalidPropertyContainer = 0;
- public static final int k_unInvalidPropertyTag = 0;
- public static final int k_unFloatPropertyTag = 1;
- public static final int k_unInt32PropertyTag = 2;
- public static final int k_unUint64PropertyTag = 3;
- public static final int k_unBoolPropertyTag = 4;
- public static final int k_unStringPropertyTag = 5;
- public static final int k_unHmdMatrix34PropertyTag = 20;
- public static final int k_unHmdMatrix44PropertyTag = 21;
- public static final int k_unHmdVector3PropertyTag = 22;
- public static final int k_unHmdVector4PropertyTag = 23;
- public static final int k_unHiddenAreaPropertyTag = 30;
- public static final int k_unOpenVRInternalReserved_Start = 1000;
- public static final int k_unOpenVRInternalReserved_End = 10000;
- public static final int k_unMaxPropertyStringSize = 32768;
- public static final int k_unControllerStateAxisCount = 5;
- public static final long k_ulOverlayHandleInvalid = 0;
- public static final int k_unScreenshotHandleInvalid = 0;
-
-
- public static final int k_unMaxApplicationKeyLength = 128;
-
- public static final String k_pch_MimeType_HomeApp = "vr/home";
- public static final String k_pch_MimeType_GameTheater = "vr/game_theater";
-
-
- public static final int k_unVROverlayMaxKeyLength = 128;
- public static final int k_unVROverlayMaxNameLength = 128;
- public static final int k_unMaxOverlayCount = 64;
- public static final int k_unMaxOverlayIntersectionMaskPrimitivesCount = 32;
-
-
- public static final String k_pch_Controller_Component_GDC2015 = "gdc2015";
- public static final String k_pch_Controller_Component_Base = "base";
- public static final String k_pch_Controller_Component_Tip = "tip";
- public static final String k_pch_Controller_Component_HandGrip = "handgrip";
- public static final String k_pch_Controller_Component_Status = "status";
-
-
- public static final int k_unNotificationTextMaxSize = 256;
-
- public static final int k_unMaxSettingsKeyLength = 128;
-
- public static final String k_pch_SteamVR_Section = "steamvr";
- public static final String k_pch_SteamVR_RequireHmd_String = "requireHmd";
- public static final String k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver";
- public static final String k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd";
- public static final String k_pch_SteamVR_DisplayDebug_Bool = "displayDebug";
- public static final String k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe";
- public static final String k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX";
- public static final String k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY";
- public static final String k_pch_SteamVR_SendSystemButtonToAllApps_Bool = "sendSystemButtonToAllApps";
- public static final String k_pch_SteamVR_LogLevel_Int32 = "loglevel";
- public static final String k_pch_SteamVR_IPD_Float = "ipd";
- public static final String k_pch_SteamVR_Background_String = "background";
- public static final String k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection";
- public static final String k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight";
- public static final String k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius";
- public static final String k_pch_SteamVR_GridColor_String = "gridColor";
- public static final String k_pch_SteamVR_PlayAreaColor_String = "playAreaColor";
- public static final String k_pch_SteamVR_ShowStage_Bool = "showStage";
- public static final String k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
- public static final String k_pch_SteamVR_DirectMode_Bool = "directMode";
- public static final String k_pch_SteamVR_DirectModeEdidVid_Int32 = "directModeEdidVid";
- public static final String k_pch_SteamVR_DirectModeEdidPid_Int32 = "directModeEdidPid";
- public static final String k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers";
- public static final String k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees";
- public static final String k_pch_SteamVR_BaseStationPowerManagement_Bool = "basestationPowerManagement";
- public static final String k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
- public static final String k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
- public static final String k_pch_SteamVR_AllowAsyncReprojection_Bool = "allowAsyncReprojection";
- public static final String k_pch_SteamVR_AllowReprojection_Bool = "allowInterleavedReprojection";
- public static final String k_pch_SteamVR_ForceReprojection_Bool = "forceReprojection";
- public static final String k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking";
- public static final String k_pch_SteamVR_DefaultMirrorView_Int32 = "defaultMirrorView";
- public static final String k_pch_SteamVR_ShowMirrorView_Bool = "showMirrorView";
- public static final String k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry";
- public static final String k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch";
- public static final String k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch";
- public static final String k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch";
- public static final String k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard";
- public static final String k_pch_SteamVR_EnableHomeApp = "enableHomeApp";
- public static final String k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec";
- public static final String k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
- public static final String k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
- public static final String k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
- public static final String k_pch_Lighthouse_Section = "driver_lighthouse";
- public static final String k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
- public static final String k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation";
- public static final String k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug";
- public static final String k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation";
- public static final String k_pch_Lighthouse_DBHistory_Bool = "dbhistory";
- public static final String k_pch_Null_Section = "driver_null";
- public static final String k_pch_Null_SerialNumber_String = "serialNumber";
- public static final String k_pch_Null_ModelNumber_String = "modelNumber";
- public static final String k_pch_Null_WindowX_Int32 = "windowX";
- public static final String k_pch_Null_WindowY_Int32 = "windowY";
- public static final String k_pch_Null_WindowWidth_Int32 = "windowWidth";
- public static final String k_pch_Null_WindowHeight_Int32 = "windowHeight";
- public static final String k_pch_Null_RenderWidth_Int32 = "renderWidth";
- public static final String k_pch_Null_RenderHeight_Int32 = "renderHeight";
- public static final String k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons";
- public static final String k_pch_Null_DisplayFrequency_Float = "displayFrequency";
- public static final String k_pch_UserInterface_Section = "userinterface";
- public static final String k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop";
- public static final String k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray";
- public static final String k_pch_UserInterface_Screenshots_Bool = "screenshots";
- public static final String k_pch_UserInterface_ScreenshotType_Int = "screenshotType";
- public static final String k_pch_Notifications_Section = "notifications";
- public static final String k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb";
- public static final String k_pch_Keyboard_Section = "keyboard";
- public static final String k_pch_Keyboard_TutorialCompletions = "TutorialCompletions";
- public static final String k_pch_Keyboard_ScaleX = "ScaleX";
- public static final String k_pch_Keyboard_ScaleY = "ScaleY";
- public static final String k_pch_Keyboard_OffsetLeftX = "OffsetLeftX";
- public static final String k_pch_Keyboard_OffsetRightX = "OffsetRightX";
- public static final String k_pch_Keyboard_OffsetY = "OffsetY";
- public static final String k_pch_Keyboard_Smoothing = "Smoothing";
- public static final String k_pch_Perf_Section = "perfcheck";
- public static final String k_pch_Perf_HeuristicActive_Bool = "heuristicActive";
- public static final String k_pch_Perf_NotifyInHMD_Bool = "warnInHMD";
- public static final String k_pch_Perf_NotifyOnlyOnce_Bool = "warnOnlyOnce";
- public static final String k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore";
- public static final String k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit";
- public static final String k_pch_Perf_TestData_Float = "perfTestData";
- public static final String k_pch_Perf_LinuxGPUProfiling_Bool = "linuxGPUProfiling";
- public static final String k_pch_CollisionBounds_Section = "collisionBounds";
- public static final String k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle";
- public static final String k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn";
- public static final String k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn";
- public static final String k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn";
- public static final String k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance";
- public static final String k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR";
- public static final String k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG";
- public static final String k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB";
- public static final String k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA";
- public static final String k_pch_Camera_Section = "camera";
- public static final String k_pch_Camera_EnableCamera_Bool = "enableCamera";
- public static final String k_pch_Camera_EnableCameraInDashboard_Bool = "enableCameraInDashboard";
- public static final String k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds";
- public static final String k_pch_Camera_EnableCameraForRoomView_Bool = "enableCameraForRoomView";
- public static final String k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR";
- public static final String k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG";
- public static final String k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB";
- public static final String k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA";
- public static final String k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength";
- public static final String k_pch_audio_Section = "audio";
- public static final String k_pch_audio_OnPlaybackDevice_String = "onPlaybackDevice";
- public static final String k_pch_audio_OnRecordDevice_String = "onRecordDevice";
- public static final String k_pch_audio_OnPlaybackMirrorDevice_String = "onPlaybackMirrorDevice";
- public static final String k_pch_audio_OffPlaybackDevice_String = "offPlaybackDevice";
- public static final String k_pch_audio_OffRecordDevice_String = "offRecordDevice";
- public static final String k_pch_audio_VIVEHDMIGain = "viveHDMIGain";
- public static final String k_pch_Power_Section = "power";
- public static final String k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit";
- public static final String k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout";
- public static final String k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout";
- public static final String k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout";
- public static final String k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress";
- public static final String k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby";
- public static final String k_pch_Dashboard_Section = "dashboard";
- public static final String k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard";
- public static final String k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode";
- public static final String k_pch_modelskin_Section = "modelskins";
- public static final String k_pch_Driver_Enable_Bool = "enable";
-
-
- public static final String IVRApplications_Version = "FnTable:IVRApplications_006";
- public static final String IVRChaperone_Version = "FnTable:IVRChaperone_003";
- public static final String IVRChaperoneSetup_Version = "FnTable:IVRChaperoneSetup_005";
- public static final String IVRCompositor_Version = "FnTable:IVRCompositor_020";
- public static final String IVRSystem_Version = "FnTable:IVRSystem_016";
- public static final String IVRExtendedDisplay_Version = "FnTable:IVRExtendedDisplay_001";
- public static final String IVRTrackedCamera_Version = "FnTable:IVRTrackedCamera_003";
- public static final String IVROverlay_Version = "FnTable:IVROverlay_016";
- public static final String IVRRenderModels_Version = "FnTable:IVRRenderModels_005";
- public static final String IVRNotifications_Version = "FnTable:IVRNotifications_002";
- public static final String IVRSettings_Version = "FnTable:IVRSettings_002";
- public static final String IVRScreenshots_Version = "FnTable:IVRScreenshots_001";
- public static final String IVRResources_Version = "FnTable:IVRResources_001";
- public static final String IVRDriverManager_Version = "FnTable:IVRDriverManager_001";
-
+ * native declaration : headers\openvr_capi.h:239
+ * enum values
+ */
+ public static interface ETextureType {
+ /** native declaration : headers\openvr_capi.h:231 */
+ public static final int ETextureType_TextureType_Invalid = -1;
+ /** native declaration : headers\openvr_capi.h:232 */
+ public static final int ETextureType_TextureType_DirectX = 0;
+ /** native declaration : headers\openvr_capi.h:233 */
+ public static final int ETextureType_TextureType_OpenGL = 1;
+ /** native declaration : headers\openvr_capi.h:234 */
+ public static final int ETextureType_TextureType_Vulkan = 2;
+ /** native declaration : headers\openvr_capi.h:235 */
+ public static final int ETextureType_TextureType_IOSurface = 3;
+ /** native declaration : headers\openvr_capi.h:236 */
+ public static final int ETextureType_TextureType_DirectX12 = 4;
+ /** native declaration : headers\openvr_capi.h:237 */
+ public static final int ETextureType_TextureType_DXGISharedHandle = 5;
+ /** native declaration : headers\openvr_capi.h:238 */
+ public static final int ETextureType_TextureType_Metal = 6;
+ };
/**
- * Global entry points
- * Original signature : intptr_t VR_InitInternal(EVRInitError*, EVRApplicationType)
- * native declaration : headers\openvr_capi.h:1923
- * @deprecated use the safer methods {@link #VR_InitInternal(java.nio.IntBuffer, int)} and {@link #VR_InitInternal(com.sun.jna.ptr.IntByReference, int)} instead
- */
- @Deprecated
- public static native IntByReference VR_InitInternal(IntByReference peError, int eType);
+ * native declaration : headers\openvr_capi.h:244
+ * enum values
+ */
+ public static interface EColorSpace {
+ /** native declaration : headers\openvr_capi.h:241 */
+ public static final int EColorSpace_ColorSpace_Auto = 0;
+ /** native declaration : headers\openvr_capi.h:242 */
+ public static final int EColorSpace_ColorSpace_Gamma = 1;
+ /** native declaration : headers\openvr_capi.h:243 */
+ public static final int EColorSpace_ColorSpace_Linear = 2;
+ };
/**
- * Global entry points
- * Original signature : intptr_t VR_InitInternal(EVRInitError*, EVRApplicationType)
- * native declaration : headers\openvr_capi.h:1923
- */
- public static native IntByReference VR_InitInternal(IntBuffer peError, int eType);
+ * native declaration : headers\openvr_capi.h:251
+ * enum values
+ */
+ public static interface ETrackingResult {
+ /** native declaration : headers\openvr_capi.h:246 */
+ public static final int ETrackingResult_TrackingResult_Uninitialized = 1;
+ /** native declaration : headers\openvr_capi.h:247 */
+ public static final int ETrackingResult_TrackingResult_Calibrating_InProgress = 100;
+ /** native declaration : headers\openvr_capi.h:248 */
+ public static final int ETrackingResult_TrackingResult_Calibrating_OutOfRange = 101;
+ /** native declaration : headers\openvr_capi.h:249 */
+ public static final int ETrackingResult_TrackingResult_Running_OK = 200;
+ /** native declaration : headers\openvr_capi.h:250 */
+ public static final int ETrackingResult_TrackingResult_Running_OutOfRange = 201;
+ };
/**
- * Original signature : void VR_ShutdownInternal()
- * native declaration : headers\openvr_capi.h:1925
- */
- public static native void VR_ShutdownInternal();
+ * native declaration : headers\openvr_capi.h:260
+ * enum values
+ */
+ public static interface ETrackedDeviceClass {
+ /** native declaration : headers\openvr_capi.h:253 */
+ public static final int ETrackedDeviceClass_TrackedDeviceClass_Invalid = 0;
+ /** native declaration : headers\openvr_capi.h:254 */
+ public static final int ETrackedDeviceClass_TrackedDeviceClass_HMD = 1;
+ /** native declaration : headers\openvr_capi.h:255 */
+ public static final int ETrackedDeviceClass_TrackedDeviceClass_Controller = 2;
+ /** native declaration : headers\openvr_capi.h:256 */
+ public static final int ETrackedDeviceClass_TrackedDeviceClass_GenericTracker = 3;
+ /** native declaration : headers\openvr_capi.h:257 */
+ public static final int ETrackedDeviceClass_TrackedDeviceClass_TrackingReference = 4;
+ /** native declaration : headers\openvr_capi.h:258 */
+ public static final int ETrackedDeviceClass_TrackedDeviceClass_DisplayRedirect = 5;
+ /** native declaration : headers\openvr_capi.h:259 */
+ public static final int ETrackedDeviceClass_TrackedDeviceClass_Max = 6;
+ };
/**
- * Original signature : bool VR_IsHmdPresent()
- * native declaration : headers\openvr_capi.h:1927
- */
- public static native byte VR_IsHmdPresent();
+ * native declaration : headers\openvr_capi.h:267
+ * enum values
+ */
+ public static interface ETrackedControllerRole {
+ /** native declaration : headers\openvr_capi.h:262 */
+ public static final int ETrackedControllerRole_TrackedControllerRole_Invalid = 0;
+ /** native declaration : headers\openvr_capi.h:263 */
+ public static final int ETrackedControllerRole_TrackedControllerRole_LeftHand = 1;
+ /** native declaration : headers\openvr_capi.h:264 */
+ public static final int ETrackedControllerRole_TrackedControllerRole_RightHand = 2;
+ /** native declaration : headers\openvr_capi.h:265 */
+ public static final int ETrackedControllerRole_TrackedControllerRole_OptOut = 3;
+ /** native declaration : headers\openvr_capi.h:266 */
+ public static final int ETrackedControllerRole_TrackedControllerRole_Max = 4;
+ };
/**
- * Original signature : intptr_t VR_GetGenericInterface(const char*, EVRInitError*)
- * native declaration : headers\openvr_capi.h:1929
- * @deprecated use the safer methods {@link #VR_GetGenericInterface(java.lang.String, java.nio.IntBuffer)} and {@link #VR_GetGenericInterface(com.sun.jna.Pointer, com.sun.jna.ptr.IntByReference)} instead
- */
- @Deprecated
- public static native IntByReference VR_GetGenericInterface(Pointer pchInterfaceVersion, IntByReference peError);
+ * native declaration : headers\openvr_capi.h:272
+ * enum values
+ */
+ public static interface ETrackingUniverseOrigin {
+ /** native declaration : headers\openvr_capi.h:269 */
+ public static final int ETrackingUniverseOrigin_TrackingUniverseSeated = 0;
+ /** native declaration : headers\openvr_capi.h:270 */
+ public static final int ETrackingUniverseOrigin_TrackingUniverseStanding = 1;
+ /** native declaration : headers\openvr_capi.h:271 */
+ public static final int ETrackingUniverseOrigin_TrackingUniverseRawAndUncalibrated = 2;
+ };
/**
- * Original signature : intptr_t VR_GetGenericInterface(const char*, EVRInitError*)
- * native declaration : headers\openvr_capi.h:1929
- */
- public static native IntByReference VR_GetGenericInterface(String pchInterfaceVersion, IntByReference peError);
+ * native declaration : headers\openvr_capi.h:432
+ * enum values
+ */
+ public static interface ETrackedDeviceProperty {
+ /** native declaration : headers\openvr_capi.h:274 */
+ public static final int ETrackedDeviceProperty_Prop_Invalid = 0;
+ /** native declaration : headers\openvr_capi.h:275 */
+ public static final int ETrackedDeviceProperty_Prop_TrackingSystemName_String = 1000;
+ /** native declaration : headers\openvr_capi.h:276 */
+ public static final int ETrackedDeviceProperty_Prop_ModelNumber_String = 1001;
+ /** native declaration : headers\openvr_capi.h:277 */
+ public static final int ETrackedDeviceProperty_Prop_SerialNumber_String = 1002;
+ /** native declaration : headers\openvr_capi.h:278 */
+ public static final int ETrackedDeviceProperty_Prop_RenderModelName_String = 1003;
+ /** native declaration : headers\openvr_capi.h:279 */
+ public static final int ETrackedDeviceProperty_Prop_WillDriftInYaw_Bool = 1004;
+ /** native declaration : headers\openvr_capi.h:280 */
+ public static final int ETrackedDeviceProperty_Prop_ManufacturerName_String = 1005;
+ /** native declaration : headers\openvr_capi.h:281 */
+ public static final int ETrackedDeviceProperty_Prop_TrackingFirmwareVersion_String = 1006;
+ /** native declaration : headers\openvr_capi.h:282 */
+ public static final int ETrackedDeviceProperty_Prop_HardwareRevision_String = 1007;
+ /** native declaration : headers\openvr_capi.h:283 */
+ public static final int ETrackedDeviceProperty_Prop_AllWirelessDongleDescriptions_String = 1008;
+ /** native declaration : headers\openvr_capi.h:284 */
+ public static final int ETrackedDeviceProperty_Prop_ConnectedWirelessDongle_String = 1009;
+ /** native declaration : headers\openvr_capi.h:285 */
+ public static final int ETrackedDeviceProperty_Prop_DeviceIsWireless_Bool = 1010;
+ /** native declaration : headers\openvr_capi.h:286 */
+ public static final int ETrackedDeviceProperty_Prop_DeviceIsCharging_Bool = 1011;
+ /** native declaration : headers\openvr_capi.h:287 */
+ public static final int ETrackedDeviceProperty_Prop_DeviceBatteryPercentage_Float = 1012;
+ /** native declaration : headers\openvr_capi.h:288 */
+ public static final int ETrackedDeviceProperty_Prop_StatusDisplayTransform_Matrix34 = 1013;
+ /** native declaration : headers\openvr_capi.h:289 */
+ public static final int ETrackedDeviceProperty_Prop_Firmware_UpdateAvailable_Bool = 1014;
+ /** native declaration : headers\openvr_capi.h:290 */
+ public static final int ETrackedDeviceProperty_Prop_Firmware_ManualUpdate_Bool = 1015;
+ /** native declaration : headers\openvr_capi.h:291 */
+ public static final int ETrackedDeviceProperty_Prop_Firmware_ManualUpdateURL_String = 1016;
+ /** native declaration : headers\openvr_capi.h:292 */
+ public static final int ETrackedDeviceProperty_Prop_HardwareRevision_Uint64 = 1017;
+ /** native declaration : headers\openvr_capi.h:293 */
+ public static final int ETrackedDeviceProperty_Prop_FirmwareVersion_Uint64 = 1018;
+ /** native declaration : headers\openvr_capi.h:294 */
+ public static final int ETrackedDeviceProperty_Prop_FPGAVersion_Uint64 = 1019;
+ /** native declaration : headers\openvr_capi.h:295 */
+ public static final int ETrackedDeviceProperty_Prop_VRCVersion_Uint64 = 1020;
+ /** native declaration : headers\openvr_capi.h:296 */
+ public static final int ETrackedDeviceProperty_Prop_RadioVersion_Uint64 = 1021;
+ /** native declaration : headers\openvr_capi.h:297 */
+ public static final int ETrackedDeviceProperty_Prop_DongleVersion_Uint64 = 1022;
+ /** native declaration : headers\openvr_capi.h:298 */
+ public static final int ETrackedDeviceProperty_Prop_BlockServerShutdown_Bool = 1023;
+ /** native declaration : headers\openvr_capi.h:299 */
+ public static final int ETrackedDeviceProperty_Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024;
+ /** native declaration : headers\openvr_capi.h:300 */
+ public static final int ETrackedDeviceProperty_Prop_ContainsProximitySensor_Bool = 1025;
+ /** native declaration : headers\openvr_capi.h:301 */
+ public static final int ETrackedDeviceProperty_Prop_DeviceProvidesBatteryStatus_Bool = 1026;
+ /** native declaration : headers\openvr_capi.h:302 */
+ public static final int ETrackedDeviceProperty_Prop_DeviceCanPowerOff_Bool = 1027;
+ /** native declaration : headers\openvr_capi.h:303 */
+ public static final int ETrackedDeviceProperty_Prop_Firmware_ProgrammingTarget_String = 1028;
+ /** native declaration : headers\openvr_capi.h:304 */
+ public static final int ETrackedDeviceProperty_Prop_DeviceClass_Int32 = 1029;
+ /** native declaration : headers\openvr_capi.h:305 */
+ public static final int ETrackedDeviceProperty_Prop_HasCamera_Bool = 1030;
+ /** native declaration : headers\openvr_capi.h:306 */
+ public static final int ETrackedDeviceProperty_Prop_DriverVersion_String = 1031;
+ /** native declaration : headers\openvr_capi.h:307 */
+ public static final int ETrackedDeviceProperty_Prop_Firmware_ForceUpdateRequired_Bool = 1032;
+ /** native declaration : headers\openvr_capi.h:308 */
+ public static final int ETrackedDeviceProperty_Prop_ViveSystemButtonFixRequired_Bool = 1033;
+ /** native declaration : headers\openvr_capi.h:309 */
+ public static final int ETrackedDeviceProperty_Prop_ParentDriver_Uint64 = 1034;
+ /** native declaration : headers\openvr_capi.h:310 */
+ public static final int ETrackedDeviceProperty_Prop_ResourceRoot_String = 1035;
+ /** native declaration : headers\openvr_capi.h:311 */
+ public static final int ETrackedDeviceProperty_Prop_RegisteredDeviceType_String = 1036;
+ /** native declaration : headers\openvr_capi.h:312 */
+ public static final int ETrackedDeviceProperty_Prop_InputProfilePath_String = 1037;
+ /** native declaration : headers\openvr_capi.h:313 */
+ public static final int ETrackedDeviceProperty_Prop_NeverTracked_Bool = 1038;
+ /** native declaration : headers\openvr_capi.h:314 */
+ public static final int ETrackedDeviceProperty_Prop_NumCameras_Int32 = 1039;
+ /** native declaration : headers\openvr_capi.h:315 */
+ public static final int ETrackedDeviceProperty_Prop_CameraFrameLayout_Int32 = 1040;
+ /** native declaration : headers\openvr_capi.h:316 */
+ public static final int ETrackedDeviceProperty_Prop_ReportsTimeSinceVSync_Bool = 2000;
+ /** native declaration : headers\openvr_capi.h:317 */
+ public static final int ETrackedDeviceProperty_Prop_SecondsFromVsyncToPhotons_Float = 2001;
+ /** native declaration : headers\openvr_capi.h:318 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayFrequency_Float = 2002;
+ /** native declaration : headers\openvr_capi.h:319 */
+ public static final int ETrackedDeviceProperty_Prop_UserIpdMeters_Float = 2003;
+ /** native declaration : headers\openvr_capi.h:320 */
+ public static final int ETrackedDeviceProperty_Prop_CurrentUniverseId_Uint64 = 2004;
+ /** native declaration : headers\openvr_capi.h:321 */
+ public static final int ETrackedDeviceProperty_Prop_PreviousUniverseId_Uint64 = 2005;
+ /** native declaration : headers\openvr_capi.h:322 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayFirmwareVersion_Uint64 = 2006;
+ /** native declaration : headers\openvr_capi.h:323 */
+ public static final int ETrackedDeviceProperty_Prop_IsOnDesktop_Bool = 2007;
+ /** native declaration : headers\openvr_capi.h:324 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayMCType_Int32 = 2008;
+ /** native declaration : headers\openvr_capi.h:325 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayMCOffset_Float = 2009;
+ /** native declaration : headers\openvr_capi.h:326 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayMCScale_Float = 2010;
+ /** native declaration : headers\openvr_capi.h:327 */
+ public static final int ETrackedDeviceProperty_Prop_EdidVendorID_Int32 = 2011;
+ /** native declaration : headers\openvr_capi.h:328 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayMCImageLeft_String = 2012;
+ /** native declaration : headers\openvr_capi.h:329 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayMCImageRight_String = 2013;
+ /** native declaration : headers\openvr_capi.h:330 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayGCBlackClamp_Float = 2014;
+ /** native declaration : headers\openvr_capi.h:331 */
+ public static final int ETrackedDeviceProperty_Prop_EdidProductID_Int32 = 2015;
+ /** native declaration : headers\openvr_capi.h:332 */
+ public static final int ETrackedDeviceProperty_Prop_CameraToHeadTransform_Matrix34 = 2016;
+ /** native declaration : headers\openvr_capi.h:333 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayGCType_Int32 = 2017;
+ /** native declaration : headers\openvr_capi.h:334 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayGCOffset_Float = 2018;
+ /** native declaration : headers\openvr_capi.h:335 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayGCScale_Float = 2019;
+ /** native declaration : headers\openvr_capi.h:336 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayGCPrescale_Float = 2020;
+ /** native declaration : headers\openvr_capi.h:337 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayGCImage_String = 2021;
+ /** native declaration : headers\openvr_capi.h:338 */
+ public static final int ETrackedDeviceProperty_Prop_LensCenterLeftU_Float = 2022;
+ /** native declaration : headers\openvr_capi.h:339 */
+ public static final int ETrackedDeviceProperty_Prop_LensCenterLeftV_Float = 2023;
+ /** native declaration : headers\openvr_capi.h:340 */
+ public static final int ETrackedDeviceProperty_Prop_LensCenterRightU_Float = 2024;
+ /** native declaration : headers\openvr_capi.h:341 */
+ public static final int ETrackedDeviceProperty_Prop_LensCenterRightV_Float = 2025;
+ /** native declaration : headers\openvr_capi.h:342 */
+ public static final int ETrackedDeviceProperty_Prop_UserHeadToEyeDepthMeters_Float = 2026;
+ /** native declaration : headers\openvr_capi.h:343 */
+ public static final int ETrackedDeviceProperty_Prop_CameraFirmwareVersion_Uint64 = 2027;
+ /** native declaration : headers\openvr_capi.h:344 */
+ public static final int ETrackedDeviceProperty_Prop_CameraFirmwareDescription_String = 2028;
+ /** native declaration : headers\openvr_capi.h:345 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayFPGAVersion_Uint64 = 2029;
+ /** native declaration : headers\openvr_capi.h:346 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayBootloaderVersion_Uint64 = 2030;
+ /** native declaration : headers\openvr_capi.h:347 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayHardwareVersion_Uint64 = 2031;
+ /** native declaration : headers\openvr_capi.h:348 */
+ public static final int ETrackedDeviceProperty_Prop_AudioFirmwareVersion_Uint64 = 2032;
+ /** native declaration : headers\openvr_capi.h:349 */
+ public static final int ETrackedDeviceProperty_Prop_CameraCompatibilityMode_Int32 = 2033;
+ /** native declaration : headers\openvr_capi.h:350 */
+ public static final int ETrackedDeviceProperty_Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034;
+ /** native declaration : headers\openvr_capi.h:351 */
+ public static final int ETrackedDeviceProperty_Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035;
+ /** native declaration : headers\openvr_capi.h:352 */
+ public static final int ETrackedDeviceProperty_Prop_DisplaySuppressed_Bool = 2036;
+ /** native declaration : headers\openvr_capi.h:353 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayAllowNightMode_Bool = 2037;
+ /** native declaration : headers\openvr_capi.h:354 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayMCImageWidth_Int32 = 2038;
+ /** native declaration : headers\openvr_capi.h:355 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayMCImageHeight_Int32 = 2039;
+ /** native declaration : headers\openvr_capi.h:356 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayMCImageNumChannels_Int32 = 2040;
+ /** native declaration : headers\openvr_capi.h:357 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayMCImageData_Binary = 2041;
+ /** native declaration : headers\openvr_capi.h:358 */
+ public static final int ETrackedDeviceProperty_Prop_SecondsFromPhotonsToVblank_Float = 2042;
+ /** native declaration : headers\openvr_capi.h:359 */
+ public static final int ETrackedDeviceProperty_Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043;
+ /** native declaration : headers\openvr_capi.h:360 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayDebugMode_Bool = 2044;
+ /** native declaration : headers\openvr_capi.h:361 */
+ public static final int ETrackedDeviceProperty_Prop_GraphicsAdapterLuid_Uint64 = 2045;
+ /** native declaration : headers\openvr_capi.h:362 */
+ public static final int ETrackedDeviceProperty_Prop_DriverProvidedChaperonePath_String = 2048;
+ /** native declaration : headers\openvr_capi.h:363 */
+ public static final int ETrackedDeviceProperty_Prop_ExpectedTrackingReferenceCount_Int32 = 2049;
+ /** native declaration : headers\openvr_capi.h:364 */
+ public static final int ETrackedDeviceProperty_Prop_ExpectedControllerCount_Int32 = 2050;
+ /** native declaration : headers\openvr_capi.h:365 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathControllerLeftDeviceOff_String = 2051;
+ /** native declaration : headers\openvr_capi.h:366 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathControllerRightDeviceOff_String = 2052;
+ /** native declaration : headers\openvr_capi.h:367 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053;
+ /** native declaration : headers\openvr_capi.h:368 */
+ public static final int ETrackedDeviceProperty_Prop_DoNotApplyPrediction_Bool = 2054;
+ /** native declaration : headers\openvr_capi.h:369 */
+ public static final int ETrackedDeviceProperty_Prop_CameraToHeadTransforms_Matrix34_Array = 2055;
+ /** native declaration : headers\openvr_capi.h:370 */
+ public static final int ETrackedDeviceProperty_Prop_DistortionMeshResolution_Int32 = 2056;
+ /** native declaration : headers\openvr_capi.h:371 */
+ public static final int ETrackedDeviceProperty_Prop_DriverIsDrawingControllers_Bool = 2057;
+ /** native declaration : headers\openvr_capi.h:372 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestsApplicationPause_Bool = 2058;
+ /** native declaration : headers\openvr_capi.h:373 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestsReducedRendering_Bool = 2059;
+ /** native declaration : headers\openvr_capi.h:374 */
+ public static final int ETrackedDeviceProperty_Prop_MinimumIpdStepMeters_Float = 2060;
+ /** native declaration : headers\openvr_capi.h:375 */
+ public static final int ETrackedDeviceProperty_Prop_AudioBridgeFirmwareVersion_Uint64 = 2061;
+ /** native declaration : headers\openvr_capi.h:376 */
+ public static final int ETrackedDeviceProperty_Prop_ImageBridgeFirmwareVersion_Uint64 = 2062;
+ /** native declaration : headers\openvr_capi.h:377 */
+ public static final int ETrackedDeviceProperty_Prop_ImuToHeadTransform_Matrix34 = 2063;
+ /** native declaration : headers\openvr_capi.h:378 */
+ public static final int ETrackedDeviceProperty_Prop_ImuFactoryGyroBias_Vector3 = 2064;
+ /** native declaration : headers\openvr_capi.h:379 */
+ public static final int ETrackedDeviceProperty_Prop_ImuFactoryGyroScale_Vector3 = 2065;
+ /** native declaration : headers\openvr_capi.h:380 */
+ public static final int ETrackedDeviceProperty_Prop_ImuFactoryAccelerometerBias_Vector3 = 2066;
+ /** native declaration : headers\openvr_capi.h:381 */
+ public static final int ETrackedDeviceProperty_Prop_ImuFactoryAccelerometerScale_Vector3 = 2067;
+ /** native declaration : headers\openvr_capi.h:382 */
+ public static final int ETrackedDeviceProperty_Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069;
+ /** native declaration : headers\openvr_capi.h:383 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200;
+ /** native declaration : headers\openvr_capi.h:384 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201;
+ /** native declaration : headers\openvr_capi.h:385 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202;
+ /** native declaration : headers\openvr_capi.h:386 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203;
+ /** native declaration : headers\openvr_capi.h:387 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204;
+ /** native declaration : headers\openvr_capi.h:388 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205;
+ /** native declaration : headers\openvr_capi.h:389 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206;
+ /** native declaration : headers\openvr_capi.h:390 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207;
+ /** native declaration : headers\openvr_capi.h:391 */
+ public static final int ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208;
+ /** native declaration : headers\openvr_capi.h:392 */
+ public static final int ETrackedDeviceProperty_Prop_AttachedDeviceId_String = 3000;
+ /** native declaration : headers\openvr_capi.h:393 */
+ public static final int ETrackedDeviceProperty_Prop_SupportedButtons_Uint64 = 3001;
+ /** native declaration : headers\openvr_capi.h:394 */
+ public static final int ETrackedDeviceProperty_Prop_Axis0Type_Int32 = 3002;
+ /** native declaration : headers\openvr_capi.h:395 */
+ public static final int ETrackedDeviceProperty_Prop_Axis1Type_Int32 = 3003;
+ /** native declaration : headers\openvr_capi.h:396 */
+ public static final int ETrackedDeviceProperty_Prop_Axis2Type_Int32 = 3004;
+ /** native declaration : headers\openvr_capi.h:397 */
+ public static final int ETrackedDeviceProperty_Prop_Axis3Type_Int32 = 3005;
+ /** native declaration : headers\openvr_capi.h:398 */
+ public static final int ETrackedDeviceProperty_Prop_Axis4Type_Int32 = 3006;
+ /** native declaration : headers\openvr_capi.h:399 */
+ public static final int ETrackedDeviceProperty_Prop_ControllerRoleHint_Int32 = 3007;
+ /** native declaration : headers\openvr_capi.h:400 */
+ public static final int ETrackedDeviceProperty_Prop_FieldOfViewLeftDegrees_Float = 4000;
+ /** native declaration : headers\openvr_capi.h:401 */
+ public static final int ETrackedDeviceProperty_Prop_FieldOfViewRightDegrees_Float = 4001;
+ /** native declaration : headers\openvr_capi.h:402 */
+ public static final int ETrackedDeviceProperty_Prop_FieldOfViewTopDegrees_Float = 4002;
+ /** native declaration : headers\openvr_capi.h:403 */
+ public static final int ETrackedDeviceProperty_Prop_FieldOfViewBottomDegrees_Float = 4003;
+ /** native declaration : headers\openvr_capi.h:404 */
+ public static final int ETrackedDeviceProperty_Prop_TrackingRangeMinimumMeters_Float = 4004;
+ /** native declaration : headers\openvr_capi.h:405 */
+ public static final int ETrackedDeviceProperty_Prop_TrackingRangeMaximumMeters_Float = 4005;
+ /** native declaration : headers\openvr_capi.h:406 */
+ public static final int ETrackedDeviceProperty_Prop_ModeLabel_String = 4006;
+ /** native declaration : headers\openvr_capi.h:407 */
+ public static final int ETrackedDeviceProperty_Prop_IconPathName_String = 5000;
+ /** native declaration : headers\openvr_capi.h:408 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceOff_String = 5001;
+ /** native declaration : headers\openvr_capi.h:409 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearching_String = 5002;
+ /** native declaration : headers\openvr_capi.h:410 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceSearchingAlert_String = 5003;
+ /** native declaration : headers\openvr_capi.h:411 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceReady_String = 5004;
+ /** native declaration : headers\openvr_capi.h:412 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceReadyAlert_String = 5005;
+ /** native declaration : headers\openvr_capi.h:413 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceNotReady_String = 5006;
+ /** native declaration : headers\openvr_capi.h:414 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceStandby_String = 5007;
+ /** native declaration : headers\openvr_capi.h:415 */
+ public static final int ETrackedDeviceProperty_Prop_NamedIconPathDeviceAlertLow_String = 5008;
+ /** native declaration : headers\openvr_capi.h:416 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_Start = 5100;
+ /** native declaration : headers\openvr_capi.h:417 */
+ public static final int ETrackedDeviceProperty_Prop_DisplayHiddenArea_Binary_End = 5150;
+ /** native declaration : headers\openvr_capi.h:418 */
+ public static final int ETrackedDeviceProperty_Prop_ParentContainer = 5151;
+ /** native declaration : headers\openvr_capi.h:419 */
+ public static final int ETrackedDeviceProperty_Prop_UserConfigPath_String = 6000;
+ /** native declaration : headers\openvr_capi.h:420 */
+ public static final int ETrackedDeviceProperty_Prop_InstallPath_String = 6001;
+ /** native declaration : headers\openvr_capi.h:421 */
+ public static final int ETrackedDeviceProperty_Prop_HasDisplayComponent_Bool = 6002;
+ /** native declaration : headers\openvr_capi.h:422 */
+ public static final int ETrackedDeviceProperty_Prop_HasControllerComponent_Bool = 6003;
+ /** native declaration : headers\openvr_capi.h:423 */
+ public static final int ETrackedDeviceProperty_Prop_HasCameraComponent_Bool = 6004;
+ /** native declaration : headers\openvr_capi.h:424 */
+ public static final int ETrackedDeviceProperty_Prop_HasDriverDirectModeComponent_Bool = 6005;
+ /** native declaration : headers\openvr_capi.h:425 */
+ public static final int ETrackedDeviceProperty_Prop_HasVirtualDisplayComponent_Bool = 6006;
+ /** native declaration : headers\openvr_capi.h:426 */
+ public static final int ETrackedDeviceProperty_Prop_HasSpatialAnchorsSupport_Bool = 6007;
+ /** native declaration : headers\openvr_capi.h:427 */
+ public static final int ETrackedDeviceProperty_Prop_ControllerType_String = 7000;
+ /** native declaration : headers\openvr_capi.h:428 */
+ public static final int ETrackedDeviceProperty_Prop_LegacyInputProfile_String = 7001;
+ /** native declaration : headers\openvr_capi.h:429 */
+ public static final int ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_Start = 10000;
+ /** native declaration : headers\openvr_capi.h:430 */
+ public static final int ETrackedDeviceProperty_Prop_VendorSpecific_Reserved_End = 10999;
+ /** native declaration : headers\openvr_capi.h:431 */
+ public static final int ETrackedDeviceProperty_Prop_TrackedDeviceProperty_Max = 1000000;
+ };
/**
- * Original signature : bool VR_IsRuntimeInstalled()
- * native declaration : headers\openvr_capi.h:1931
- */
- public static native byte VR_IsRuntimeInstalled();
+ * native declaration : headers\openvr_capi.h:447
+ * enum values
+ */
+ public static interface ETrackedPropertyError {
+ /** native declaration : headers\openvr_capi.h:434 */
+ public static final int ETrackedPropertyError_TrackedProp_Success = 0;
+ /** native declaration : headers\openvr_capi.h:435 */
+ public static final int ETrackedPropertyError_TrackedProp_WrongDataType = 1;
+ /** native declaration : headers\openvr_capi.h:436 */
+ public static final int ETrackedPropertyError_TrackedProp_WrongDeviceClass = 2;
+ /** native declaration : headers\openvr_capi.h:437 */
+ public static final int ETrackedPropertyError_TrackedProp_BufferTooSmall = 3;
+ /** native declaration : headers\openvr_capi.h:438 */
+ public static final int ETrackedPropertyError_TrackedProp_UnknownProperty = 4;
+ /** native declaration : headers\openvr_capi.h:439 */
+ public static final int ETrackedPropertyError_TrackedProp_InvalidDevice = 5;
+ /** native declaration : headers\openvr_capi.h:440 */
+ public static final int ETrackedPropertyError_TrackedProp_CouldNotContactServer = 6;
+ /** native declaration : headers\openvr_capi.h:441 */
+ public static final int ETrackedPropertyError_TrackedProp_ValueNotProvidedByDevice = 7;
+ /** native declaration : headers\openvr_capi.h:442 */
+ public static final int ETrackedPropertyError_TrackedProp_StringExceedsMaximumLength = 8;
+ /** native declaration : headers\openvr_capi.h:443 */
+ public static final int ETrackedPropertyError_TrackedProp_NotYetAvailable = 9;
+ /** native declaration : headers\openvr_capi.h:444 */
+ public static final int ETrackedPropertyError_TrackedProp_PermissionDenied = 10;
+ /** native declaration : headers\openvr_capi.h:445 */
+ public static final int ETrackedPropertyError_TrackedProp_InvalidOperation = 11;
+ /** native declaration : headers\openvr_capi.h:446 */
+ public static final int ETrackedPropertyError_TrackedProp_CannotWriteToWildcards = 12;
+ };
/**
- * Original signature : char* VR_GetVRInitErrorAsSymbol(EVRInitError)
- * native declaration : headers\openvr_capi.h:1933
- */
- public static native Pointer VR_GetVRInitErrorAsSymbol(int error);
+ * native declaration : headers\openvr_capi.h:455
+ * enum values
+ */
+ public static interface EVRSubmitFlags {
+ /** native declaration : headers\openvr_capi.h:449 */
+ public static final int EVRSubmitFlags_Submit_Default = 0;
+ /** native declaration : headers\openvr_capi.h:450 */
+ public static final int EVRSubmitFlags_Submit_LensDistortionAlreadyApplied = 1;
+ /** native declaration : headers\openvr_capi.h:451 */
+ public static final int EVRSubmitFlags_Submit_GlRenderBuffer = 2;
+ /** native declaration : headers\openvr_capi.h:452 */
+ public static final int EVRSubmitFlags_Submit_Reserved = 4;
+ /** native declaration : headers\openvr_capi.h:453 */
+ public static final int EVRSubmitFlags_Submit_TextureWithPose = 8;
+ /** native declaration : headers\openvr_capi.h:454 */
+ public static final int EVRSubmitFlags_Submit_TextureWithDepth = 16;
+ };
/**
- * Original signature : char* VR_GetVRInitErrorAsEnglishDescription(EVRInitError)
- * native declaration : headers\openvr_capi.h:1935
- */
- public static native Pointer VR_GetVRInitErrorAsEnglishDescription(int error);
- public static class VkQueue_T extends PointerType {
- public VkQueue_T(Pointer address) {
- super(address);
- }
- public VkQueue_T() {
- super();
- }
- };
- public static class VkPhysicalDevice_T extends PointerType {
- public VkPhysicalDevice_T(Pointer address) {
- super(address);
- }
- public VkPhysicalDevice_T() {
- super();
- }
- };
- public static class VkInstance_T extends PointerType {
- public VkInstance_T(Pointer address) {
- super(address);
- }
- public VkInstance_T() {
- super();
- }
- };
- public static class ID3D12CommandQueue extends PointerType {
- public ID3D12CommandQueue(Pointer address) {
- super(address);
- }
- public ID3D12CommandQueue() {
- super();
- }
- };
- public static class ID3D12Resource extends PointerType {
- public ID3D12Resource(Pointer address) {
- super(address);
- }
- public ID3D12Resource() {
- super();
- }
- };
- public static class VkDevice_T extends PointerType {
- public VkDevice_T(Pointer address) {
- super(address);
- }
- public VkDevice_T() {
- super();
- }
- };
+ * native declaration : headers\openvr_capi.h:466
+ * enum values
+ */
+ public static interface EVRState {
+ /** native declaration : headers\openvr_capi.h:457 */
+ public static final int EVRState_VRState_Undefined = -1;
+ /** native declaration : headers\openvr_capi.h:458 */
+ public static final int EVRState_VRState_Off = 0;
+ /** native declaration : headers\openvr_capi.h:459 */
+ public static final int EVRState_VRState_Searching = 1;
+ /** native declaration : headers\openvr_capi.h:460 */
+ public static final int EVRState_VRState_Searching_Alert = 2;
+ /** native declaration : headers\openvr_capi.h:461 */
+ public static final int EVRState_VRState_Ready = 3;
+ /** native declaration : headers\openvr_capi.h:462 */
+ public static final int EVRState_VRState_Ready_Alert = 4;
+ /** native declaration : headers\openvr_capi.h:463 */
+ public static final int EVRState_VRState_NotReady = 5;
+ /** native declaration : headers\openvr_capi.h:464 */
+ public static final int EVRState_VRState_Standby = 6;
+ /** native declaration : headers\openvr_capi.h:465 */
+ public static final int EVRState_VRState_Ready_Alert_Low = 7;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:616
+ * enum values
+ */
+ public static interface EVREventType {
+ /** native declaration : headers\openvr_capi.h:468 */
+ public static final int EVREventType_VREvent_None = 0;
+ /** native declaration : headers\openvr_capi.h:469 */
+ public static final int EVREventType_VREvent_TrackedDeviceActivated = 100;
+ /** native declaration : headers\openvr_capi.h:470 */
+ public static final int EVREventType_VREvent_TrackedDeviceDeactivated = 101;
+ /** native declaration : headers\openvr_capi.h:471 */
+ public static final int EVREventType_VREvent_TrackedDeviceUpdated = 102;
+ /** native declaration : headers\openvr_capi.h:472 */
+ public static final int EVREventType_VREvent_TrackedDeviceUserInteractionStarted = 103;
+ /** native declaration : headers\openvr_capi.h:473 */
+ public static final int EVREventType_VREvent_TrackedDeviceUserInteractionEnded = 104;
+ /** native declaration : headers\openvr_capi.h:474 */
+ public static final int EVREventType_VREvent_IpdChanged = 105;
+ /** native declaration : headers\openvr_capi.h:475 */
+ public static final int EVREventType_VREvent_EnterStandbyMode = 106;
+ /** native declaration : headers\openvr_capi.h:476 */
+ public static final int EVREventType_VREvent_LeaveStandbyMode = 107;
+ /** native declaration : headers\openvr_capi.h:477 */
+ public static final int EVREventType_VREvent_TrackedDeviceRoleChanged = 108;
+ /** native declaration : headers\openvr_capi.h:478 */
+ public static final int EVREventType_VREvent_WatchdogWakeUpRequested = 109;
+ /** native declaration : headers\openvr_capi.h:479 */
+ public static final int EVREventType_VREvent_LensDistortionChanged = 110;
+ /** native declaration : headers\openvr_capi.h:480 */
+ public static final int EVREventType_VREvent_PropertyChanged = 111;
+ /** native declaration : headers\openvr_capi.h:481 */
+ public static final int EVREventType_VREvent_WirelessDisconnect = 112;
+ /** native declaration : headers\openvr_capi.h:482 */
+ public static final int EVREventType_VREvent_WirelessReconnect = 113;
+ /** native declaration : headers\openvr_capi.h:483 */
+ public static final int EVREventType_VREvent_ButtonPress = 200;
+ /** native declaration : headers\openvr_capi.h:484 */
+ public static final int EVREventType_VREvent_ButtonUnpress = 201;
+ /** native declaration : headers\openvr_capi.h:485 */
+ public static final int EVREventType_VREvent_ButtonTouch = 202;
+ /** native declaration : headers\openvr_capi.h:486 */
+ public static final int EVREventType_VREvent_ButtonUntouch = 203;
+ /** native declaration : headers\openvr_capi.h:487 */
+ public static final int EVREventType_VREvent_DualAnalog_Press = 250;
+ /** native declaration : headers\openvr_capi.h:488 */
+ public static final int EVREventType_VREvent_DualAnalog_Unpress = 251;
+ /** native declaration : headers\openvr_capi.h:489 */
+ public static final int EVREventType_VREvent_DualAnalog_Touch = 252;
+ /** native declaration : headers\openvr_capi.h:490 */
+ public static final int EVREventType_VREvent_DualAnalog_Untouch = 253;
+ /** native declaration : headers\openvr_capi.h:491 */
+ public static final int EVREventType_VREvent_DualAnalog_Move = 254;
+ /** native declaration : headers\openvr_capi.h:492 */
+ public static final int EVREventType_VREvent_DualAnalog_ModeSwitch1 = 255;
+ /** native declaration : headers\openvr_capi.h:493 */
+ public static final int EVREventType_VREvent_DualAnalog_ModeSwitch2 = 256;
+ /** native declaration : headers\openvr_capi.h:494 */
+ public static final int EVREventType_VREvent_DualAnalog_Cancel = 257;
+ /** native declaration : headers\openvr_capi.h:495 */
+ public static final int EVREventType_VREvent_MouseMove = 300;
+ /** native declaration : headers\openvr_capi.h:496 */
+ public static final int EVREventType_VREvent_MouseButtonDown = 301;
+ /** native declaration : headers\openvr_capi.h:497 */
+ public static final int EVREventType_VREvent_MouseButtonUp = 302;
+ /** native declaration : headers\openvr_capi.h:498 */
+ public static final int EVREventType_VREvent_FocusEnter = 303;
+ /** native declaration : headers\openvr_capi.h:499 */
+ public static final int EVREventType_VREvent_FocusLeave = 304;
+ /** native declaration : headers\openvr_capi.h:500 */
+ public static final int EVREventType_VREvent_Scroll = 305;
+ /** native declaration : headers\openvr_capi.h:501 */
+ public static final int EVREventType_VREvent_TouchPadMove = 306;
+ /** native declaration : headers\openvr_capi.h:502 */
+ public static final int EVREventType_VREvent_OverlayFocusChanged = 307;
+ /** native declaration : headers\openvr_capi.h:503 */
+ public static final int EVREventType_VREvent_InputFocusCaptured = 400;
+ /** native declaration : headers\openvr_capi.h:504 */
+ public static final int EVREventType_VREvent_InputFocusReleased = 401;
+ /** native declaration : headers\openvr_capi.h:505 */
+ public static final int EVREventType_VREvent_SceneFocusLost = 402;
+ /** native declaration : headers\openvr_capi.h:506 */
+ public static final int EVREventType_VREvent_SceneFocusGained = 403;
+ /** native declaration : headers\openvr_capi.h:507 */
+ public static final int EVREventType_VREvent_SceneApplicationChanged = 404;
+ /** native declaration : headers\openvr_capi.h:508 */
+ public static final int EVREventType_VREvent_SceneFocusChanged = 405;
+ /** native declaration : headers\openvr_capi.h:509 */
+ public static final int EVREventType_VREvent_InputFocusChanged = 406;
+ /** native declaration : headers\openvr_capi.h:510 */
+ public static final int EVREventType_VREvent_SceneApplicationSecondaryRenderingStarted = 407;
+ /** native declaration : headers\openvr_capi.h:511 */
+ public static final int EVREventType_VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408;
+ /** native declaration : headers\openvr_capi.h:512 */
+ public static final int EVREventType_VREvent_ActionBindingReloaded = 409;
+ /** native declaration : headers\openvr_capi.h:513 */
+ public static final int EVREventType_VREvent_HideRenderModels = 410;
+ /** native declaration : headers\openvr_capi.h:514 */
+ public static final int EVREventType_VREvent_ShowRenderModels = 411;
+ /** native declaration : headers\openvr_capi.h:515 */
+ public static final int EVREventType_VREvent_ConsoleOpened = 420;
+ /** native declaration : headers\openvr_capi.h:516 */
+ public static final int EVREventType_VREvent_ConsoleClosed = 421;
+ /** native declaration : headers\openvr_capi.h:517 */
+ public static final int EVREventType_VREvent_OverlayShown = 500;
+ /** native declaration : headers\openvr_capi.h:518 */
+ public static final int EVREventType_VREvent_OverlayHidden = 501;
+ /** native declaration : headers\openvr_capi.h:519 */
+ public static final int EVREventType_VREvent_DashboardActivated = 502;
+ /** native declaration : headers\openvr_capi.h:520 */
+ public static final int EVREventType_VREvent_DashboardDeactivated = 503;
+ /** native declaration : headers\openvr_capi.h:521 */
+ public static final int EVREventType_VREvent_DashboardThumbSelected = 504;
+ /** native declaration : headers\openvr_capi.h:522 */
+ public static final int EVREventType_VREvent_DashboardRequested = 505;
+ /** native declaration : headers\openvr_capi.h:523 */
+ public static final int EVREventType_VREvent_ResetDashboard = 506;
+ /** native declaration : headers\openvr_capi.h:524 */
+ public static final int EVREventType_VREvent_RenderToast = 507;
+ /** native declaration : headers\openvr_capi.h:525 */
+ public static final int EVREventType_VREvent_ImageLoaded = 508;
+ /** native declaration : headers\openvr_capi.h:526 */
+ public static final int EVREventType_VREvent_ShowKeyboard = 509;
+ /** native declaration : headers\openvr_capi.h:527 */
+ public static final int EVREventType_VREvent_HideKeyboard = 510;
+ /** native declaration : headers\openvr_capi.h:528 */
+ public static final int EVREventType_VREvent_OverlayGamepadFocusGained = 511;
+ /** native declaration : headers\openvr_capi.h:529 */
+ public static final int EVREventType_VREvent_OverlayGamepadFocusLost = 512;
+ /** native declaration : headers\openvr_capi.h:530 */
+ public static final int EVREventType_VREvent_OverlaySharedTextureChanged = 513;
+ /** native declaration : headers\openvr_capi.h:531 */
+ public static final int EVREventType_VREvent_ScreenshotTriggered = 516;
+ /** native declaration : headers\openvr_capi.h:532 */
+ public static final int EVREventType_VREvent_ImageFailed = 517;
+ /** native declaration : headers\openvr_capi.h:533 */
+ public static final int EVREventType_VREvent_DashboardOverlayCreated = 518;
+ /** native declaration : headers\openvr_capi.h:534 */
+ public static final int EVREventType_VREvent_SwitchGamepadFocus = 519;
+ /** native declaration : headers\openvr_capi.h:535 */
+ public static final int EVREventType_VREvent_RequestScreenshot = 520;
+ /** native declaration : headers\openvr_capi.h:536 */
+ public static final int EVREventType_VREvent_ScreenshotTaken = 521;
+ /** native declaration : headers\openvr_capi.h:537 */
+ public static final int EVREventType_VREvent_ScreenshotFailed = 522;
+ /** native declaration : headers\openvr_capi.h:538 */
+ public static final int EVREventType_VREvent_SubmitScreenshotToDashboard = 523;
+ /** native declaration : headers\openvr_capi.h:539 */
+ public static final int EVREventType_VREvent_ScreenshotProgressToDashboard = 524;
+ /** native declaration : headers\openvr_capi.h:540 */
+ public static final int EVREventType_VREvent_PrimaryDashboardDeviceChanged = 525;
+ /** native declaration : headers\openvr_capi.h:541 */
+ public static final int EVREventType_VREvent_RoomViewShown = 526;
+ /** native declaration : headers\openvr_capi.h:542 */
+ public static final int EVREventType_VREvent_RoomViewHidden = 527;
+ /** native declaration : headers\openvr_capi.h:543 */
+ public static final int EVREventType_VREvent_Notification_Shown = 600;
+ /** native declaration : headers\openvr_capi.h:544 */
+ public static final int EVREventType_VREvent_Notification_Hidden = 601;
+ /** native declaration : headers\openvr_capi.h:545 */
+ public static final int EVREventType_VREvent_Notification_BeginInteraction = 602;
+ /** native declaration : headers\openvr_capi.h:546 */
+ public static final int EVREventType_VREvent_Notification_Destroyed = 603;
+ /** native declaration : headers\openvr_capi.h:547 */
+ public static final int EVREventType_VREvent_Quit = 700;
+ /** native declaration : headers\openvr_capi.h:548 */
+ public static final int EVREventType_VREvent_ProcessQuit = 701;
+ /** native declaration : headers\openvr_capi.h:549 */
+ public static final int EVREventType_VREvent_QuitAborted_UserPrompt = 702;
+ /** native declaration : headers\openvr_capi.h:550 */
+ public static final int EVREventType_VREvent_QuitAcknowledged = 703;
+ /** native declaration : headers\openvr_capi.h:551 */
+ public static final int EVREventType_VREvent_DriverRequestedQuit = 704;
+ /** native declaration : headers\openvr_capi.h:552 */
+ public static final int EVREventType_VREvent_ChaperoneDataHasChanged = 800;
+ /** native declaration : headers\openvr_capi.h:553 */
+ public static final int EVREventType_VREvent_ChaperoneUniverseHasChanged = 801;
+ /** native declaration : headers\openvr_capi.h:554 */
+ public static final int EVREventType_VREvent_ChaperoneTempDataHasChanged = 802;
+ /** native declaration : headers\openvr_capi.h:555 */
+ public static final int EVREventType_VREvent_ChaperoneSettingsHaveChanged = 803;
+ /** native declaration : headers\openvr_capi.h:556 */
+ public static final int EVREventType_VREvent_SeatedZeroPoseReset = 804;
+ /** native declaration : headers\openvr_capi.h:557 */
+ public static final int EVREventType_VREvent_AudioSettingsHaveChanged = 820;
+ /** native declaration : headers\openvr_capi.h:558 */
+ public static final int EVREventType_VREvent_BackgroundSettingHasChanged = 850;
+ /** native declaration : headers\openvr_capi.h:559 */
+ public static final int EVREventType_VREvent_CameraSettingsHaveChanged = 851;
+ /** native declaration : headers\openvr_capi.h:560 */
+ public static final int EVREventType_VREvent_ReprojectionSettingHasChanged = 852;
+ /** native declaration : headers\openvr_capi.h:561 */
+ public static final int EVREventType_VREvent_ModelSkinSettingsHaveChanged = 853;
+ /** native declaration : headers\openvr_capi.h:562 */
+ public static final int EVREventType_VREvent_EnvironmentSettingsHaveChanged = 854;
+ /** native declaration : headers\openvr_capi.h:563 */
+ public static final int EVREventType_VREvent_PowerSettingsHaveChanged = 855;
+ /** native declaration : headers\openvr_capi.h:564 */
+ public static final int EVREventType_VREvent_EnableHomeAppSettingsHaveChanged = 856;
+ /** native declaration : headers\openvr_capi.h:565 */
+ public static final int EVREventType_VREvent_SteamVRSectionSettingChanged = 857;
+ /** native declaration : headers\openvr_capi.h:566 */
+ public static final int EVREventType_VREvent_LighthouseSectionSettingChanged = 858;
+ /** native declaration : headers\openvr_capi.h:567 */
+ public static final int EVREventType_VREvent_NullSectionSettingChanged = 859;
+ /** native declaration : headers\openvr_capi.h:568 */
+ public static final int EVREventType_VREvent_UserInterfaceSectionSettingChanged = 860;
+ /** native declaration : headers\openvr_capi.h:569 */
+ public static final int EVREventType_VREvent_NotificationsSectionSettingChanged = 861;
+ /** native declaration : headers\openvr_capi.h:570 */
+ public static final int EVREventType_VREvent_KeyboardSectionSettingChanged = 862;
+ /** native declaration : headers\openvr_capi.h:571 */
+ public static final int EVREventType_VREvent_PerfSectionSettingChanged = 863;
+ /** native declaration : headers\openvr_capi.h:572 */
+ public static final int EVREventType_VREvent_DashboardSectionSettingChanged = 864;
+ /** native declaration : headers\openvr_capi.h:573 */
+ public static final int EVREventType_VREvent_WebInterfaceSectionSettingChanged = 865;
+ /** native declaration : headers\openvr_capi.h:574 */
+ public static final int EVREventType_VREvent_TrackersSectionSettingChanged = 866;
+ /** native declaration : headers\openvr_capi.h:575 */
+ public static final int EVREventType_VREvent_StatusUpdate = 900;
+ /** native declaration : headers\openvr_capi.h:576 */
+ public static final int EVREventType_VREvent_WebInterface_InstallDriverCompleted = 950;
+ /** native declaration : headers\openvr_capi.h:577 */
+ public static final int EVREventType_VREvent_MCImageUpdated = 1000;
+ /** native declaration : headers\openvr_capi.h:578 */
+ public static final int EVREventType_VREvent_FirmwareUpdateStarted = 1100;
+ /** native declaration : headers\openvr_capi.h:579 */
+ public static final int EVREventType_VREvent_FirmwareUpdateFinished = 1101;
+ /** native declaration : headers\openvr_capi.h:580 */
+ public static final int EVREventType_VREvent_KeyboardClosed = 1200;
+ /** native declaration : headers\openvr_capi.h:581 */
+ public static final int EVREventType_VREvent_KeyboardCharInput = 1201;
+ /** native declaration : headers\openvr_capi.h:582 */
+ public static final int EVREventType_VREvent_KeyboardDone = 1202;
+ /** native declaration : headers\openvr_capi.h:583 */
+ public static final int EVREventType_VREvent_ApplicationTransitionStarted = 1300;
+ /** native declaration : headers\openvr_capi.h:584 */
+ public static final int EVREventType_VREvent_ApplicationTransitionAborted = 1301;
+ /** native declaration : headers\openvr_capi.h:585 */
+ public static final int EVREventType_VREvent_ApplicationTransitionNewAppStarted = 1302;
+ /** native declaration : headers\openvr_capi.h:586 */
+ public static final int EVREventType_VREvent_ApplicationListUpdated = 1303;
+ /** native declaration : headers\openvr_capi.h:587 */
+ public static final int EVREventType_VREvent_ApplicationMimeTypeLoad = 1304;
+ /** native declaration : headers\openvr_capi.h:588 */
+ public static final int EVREventType_VREvent_ApplicationTransitionNewAppLaunchComplete = 1305;
+ /** native declaration : headers\openvr_capi.h:589 */
+ public static final int EVREventType_VREvent_ProcessConnected = 1306;
+ /** native declaration : headers\openvr_capi.h:590 */
+ public static final int EVREventType_VREvent_ProcessDisconnected = 1307;
+ /** native declaration : headers\openvr_capi.h:591 */
+ public static final int EVREventType_VREvent_Compositor_MirrorWindowShown = 1400;
+ /** native declaration : headers\openvr_capi.h:592 */
+ public static final int EVREventType_VREvent_Compositor_MirrorWindowHidden = 1401;
+ /** native declaration : headers\openvr_capi.h:593 */
+ public static final int EVREventType_VREvent_Compositor_ChaperoneBoundsShown = 1410;
+ /** native declaration : headers\openvr_capi.h:594 */
+ public static final int EVREventType_VREvent_Compositor_ChaperoneBoundsHidden = 1411;
+ /** native declaration : headers\openvr_capi.h:595 */
+ public static final int EVREventType_VREvent_TrackedCamera_StartVideoStream = 1500;
+ /** native declaration : headers\openvr_capi.h:596 */
+ public static final int EVREventType_VREvent_TrackedCamera_StopVideoStream = 1501;
+ /** native declaration : headers\openvr_capi.h:597 */
+ public static final int EVREventType_VREvent_TrackedCamera_PauseVideoStream = 1502;
+ /** native declaration : headers\openvr_capi.h:598 */
+ public static final int EVREventType_VREvent_TrackedCamera_ResumeVideoStream = 1503;
+ /** native declaration : headers\openvr_capi.h:599 */
+ public static final int EVREventType_VREvent_TrackedCamera_EditingSurface = 1550;
+ /** native declaration : headers\openvr_capi.h:600 */
+ public static final int EVREventType_VREvent_PerformanceTest_EnableCapture = 1600;
+ /** native declaration : headers\openvr_capi.h:601 */
+ public static final int EVREventType_VREvent_PerformanceTest_DisableCapture = 1601;
+ /** native declaration : headers\openvr_capi.h:602 */
+ public static final int EVREventType_VREvent_PerformanceTest_FidelityLevel = 1602;
+ /** native declaration : headers\openvr_capi.h:603 */
+ public static final int EVREventType_VREvent_MessageOverlay_Closed = 1650;
+ /** native declaration : headers\openvr_capi.h:604 */
+ public static final int EVREventType_VREvent_MessageOverlayCloseRequested = 1651;
+ /** native declaration : headers\openvr_capi.h:605 */
+ public static final int EVREventType_VREvent_Input_HapticVibration = 1700;
+ /** native declaration : headers\openvr_capi.h:606 */
+ public static final int EVREventType_VREvent_Input_BindingLoadFailed = 1701;
+ /** native declaration : headers\openvr_capi.h:607 */
+ public static final int EVREventType_VREvent_Input_BindingLoadSuccessful = 1702;
+ /** native declaration : headers\openvr_capi.h:608 */
+ public static final int EVREventType_VREvent_Input_ActionManifestReloaded = 1703;
+ /** native declaration : headers\openvr_capi.h:609 */
+ public static final int EVREventType_VREvent_Input_ActionManifestLoadFailed = 1704;
+ /** native declaration : headers\openvr_capi.h:610 */
+ public static final int EVREventType_VREvent_SpatialAnchors_PoseUpdated = 1800;
+ /** native declaration : headers\openvr_capi.h:611 */
+ public static final int EVREventType_VREvent_SpatialAnchors_DescriptorUpdated = 1801;
+ /** native declaration : headers\openvr_capi.h:612 */
+ public static final int EVREventType_VREvent_SpatialAnchors_RequestPoseUpdate = 1802;
+ /** native declaration : headers\openvr_capi.h:613 */
+ public static final int EVREventType_VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803;
+ /** native declaration : headers\openvr_capi.h:614 */
+ public static final int EVREventType_VREvent_VendorSpecific_Reserved_Start = 10000;
+ /** native declaration : headers\openvr_capi.h:615 */
+ public static final int EVREventType_VREvent_VendorSpecific_Reserved_End = 19999;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:623
+ * enum values
+ */
+ public static interface EDeviceActivityLevel {
+ /** native declaration : headers\openvr_capi.h:618 */
+ public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_Unknown = -1;
+ /** native declaration : headers\openvr_capi.h:619 */
+ public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_Idle = 0;
+ /** native declaration : headers\openvr_capi.h:620 */
+ public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction = 1;
+ /** native declaration : headers\openvr_capi.h:621 */
+ public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_UserInteraction_Timeout = 2;
+ /** native declaration : headers\openvr_capi.h:622 */
+ public static final int EDeviceActivityLevel_k_EDeviceActivityLevel_Standby = 3;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:646
+ * enum values
+ */
+ public static interface EVRButtonId {
+ /** native declaration : headers\openvr_capi.h:625 */
+ public static final int EVRButtonId_k_EButton_System = 0;
+ /** native declaration : headers\openvr_capi.h:626 */
+ public static final int EVRButtonId_k_EButton_ApplicationMenu = 1;
+ /** native declaration : headers\openvr_capi.h:627 */
+ public static final int EVRButtonId_k_EButton_Grip = 2;
+ /** native declaration : headers\openvr_capi.h:628 */
+ public static final int EVRButtonId_k_EButton_DPad_Left = 3;
+ /** native declaration : headers\openvr_capi.h:629 */
+ public static final int EVRButtonId_k_EButton_DPad_Up = 4;
+ /** native declaration : headers\openvr_capi.h:630 */
+ public static final int EVRButtonId_k_EButton_DPad_Right = 5;
+ /** native declaration : headers\openvr_capi.h:631 */
+ public static final int EVRButtonId_k_EButton_DPad_Down = 6;
+ /** native declaration : headers\openvr_capi.h:632 */
+ public static final int EVRButtonId_k_EButton_A = 7;
+ /** native declaration : headers\openvr_capi.h:633 */
+ public static final int EVRButtonId_k_EButton_ProximitySensor = 31;
+ /** native declaration : headers\openvr_capi.h:634 */
+ public static final int EVRButtonId_k_EButton_Axis0 = 32;
+ /** native declaration : headers\openvr_capi.h:635 */
+ public static final int EVRButtonId_k_EButton_Axis1 = 33;
+ /** native declaration : headers\openvr_capi.h:636 */
+ public static final int EVRButtonId_k_EButton_Axis2 = 34;
+ /** native declaration : headers\openvr_capi.h:637 */
+ public static final int EVRButtonId_k_EButton_Axis3 = 35;
+ /** native declaration : headers\openvr_capi.h:638 */
+ public static final int EVRButtonId_k_EButton_Axis4 = 36;
+ /** native declaration : headers\openvr_capi.h:639 */
+ public static final int EVRButtonId_k_EButton_SteamVR_Touchpad = 32;
+ /** native declaration : headers\openvr_capi.h:640 */
+ public static final int EVRButtonId_k_EButton_SteamVR_Trigger = 33;
+ /** native declaration : headers\openvr_capi.h:641 */
+ public static final int EVRButtonId_k_EButton_Dashboard_Back = 2;
+ /** native declaration : headers\openvr_capi.h:642 */
+ public static final int EVRButtonId_k_EButton_Knuckles_A = 2;
+ /** native declaration : headers\openvr_capi.h:643 */
+ public static final int EVRButtonId_k_EButton_Knuckles_B = 1;
+ /** native declaration : headers\openvr_capi.h:644 */
+ public static final int EVRButtonId_k_EButton_Knuckles_JoyStick = 35;
+ /** native declaration : headers\openvr_capi.h:645 */
+ public static final int EVRButtonId_k_EButton_Max = 64;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:651
+ * enum values
+ */
+ public static interface EVRMouseButton {
+ /** native declaration : headers\openvr_capi.h:648 */
+ public static final int EVRMouseButton_VRMouseButton_Left = 1;
+ /** native declaration : headers\openvr_capi.h:649 */
+ public static final int EVRMouseButton_VRMouseButton_Right = 2;
+ /** native declaration : headers\openvr_capi.h:650 */
+ public static final int EVRMouseButton_VRMouseButton_Middle = 4;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:655
+ * enum values
+ */
+ public static interface EDualAnalogWhich {
+ /** native declaration : headers\openvr_capi.h:653 */
+ public static final int EDualAnalogWhich_k_EDualAnalog_Left = 0;
+ /** native declaration : headers\openvr_capi.h:654 */
+ public static final int EDualAnalogWhich_k_EDualAnalog_Right = 1;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:674
+ * enum values
+ */
+ public static interface EVRInputError {
+ /** native declaration : headers\openvr_capi.h:657 */
+ public static final int EVRInputError_VRInputError_None = 0;
+ /** native declaration : headers\openvr_capi.h:658 */
+ public static final int EVRInputError_VRInputError_NameNotFound = 1;
+ /** native declaration : headers\openvr_capi.h:659 */
+ public static final int EVRInputError_VRInputError_WrongType = 2;
+ /** native declaration : headers\openvr_capi.h:660 */
+ public static final int EVRInputError_VRInputError_InvalidHandle = 3;
+ /** native declaration : headers\openvr_capi.h:661 */
+ public static final int EVRInputError_VRInputError_InvalidParam = 4;
+ /** native declaration : headers\openvr_capi.h:662 */
+ public static final int EVRInputError_VRInputError_NoSteam = 5;
+ /** native declaration : headers\openvr_capi.h:663 */
+ public static final int EVRInputError_VRInputError_MaxCapacityReached = 6;
+ /** native declaration : headers\openvr_capi.h:664 */
+ public static final int EVRInputError_VRInputError_IPCError = 7;
+ /** native declaration : headers\openvr_capi.h:665 */
+ public static final int EVRInputError_VRInputError_NoActiveActionSet = 8;
+ /** native declaration : headers\openvr_capi.h:666 */
+ public static final int EVRInputError_VRInputError_InvalidDevice = 9;
+ /** native declaration : headers\openvr_capi.h:667 */
+ public static final int EVRInputError_VRInputError_InvalidSkeleton = 10;
+ /** native declaration : headers\openvr_capi.h:668 */
+ public static final int EVRInputError_VRInputError_InvalidBoneCount = 11;
+ /** native declaration : headers\openvr_capi.h:669 */
+ public static final int EVRInputError_VRInputError_InvalidCompressedData = 12;
+ /** native declaration : headers\openvr_capi.h:670 */
+ public static final int EVRInputError_VRInputError_NoData = 13;
+ /** native declaration : headers\openvr_capi.h:671 */
+ public static final int EVRInputError_VRInputError_BufferTooSmall = 14;
+ /** native declaration : headers\openvr_capi.h:672 */
+ public static final int EVRInputError_VRInputError_MismatchedActionManifest = 15;
+ /** native declaration : headers\openvr_capi.h:673 */
+ public static final int EVRInputError_VRInputError_MissingSkeletonData = 16;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:690
+ * enum values
+ */
+ public static interface EVRSpatialAnchorError {
+ /** native declaration : headers\openvr_capi.h:676 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_Success = 0;
+ /** native declaration : headers\openvr_capi.h:677 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_Internal = 1;
+ /** native declaration : headers\openvr_capi.h:678 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_UnknownHandle = 2;
+ /** native declaration : headers\openvr_capi.h:679 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_ArrayTooSmall = 3;
+ /** native declaration : headers\openvr_capi.h:680 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_InvalidDescriptorChar = 4;
+ /** native declaration : headers\openvr_capi.h:681 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_NotYetAvailable = 5;
+ /** native declaration : headers\openvr_capi.h:682 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_NotAvailableInThisUniverse = 6;
+ /** native declaration : headers\openvr_capi.h:683 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_PermanentlyUnavailable = 7;
+ /** native declaration : headers\openvr_capi.h:684 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_WrongDriver = 8;
+ /** native declaration : headers\openvr_capi.h:685 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_DescriptorTooLong = 9;
+ /** native declaration : headers\openvr_capi.h:686 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_Unknown = 10;
+ /** native declaration : headers\openvr_capi.h:687 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_NoRoomCalibration = 11;
+ /** native declaration : headers\openvr_capi.h:688 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_InvalidArgument = 12;
+ /** native declaration : headers\openvr_capi.h:689 */
+ public static final int EVRSpatialAnchorError_VRSpatialAnchorError_UnknownDriver = 13;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:696
+ * enum values
+ */
+ public static interface EHiddenAreaMeshType {
+ /** native declaration : headers\openvr_capi.h:692 */
+ public static final int EHiddenAreaMeshType_k_eHiddenAreaMesh_Standard = 0;
+ /** native declaration : headers\openvr_capi.h:693 */
+ public static final int EHiddenAreaMeshType_k_eHiddenAreaMesh_Inverse = 1;
+ /** native declaration : headers\openvr_capi.h:694 */
+ public static final int EHiddenAreaMeshType_k_eHiddenAreaMesh_LineLoop = 2;
+ /** native declaration : headers\openvr_capi.h:695 */
+ public static final int EHiddenAreaMeshType_k_eHiddenAreaMesh_Max = 3;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:702
+ * enum values
+ */
+ public static interface EVRControllerAxisType {
+ /** native declaration : headers\openvr_capi.h:698 */
+ public static final int EVRControllerAxisType_k_eControllerAxis_None = 0;
+ /** native declaration : headers\openvr_capi.h:699 */
+ public static final int EVRControllerAxisType_k_eControllerAxis_TrackPad = 1;
+ /** native declaration : headers\openvr_capi.h:700 */
+ public static final int EVRControllerAxisType_k_eControllerAxis_Joystick = 2;
+ /** native declaration : headers\openvr_capi.h:701 */
+ public static final int EVRControllerAxisType_k_eControllerAxis_Trigger = 3;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:706
+ * enum values
+ */
+ public static interface EVRControllerEventOutputType {
+ /** native declaration : headers\openvr_capi.h:704 */
+ public static final int EVRControllerEventOutputType_ControllerEventOutput_OSEvents = 0;
+ /** native declaration : headers\openvr_capi.h:705 */
+ public static final int EVRControllerEventOutputType_ControllerEventOutput_VREvents = 1;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:714
+ * enum values
+ */
+ public static interface ECollisionBoundsStyle {
+ /** native declaration : headers\openvr_capi.h:708 */
+ public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_BEGINNER = 0;
+ /** native declaration : headers\openvr_capi.h:709 */
+ public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_INTERMEDIATE = 1;
+ /** native declaration : headers\openvr_capi.h:710 */
+ public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_SQUARES = 2;
+ /** native declaration : headers\openvr_capi.h:711 */
+ public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_ADVANCED = 3;
+ /** native declaration : headers\openvr_capi.h:712 */
+ public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_NONE = 4;
+ /** native declaration : headers\openvr_capi.h:713 */
+ public static final int ECollisionBoundsStyle_COLLISION_BOUNDS_STYLE_COUNT = 5;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:740
+ * enum values
+ */
+ public static interface EVROverlayError {
+ /** native declaration : headers\openvr_capi.h:716 */
+ public static final int EVROverlayError_VROverlayError_None = 0;
+ /** native declaration : headers\openvr_capi.h:717 */
+ public static final int EVROverlayError_VROverlayError_UnknownOverlay = 10;
+ /** native declaration : headers\openvr_capi.h:718 */
+ public static final int EVROverlayError_VROverlayError_InvalidHandle = 11;
+ /** native declaration : headers\openvr_capi.h:719 */
+ public static final int EVROverlayError_VROverlayError_PermissionDenied = 12;
+ /** native declaration : headers\openvr_capi.h:720 */
+ public static final int EVROverlayError_VROverlayError_OverlayLimitExceeded = 13;
+ /** native declaration : headers\openvr_capi.h:721 */
+ public static final int EVROverlayError_VROverlayError_WrongVisibilityType = 14;
+ /** native declaration : headers\openvr_capi.h:722 */
+ public static final int EVROverlayError_VROverlayError_KeyTooLong = 15;
+ /** native declaration : headers\openvr_capi.h:723 */
+ public static final int EVROverlayError_VROverlayError_NameTooLong = 16;
+ /** native declaration : headers\openvr_capi.h:724 */
+ public static final int EVROverlayError_VROverlayError_KeyInUse = 17;
+ /** native declaration : headers\openvr_capi.h:725 */
+ public static final int EVROverlayError_VROverlayError_WrongTransformType = 18;
+ /** native declaration : headers\openvr_capi.h:726 */
+ public static final int EVROverlayError_VROverlayError_InvalidTrackedDevice = 19;
+ /** native declaration : headers\openvr_capi.h:727 */
+ public static final int EVROverlayError_VROverlayError_InvalidParameter = 20;
+ /** native declaration : headers\openvr_capi.h:728 */
+ public static final int EVROverlayError_VROverlayError_ThumbnailCantBeDestroyed = 21;
+ /** native declaration : headers\openvr_capi.h:729 */
+ public static final int EVROverlayError_VROverlayError_ArrayTooSmall = 22;
+ /** native declaration : headers\openvr_capi.h:730 */
+ public static final int EVROverlayError_VROverlayError_RequestFailed = 23;
+ /** native declaration : headers\openvr_capi.h:731 */
+ public static final int EVROverlayError_VROverlayError_InvalidTexture = 24;
+ /** native declaration : headers\openvr_capi.h:732 */
+ public static final int EVROverlayError_VROverlayError_UnableToLoadFile = 25;
+ /** native declaration : headers\openvr_capi.h:733 */
+ public static final int EVROverlayError_VROverlayError_KeyboardAlreadyInUse = 26;
+ /** native declaration : headers\openvr_capi.h:734 */
+ public static final int EVROverlayError_VROverlayError_NoNeighbor = 27;
+ /** native declaration : headers\openvr_capi.h:735 */
+ public static final int EVROverlayError_VROverlayError_TooManyMaskPrimitives = 29;
+ /** native declaration : headers\openvr_capi.h:736 */
+ public static final int EVROverlayError_VROverlayError_BadMaskPrimitive = 30;
+ /** native declaration : headers\openvr_capi.h:737 */
+ public static final int EVROverlayError_VROverlayError_TextureAlreadyLocked = 31;
+ /** native declaration : headers\openvr_capi.h:738 */
+ public static final int EVROverlayError_VROverlayError_TextureLockCapacityReached = 32;
+ /** native declaration : headers\openvr_capi.h:739 */
+ public static final int EVROverlayError_VROverlayError_TextureNotLocked = 33;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:751
+ * enum values
+ */
+ public static interface EVRApplicationType {
+ /** native declaration : headers\openvr_capi.h:742 */
+ public static final int EVRApplicationType_VRApplication_Other = 0;
+ /** native declaration : headers\openvr_capi.h:743 */
+ public static final int EVRApplicationType_VRApplication_Scene = 1;
+ /** native declaration : headers\openvr_capi.h:744 */
+ public static final int EVRApplicationType_VRApplication_Overlay = 2;
+ /** native declaration : headers\openvr_capi.h:745 */
+ public static final int EVRApplicationType_VRApplication_Background = 3;
+ /** native declaration : headers\openvr_capi.h:746 */
+ public static final int EVRApplicationType_VRApplication_Utility = 4;
+ /** native declaration : headers\openvr_capi.h:747 */
+ public static final int EVRApplicationType_VRApplication_VRMonitor = 5;
+ /** native declaration : headers\openvr_capi.h:748 */
+ public static final int EVRApplicationType_VRApplication_SteamWatchdog = 6;
+ /** native declaration : headers\openvr_capi.h:749 */
+ public static final int EVRApplicationType_VRApplication_Bootstrapper = 7;
+ /** native declaration : headers\openvr_capi.h:750 */
+ public static final int EVRApplicationType_VRApplication_Max = 8;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:756
+ * enum values
+ */
+ public static interface EVRFirmwareError {
+ /** native declaration : headers\openvr_capi.h:753 */
+ public static final int EVRFirmwareError_VRFirmwareError_None = 0;
+ /** native declaration : headers\openvr_capi.h:754 */
+ public static final int EVRFirmwareError_VRFirmwareError_Success = 1;
+ /** native declaration : headers\openvr_capi.h:755 */
+ public static final int EVRFirmwareError_VRFirmwareError_Fail = 2;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:763
+ * enum values
+ */
+ public static interface EVRNotificationError {
+ /** native declaration : headers\openvr_capi.h:758 */
+ public static final int EVRNotificationError_VRNotificationError_OK = 0;
+ /** native declaration : headers\openvr_capi.h:759 */
+ public static final int EVRNotificationError_VRNotificationError_InvalidNotificationId = 100;
+ /** native declaration : headers\openvr_capi.h:760 */
+ public static final int EVRNotificationError_VRNotificationError_NotificationQueueFull = 101;
+ /** native declaration : headers\openvr_capi.h:761 */
+ public static final int EVRNotificationError_VRNotificationError_InvalidOverlayHandle = 102;
+ /** native declaration : headers\openvr_capi.h:762 */
+ public static final int EVRNotificationError_VRNotificationError_SystemWithUserValueAlreadyExists = 103;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:767
+ * enum values
+ */
+ public static interface EVRSkeletalMotionRange {
+ /** native declaration : headers\openvr_capi.h:765 */
+ public static final int EVRSkeletalMotionRange_VRSkeletalMotionRange_WithController = 0;
+ /** native declaration : headers\openvr_capi.h:766 */
+ public static final int EVRSkeletalMotionRange_VRSkeletalMotionRange_WithoutController = 1;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:857
+ * enum values
+ */
+ public static interface EVRInitError {
+ /** native declaration : headers\openvr_capi.h:769 */
+ public static final int EVRInitError_VRInitError_None = 0;
+ /** native declaration : headers\openvr_capi.h:770 */
+ public static final int EVRInitError_VRInitError_Unknown = 1;
+ /** native declaration : headers\openvr_capi.h:771 */
+ public static final int EVRInitError_VRInitError_Init_InstallationNotFound = 100;
+ /** native declaration : headers\openvr_capi.h:772 */
+ public static final int EVRInitError_VRInitError_Init_InstallationCorrupt = 101;
+ /** native declaration : headers\openvr_capi.h:773 */
+ public static final int EVRInitError_VRInitError_Init_VRClientDLLNotFound = 102;
+ /** native declaration : headers\openvr_capi.h:774 */
+ public static final int EVRInitError_VRInitError_Init_FileNotFound = 103;
+ /** native declaration : headers\openvr_capi.h:775 */
+ public static final int EVRInitError_VRInitError_Init_FactoryNotFound = 104;
+ /** native declaration : headers\openvr_capi.h:776 */
+ public static final int EVRInitError_VRInitError_Init_InterfaceNotFound = 105;
+ /** native declaration : headers\openvr_capi.h:777 */
+ public static final int EVRInitError_VRInitError_Init_InvalidInterface = 106;
+ /** native declaration : headers\openvr_capi.h:778 */
+ public static final int EVRInitError_VRInitError_Init_UserConfigDirectoryInvalid = 107;
+ /** native declaration : headers\openvr_capi.h:779 */
+ public static final int EVRInitError_VRInitError_Init_HmdNotFound = 108;
+ /** native declaration : headers\openvr_capi.h:780 */
+ public static final int EVRInitError_VRInitError_Init_NotInitialized = 109;
+ /** native declaration : headers\openvr_capi.h:781 */
+ public static final int EVRInitError_VRInitError_Init_PathRegistryNotFound = 110;
+ /** native declaration : headers\openvr_capi.h:782 */
+ public static final int EVRInitError_VRInitError_Init_NoConfigPath = 111;
+ /** native declaration : headers\openvr_capi.h:783 */
+ public static final int EVRInitError_VRInitError_Init_NoLogPath = 112;
+ /** native declaration : headers\openvr_capi.h:784 */
+ public static final int EVRInitError_VRInitError_Init_PathRegistryNotWritable = 113;
+ /** native declaration : headers\openvr_capi.h:785 */
+ public static final int EVRInitError_VRInitError_Init_AppInfoInitFailed = 114;
+ /** native declaration : headers\openvr_capi.h:786 */
+ public static final int EVRInitError_VRInitError_Init_Retry = 115;
+ /** native declaration : headers\openvr_capi.h:787 */
+ public static final int EVRInitError_VRInitError_Init_InitCanceledByUser = 116;
+ /** native declaration : headers\openvr_capi.h:788 */
+ public static final int EVRInitError_VRInitError_Init_AnotherAppLaunching = 117;
+ /** native declaration : headers\openvr_capi.h:789 */
+ public static final int EVRInitError_VRInitError_Init_SettingsInitFailed = 118;
+ /** native declaration : headers\openvr_capi.h:790 */
+ public static final int EVRInitError_VRInitError_Init_ShuttingDown = 119;
+ /** native declaration : headers\openvr_capi.h:791 */
+ public static final int EVRInitError_VRInitError_Init_TooManyObjects = 120;
+ /** native declaration : headers\openvr_capi.h:792 */
+ public static final int EVRInitError_VRInitError_Init_NoServerForBackgroundApp = 121;
+ /** native declaration : headers\openvr_capi.h:793 */
+ public static final int EVRInitError_VRInitError_Init_NotSupportedWithCompositor = 122;
+ /** native declaration : headers\openvr_capi.h:794 */
+ public static final int EVRInitError_VRInitError_Init_NotAvailableToUtilityApps = 123;
+ /** native declaration : headers\openvr_capi.h:795 */
+ public static final int EVRInitError_VRInitError_Init_Internal = 124;
+ /** native declaration : headers\openvr_capi.h:796 */
+ public static final int EVRInitError_VRInitError_Init_HmdDriverIdIsNone = 125;
+ /** native declaration : headers\openvr_capi.h:797 */
+ public static final int EVRInitError_VRInitError_Init_HmdNotFoundPresenceFailed = 126;
+ /** native declaration : headers\openvr_capi.h:798 */
+ public static final int EVRInitError_VRInitError_Init_VRMonitorNotFound = 127;
+ /** native declaration : headers\openvr_capi.h:799 */
+ public static final int EVRInitError_VRInitError_Init_VRMonitorStartupFailed = 128;
+ /** native declaration : headers\openvr_capi.h:800 */
+ public static final int EVRInitError_VRInitError_Init_LowPowerWatchdogNotSupported = 129;
+ /** native declaration : headers\openvr_capi.h:801 */
+ public static final int EVRInitError_VRInitError_Init_InvalidApplicationType = 130;
+ /** native declaration : headers\openvr_capi.h:802 */
+ public static final int EVRInitError_VRInitError_Init_NotAvailableToWatchdogApps = 131;
+ /** native declaration : headers\openvr_capi.h:803 */
+ public static final int EVRInitError_VRInitError_Init_WatchdogDisabledInSettings = 132;
+ /** native declaration : headers\openvr_capi.h:804 */
+ public static final int EVRInitError_VRInitError_Init_VRDashboardNotFound = 133;
+ /** native declaration : headers\openvr_capi.h:805 */
+ public static final int EVRInitError_VRInitError_Init_VRDashboardStartupFailed = 134;
+ /** native declaration : headers\openvr_capi.h:806 */
+ public static final int EVRInitError_VRInitError_Init_VRHomeNotFound = 135;
+ /** native declaration : headers\openvr_capi.h:807 */
+ public static final int EVRInitError_VRInitError_Init_VRHomeStartupFailed = 136;
+ /** native declaration : headers\openvr_capi.h:808 */
+ public static final int EVRInitError_VRInitError_Init_RebootingBusy = 137;
+ /** native declaration : headers\openvr_capi.h:809 */
+ public static final int EVRInitError_VRInitError_Init_FirmwareUpdateBusy = 138;
+ /** native declaration : headers\openvr_capi.h:810 */
+ public static final int EVRInitError_VRInitError_Init_FirmwareRecoveryBusy = 139;
+ /** native declaration : headers\openvr_capi.h:811 */
+ public static final int EVRInitError_VRInitError_Init_USBServiceBusy = 140;
+ /** native declaration : headers\openvr_capi.h:812 */
+ public static final int EVRInitError_VRInitError_Init_VRWebHelperStartupFailed = 141;
+ /** native declaration : headers\openvr_capi.h:813 */
+ public static final int EVRInitError_VRInitError_Init_TrackerManagerInitFailed = 142;
+ /** native declaration : headers\openvr_capi.h:814 */
+ public static final int EVRInitError_VRInitError_Driver_Failed = 200;
+ /** native declaration : headers\openvr_capi.h:815 */
+ public static final int EVRInitError_VRInitError_Driver_Unknown = 201;
+ /** native declaration : headers\openvr_capi.h:816 */
+ public static final int EVRInitError_VRInitError_Driver_HmdUnknown = 202;
+ /** native declaration : headers\openvr_capi.h:817 */
+ public static final int EVRInitError_VRInitError_Driver_NotLoaded = 203;
+ /** native declaration : headers\openvr_capi.h:818 */
+ public static final int EVRInitError_VRInitError_Driver_RuntimeOutOfDate = 204;
+ /** native declaration : headers\openvr_capi.h:819 */
+ public static final int EVRInitError_VRInitError_Driver_HmdInUse = 205;
+ /** native declaration : headers\openvr_capi.h:820 */
+ public static final int EVRInitError_VRInitError_Driver_NotCalibrated = 206;
+ /** native declaration : headers\openvr_capi.h:821 */
+ public static final int EVRInitError_VRInitError_Driver_CalibrationInvalid = 207;
+ /** native declaration : headers\openvr_capi.h:822 */
+ public static final int EVRInitError_VRInitError_Driver_HmdDisplayNotFound = 208;
+ /** native declaration : headers\openvr_capi.h:823 */
+ public static final int EVRInitError_VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209;
+ /** native declaration : headers\openvr_capi.h:824 */
+ public static final int EVRInitError_VRInitError_Driver_HmdDriverIdOutOfBounds = 211;
+ /** native declaration : headers\openvr_capi.h:825 */
+ public static final int EVRInitError_VRInitError_Driver_HmdDisplayMirrored = 212;
+ /** native declaration : headers\openvr_capi.h:826 */
+ public static final int EVRInitError_VRInitError_IPC_ServerInitFailed = 300;
+ /** native declaration : headers\openvr_capi.h:827 */
+ public static final int EVRInitError_VRInitError_IPC_ConnectFailed = 301;
+ /** native declaration : headers\openvr_capi.h:828 */
+ public static final int EVRInitError_VRInitError_IPC_SharedStateInitFailed = 302;
+ /** native declaration : headers\openvr_capi.h:829 */
+ public static final int EVRInitError_VRInitError_IPC_CompositorInitFailed = 303;
+ /** native declaration : headers\openvr_capi.h:830 */
+ public static final int EVRInitError_VRInitError_IPC_MutexInitFailed = 304;
+ /** native declaration : headers\openvr_capi.h:831 */
+ public static final int EVRInitError_VRInitError_IPC_Failed = 305;
+ /** native declaration : headers\openvr_capi.h:832 */
+ public static final int EVRInitError_VRInitError_IPC_CompositorConnectFailed = 306;
+ /** native declaration : headers\openvr_capi.h:833 */
+ public static final int EVRInitError_VRInitError_IPC_CompositorInvalidConnectResponse = 307;
+ /** native declaration : headers\openvr_capi.h:834 */
+ public static final int EVRInitError_VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308;
+ /** native declaration : headers\openvr_capi.h:835 */
+ public static final int EVRInitError_VRInitError_Compositor_Failed = 400;
+ /** native declaration : headers\openvr_capi.h:836 */
+ public static final int EVRInitError_VRInitError_Compositor_D3D11HardwareRequired = 401;
+ /** native declaration : headers\openvr_capi.h:837 */
+ public static final int EVRInitError_VRInitError_Compositor_FirmwareRequiresUpdate = 402;
+ /** native declaration : headers\openvr_capi.h:838 */
+ public static final int EVRInitError_VRInitError_Compositor_OverlayInitFailed = 403;
+ /** native declaration : headers\openvr_capi.h:839 */
+ public static final int EVRInitError_VRInitError_Compositor_ScreenshotsInitFailed = 404;
+ /** native declaration : headers\openvr_capi.h:840 */
+ public static final int EVRInitError_VRInitError_Compositor_UnableToCreateDevice = 405;
+ /** native declaration : headers\openvr_capi.h:841 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000;
+ /** native declaration : headers\openvr_capi.h:842 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_WindowsNotInDevMode = 1001;
+ /** native declaration : headers\openvr_capi.h:843 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101;
+ /** native declaration : headers\openvr_capi.h:844 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102;
+ /** native declaration : headers\openvr_capi.h:845 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103;
+ /** native declaration : headers\openvr_capi.h:846 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104;
+ /** native declaration : headers\openvr_capi.h:847 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105;
+ /** native declaration : headers\openvr_capi.h:848 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106;
+ /** native declaration : headers\openvr_capi.h:849 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107;
+ /** native declaration : headers\openvr_capi.h:850 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108;
+ /** native declaration : headers\openvr_capi.h:851 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109;
+ /** native declaration : headers\openvr_capi.h:852 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110;
+ /** native declaration : headers\openvr_capi.h:853 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111;
+ /** native declaration : headers\openvr_capi.h:854 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_UserDataError = 1112;
+ /** native declaration : headers\openvr_capi.h:855 */
+ public static final int EVRInitError_VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113;
+ /** native declaration : headers\openvr_capi.h:856 */
+ public static final int EVRInitError_VRInitError_Steam_SteamInstallationNotFound = 2000;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:865
+ * enum values
+ */
+ public static interface EVRScreenshotType {
+ /** native declaration : headers\openvr_capi.h:859 */
+ public static final int EVRScreenshotType_VRScreenshotType_None = 0;
+ /** native declaration : headers\openvr_capi.h:860 */
+ public static final int EVRScreenshotType_VRScreenshotType_Mono = 1;
+ /** native declaration : headers\openvr_capi.h:861 */
+ public static final int EVRScreenshotType_VRScreenshotType_Stereo = 2;
+ /** native declaration : headers\openvr_capi.h:862 */
+ public static final int EVRScreenshotType_VRScreenshotType_Cubemap = 3;
+ /** native declaration : headers\openvr_capi.h:863 */
+ public static final int EVRScreenshotType_VRScreenshotType_MonoPanorama = 4;
+ /** native declaration : headers\openvr_capi.h:864 */
+ public static final int EVRScreenshotType_VRScreenshotType_StereoPanorama = 5;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:869
+ * enum values
+ */
+ public static interface EVRScreenshotPropertyFilenames {
+ /** native declaration : headers\openvr_capi.h:867 */
+ public static final int EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_Preview = 0;
+ /** native declaration : headers\openvr_capi.h:868 */
+ public static final int EVRScreenshotPropertyFilenames_VRScreenshotPropertyFilenames_VR = 1;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:888
+ * enum values
+ */
+ public static interface EVRTrackedCameraError {
+ /** native declaration : headers\openvr_capi.h:871 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_None = 0;
+ /** native declaration : headers\openvr_capi.h:872 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_OperationFailed = 100;
+ /** native declaration : headers\openvr_capi.h:873 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidHandle = 101;
+ /** native declaration : headers\openvr_capi.h:874 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameHeaderVersion = 102;
+ /** native declaration : headers\openvr_capi.h:875 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_OutOfHandles = 103;
+ /** native declaration : headers\openvr_capi.h:876 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_IPCFailure = 104;
+ /** native declaration : headers\openvr_capi.h:877 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_NotSupportedForThisDevice = 105;
+ /** native declaration : headers\openvr_capi.h:878 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_SharedMemoryFailure = 106;
+ /** native declaration : headers\openvr_capi.h:879 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_FrameBufferingFailure = 107;
+ /** native declaration : headers\openvr_capi.h:880 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_StreamSetupFailure = 108;
+ /** native declaration : headers\openvr_capi.h:881 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidGLTextureId = 109;
+ /** native declaration : headers\openvr_capi.h:882 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidSharedTextureHandle = 110;
+ /** native declaration : headers\openvr_capi.h:883 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_FailedToGetGLTextureId = 111;
+ /** native declaration : headers\openvr_capi.h:884 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_SharedTextureFailure = 112;
+ /** native declaration : headers\openvr_capi.h:885 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_NoFrameAvailable = 113;
+ /** native declaration : headers\openvr_capi.h:886 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidArgument = 114;
+ /** native declaration : headers\openvr_capi.h:887 */
+ public static final int EVRTrackedCameraError_VRTrackedCameraError_InvalidFrameBufferSize = 115;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:894
+ * enum values
+ */
+ public static interface EVRTrackedCameraFrameLayout {
+ /** native declaration : headers\openvr_capi.h:890 */
+ public static final int EVRTrackedCameraFrameLayout_Mono = 1;
+ /** native declaration : headers\openvr_capi.h:891 */
+ public static final int EVRTrackedCameraFrameLayout_Stereo = 2;
+ /** native declaration : headers\openvr_capi.h:892 */
+ public static final int EVRTrackedCameraFrameLayout_VerticalLayout = 16;
+ /** native declaration : headers\openvr_capi.h:893 */
+ public static final int EVRTrackedCameraFrameLayout_HorizontalLayout = 32;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:900
+ * enum values
+ */
+ public static interface EVRTrackedCameraFrameType {
+ /** native declaration : headers\openvr_capi.h:896 */
+ public static final int EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Distorted = 0;
+ /** native declaration : headers\openvr_capi.h:897 */
+ public static final int EVRTrackedCameraFrameType_VRTrackedCameraFrameType_Undistorted = 1;
+ /** native declaration : headers\openvr_capi.h:898 */
+ public static final int EVRTrackedCameraFrameType_VRTrackedCameraFrameType_MaximumUndistorted = 2;
+ /** native declaration : headers\openvr_capi.h:899 */
+ public static final int EVRTrackedCameraFrameType_MAX_CAMERA_FRAME_TYPES = 3;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:905
+ * enum values
+ */
+ public static interface EVSync {
+ /** native declaration : headers\openvr_capi.h:902 */
+ public static final int EVSync_VSync_None = 0;
+ /** native declaration : headers\openvr_capi.h:903 */
+ public static final int EVSync_VSync_WaitRender = 1;
+ /** native declaration : headers\openvr_capi.h:904 */
+ public static final int EVSync_VSync_NoWaitRender = 2;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:909
+ * enum values
+ */
+ public static interface EVRMuraCorrectionMode {
+ /** native declaration : headers\openvr_capi.h:907 */
+ public static final int EVRMuraCorrectionMode_Default = 0;
+ /** native declaration : headers\openvr_capi.h:908 */
+ public static final int EVRMuraCorrectionMode_NoCorrection = 1;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:917
+ * enum values
+ */
+ public static interface Imu_OffScaleFlags {
+ /** native declaration : headers\openvr_capi.h:911 */
+ public static final int Imu_OffScaleFlags_OffScale_AccelX = 1;
+ /** native declaration : headers\openvr_capi.h:912 */
+ public static final int Imu_OffScaleFlags_OffScale_AccelY = 2;
+ /** native declaration : headers\openvr_capi.h:913 */
+ public static final int Imu_OffScaleFlags_OffScale_AccelZ = 4;
+ /** native declaration : headers\openvr_capi.h:914 */
+ public static final int Imu_OffScaleFlags_OffScale_GyroX = 8;
+ /** native declaration : headers\openvr_capi.h:915 */
+ public static final int Imu_OffScaleFlags_OffScale_GyroY = 16;
+ /** native declaration : headers\openvr_capi.h:916 */
+ public static final int Imu_OffScaleFlags_OffScale_GyroZ = 32;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:940
+ * enum values
+ */
+ public static interface EVRApplicationError {
+ /** native declaration : headers\openvr_capi.h:919 */
+ public static final int EVRApplicationError_VRApplicationError_None = 0;
+ /** native declaration : headers\openvr_capi.h:920 */
+ public static final int EVRApplicationError_VRApplicationError_AppKeyAlreadyExists = 100;
+ /** native declaration : headers\openvr_capi.h:921 */
+ public static final int EVRApplicationError_VRApplicationError_NoManifest = 101;
+ /** native declaration : headers\openvr_capi.h:922 */
+ public static final int EVRApplicationError_VRApplicationError_NoApplication = 102;
+ /** native declaration : headers\openvr_capi.h:923 */
+ public static final int EVRApplicationError_VRApplicationError_InvalidIndex = 103;
+ /** native declaration : headers\openvr_capi.h:924 */
+ public static final int EVRApplicationError_VRApplicationError_UnknownApplication = 104;
+ /** native declaration : headers\openvr_capi.h:925 */
+ public static final int EVRApplicationError_VRApplicationError_IPCFailed = 105;
+ /** native declaration : headers\openvr_capi.h:926 */
+ public static final int EVRApplicationError_VRApplicationError_ApplicationAlreadyRunning = 106;
+ /** native declaration : headers\openvr_capi.h:927 */
+ public static final int EVRApplicationError_VRApplicationError_InvalidManifest = 107;
+ /** native declaration : headers\openvr_capi.h:928 */
+ public static final int EVRApplicationError_VRApplicationError_InvalidApplication = 108;
+ /** native declaration : headers\openvr_capi.h:929 */
+ public static final int EVRApplicationError_VRApplicationError_LaunchFailed = 109;
+ /** native declaration : headers\openvr_capi.h:930 */
+ public static final int EVRApplicationError_VRApplicationError_ApplicationAlreadyStarting = 110;
+ /** native declaration : headers\openvr_capi.h:931 */
+ public static final int EVRApplicationError_VRApplicationError_LaunchInProgress = 111;
+ /** native declaration : headers\openvr_capi.h:932 */
+ public static final int EVRApplicationError_VRApplicationError_OldApplicationQuitting = 112;
+ /** native declaration : headers\openvr_capi.h:933 */
+ public static final int EVRApplicationError_VRApplicationError_TransitionAborted = 113;
+ /** native declaration : headers\openvr_capi.h:934 */
+ public static final int EVRApplicationError_VRApplicationError_IsTemplate = 114;
+ /** native declaration : headers\openvr_capi.h:935 */
+ public static final int EVRApplicationError_VRApplicationError_SteamVRIsExiting = 115;
+ /** native declaration : headers\openvr_capi.h:936 */
+ public static final int EVRApplicationError_VRApplicationError_BufferTooSmall = 200;
+ /** native declaration : headers\openvr_capi.h:937 */
+ public static final int EVRApplicationError_VRApplicationError_PropertyNotSet = 201;
+ /** native declaration : headers\openvr_capi.h:938 */
+ public static final int EVRApplicationError_VRApplicationError_UnknownProperty = 202;
+ /** native declaration : headers\openvr_capi.h:939 */
+ public static final int EVRApplicationError_VRApplicationError_InvalidParameter = 203;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:959
+ * enum values
+ */
+ public static interface EVRApplicationProperty {
+ /** native declaration : headers\openvr_capi.h:942 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_Name_String = 0;
+ /** native declaration : headers\openvr_capi.h:943 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_LaunchType_String = 11;
+ /** native declaration : headers\openvr_capi.h:944 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_WorkingDirectory_String = 12;
+ /** native declaration : headers\openvr_capi.h:945 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_BinaryPath_String = 13;
+ /** native declaration : headers\openvr_capi.h:946 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_Arguments_String = 14;
+ /** native declaration : headers\openvr_capi.h:947 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_URL_String = 15;
+ /** native declaration : headers\openvr_capi.h:948 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_Description_String = 50;
+ /** native declaration : headers\openvr_capi.h:949 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_NewsURL_String = 51;
+ /** native declaration : headers\openvr_capi.h:950 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_ImagePath_String = 52;
+ /** native declaration : headers\openvr_capi.h:951 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_Source_String = 53;
+ /** native declaration : headers\openvr_capi.h:952 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_ActionManifestURL_String = 54;
+ /** native declaration : headers\openvr_capi.h:953 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_IsDashboardOverlay_Bool = 60;
+ /** native declaration : headers\openvr_capi.h:954 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_IsTemplate_Bool = 61;
+ /** native declaration : headers\openvr_capi.h:955 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_IsInstanced_Bool = 62;
+ /** native declaration : headers\openvr_capi.h:956 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_IsInternal_Bool = 63;
+ /** native declaration : headers\openvr_capi.h:957 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_WantsCompositorPauseInStandby_Bool = 64;
+ /** native declaration : headers\openvr_capi.h:958 */
+ public static final int EVRApplicationProperty_VRApplicationProperty_LastLaunchTime_Uint64 = 70;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:965
+ * enum values
+ */
+ public static interface EVRApplicationTransitionState {
+ /** native declaration : headers\openvr_capi.h:961 */
+ public static final int EVRApplicationTransitionState_VRApplicationTransition_None = 0;
+ /** native declaration : headers\openvr_capi.h:962 */
+ public static final int EVRApplicationTransitionState_VRApplicationTransition_OldAppQuitSent = 10;
+ /** native declaration : headers\openvr_capi.h:963 */
+ public static final int EVRApplicationTransitionState_VRApplicationTransition_WaitingForExternalLaunch = 11;
+ /** native declaration : headers\openvr_capi.h:964 */
+ public static final int EVRApplicationTransitionState_VRApplicationTransition_NewAppLaunched = 20;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:977
+ * enum values
+ */
+ public static interface ChaperoneCalibrationState {
+ /** native declaration : headers\openvr_capi.h:967 */
+ public static final int ChaperoneCalibrationState_OK = 1;
+ /** native declaration : headers\openvr_capi.h:968 */
+ public static final int ChaperoneCalibrationState_Warning = 100;
+ /** native declaration : headers\openvr_capi.h:969 */
+ public static final int ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved = 101;
+ /** native declaration : headers\openvr_capi.h:970 */
+ public static final int ChaperoneCalibrationState_Warning_BaseStationRemoved = 102;
+ /** native declaration : headers\openvr_capi.h:971 */
+ public static final int ChaperoneCalibrationState_Warning_SeatedBoundsInvalid = 103;
+ /** native declaration : headers\openvr_capi.h:972 */
+ public static final int ChaperoneCalibrationState_Error = 200;
+ /** native declaration : headers\openvr_capi.h:973 */
+ public static final int ChaperoneCalibrationState_Error_BaseStationUninitialized = 201;
+ /** native declaration : headers\openvr_capi.h:974 */
+ public static final int ChaperoneCalibrationState_Error_BaseStationConflict = 202;
+ /** native declaration : headers\openvr_capi.h:975 */
+ public static final int ChaperoneCalibrationState_Error_PlayAreaInvalid = 203;
+ /** native declaration : headers\openvr_capi.h:976 */
+ public static final int ChaperoneCalibrationState_Error_CollisionBoundsInvalid = 204;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:981
+ * enum values
+ */
+ public static interface EChaperoneConfigFile {
+ /** native declaration : headers\openvr_capi.h:979 */
+ public static final int EChaperoneConfigFile_Live = 1;
+ /** native declaration : headers\openvr_capi.h:980 */
+ public static final int EChaperoneConfigFile_Temp = 2;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:984
+ * enum values
+ */
+ public static interface EChaperoneImportFlags {
+ /** native declaration : headers\openvr_capi.h:983 */
+ public static final int EChaperoneImportFlags_EChaperoneImport_BoundsOnly = 1;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:998
+ * enum values
+ */
+ public static interface EVRCompositorError {
+ /** native declaration : headers\openvr_capi.h:986 */
+ public static final int EVRCompositorError_VRCompositorError_None = 0;
+ /** native declaration : headers\openvr_capi.h:987 */
+ public static final int EVRCompositorError_VRCompositorError_RequestFailed = 1;
+ /** native declaration : headers\openvr_capi.h:988 */
+ public static final int EVRCompositorError_VRCompositorError_IncompatibleVersion = 100;
+ /** native declaration : headers\openvr_capi.h:989 */
+ public static final int EVRCompositorError_VRCompositorError_DoNotHaveFocus = 101;
+ /** native declaration : headers\openvr_capi.h:990 */
+ public static final int EVRCompositorError_VRCompositorError_InvalidTexture = 102;
+ /** native declaration : headers\openvr_capi.h:991 */
+ public static final int EVRCompositorError_VRCompositorError_IsNotSceneApplication = 103;
+ /** native declaration : headers\openvr_capi.h:992 */
+ public static final int EVRCompositorError_VRCompositorError_TextureIsOnWrongDevice = 104;
+ /** native declaration : headers\openvr_capi.h:993 */
+ public static final int EVRCompositorError_VRCompositorError_TextureUsesUnsupportedFormat = 105;
+ /** native declaration : headers\openvr_capi.h:994 */
+ public static final int EVRCompositorError_VRCompositorError_SharedTexturesNotSupported = 106;
+ /** native declaration : headers\openvr_capi.h:995 */
+ public static final int EVRCompositorError_VRCompositorError_IndexOutOfRange = 107;
+ /** native declaration : headers\openvr_capi.h:996 */
+ public static final int EVRCompositorError_VRCompositorError_AlreadySubmitted = 108;
+ /** native declaration : headers\openvr_capi.h:997 */
+ public static final int EVRCompositorError_VRCompositorError_InvalidBounds = 109;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1003
+ * enum values
+ */
+ public static interface EVRCompositorTimingMode {
+ /** native declaration : headers\openvr_capi.h:1000 */
+ public static final int EVRCompositorTimingMode_VRCompositorTimingMode_Implicit = 0;
+ /** native declaration : headers\openvr_capi.h:1001 */
+ public static final int EVRCompositorTimingMode_VRCompositorTimingMode_Explicit_RuntimePerformsPostPresentHandoff = 1;
+ /** native declaration : headers\openvr_capi.h:1002 */
+ public static final int EVRCompositorTimingMode_VRCompositorTimingMode_Explicit_ApplicationPerformsPostPresentHandoff = 2;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1008
+ * enum values
+ */
+ public static interface VROverlayInputMethod {
+ /** native declaration : headers\openvr_capi.h:1005 */
+ public static final int VROverlayInputMethod_None = 0;
+ /** native declaration : headers\openvr_capi.h:1006 */
+ public static final int VROverlayInputMethod_Mouse = 1;
+ /** native declaration : headers\openvr_capi.h:1007 */
+ public static final int VROverlayInputMethod_DualAnalog = 2;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1014
+ * enum values
+ */
+ public static interface VROverlayTransformType {
+ /** native declaration : headers\openvr_capi.h:1010 */
+ public static final int VROverlayTransformType_VROverlayTransform_Absolute = 0;
+ /** native declaration : headers\openvr_capi.h:1011 */
+ public static final int VROverlayTransformType_VROverlayTransform_TrackedDeviceRelative = 1;
+ /** native declaration : headers\openvr_capi.h:1012 */
+ public static final int VROverlayTransformType_VROverlayTransform_SystemOverlay = 2;
+ /** native declaration : headers\openvr_capi.h:1013 */
+ public static final int VROverlayTransformType_VROverlayTransform_TrackedComponent = 3;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1032
+ * enum values
+ */
+ public static interface VROverlayFlags {
+ /** native declaration : headers\openvr_capi.h:1016 */
+ public static final int VROverlayFlags_None = 0;
+ /** native declaration : headers\openvr_capi.h:1017 */
+ public static final int VROverlayFlags_Curved = 1;
+ /** native declaration : headers\openvr_capi.h:1018 */
+ public static final int VROverlayFlags_RGSS4X = 2;
+ /** native declaration : headers\openvr_capi.h:1019 */
+ public static final int VROverlayFlags_NoDashboardTab = 3;
+ /** native declaration : headers\openvr_capi.h:1020 */
+ public static final int VROverlayFlags_AcceptsGamepadEvents = 4;
+ /** native declaration : headers\openvr_capi.h:1021 */
+ public static final int VROverlayFlags_ShowGamepadFocus = 5;
+ /** native declaration : headers\openvr_capi.h:1022 */
+ public static final int VROverlayFlags_SendVRScrollEvents = 6;
+ /** native declaration : headers\openvr_capi.h:1023 */
+ public static final int VROverlayFlags_SendVRTouchpadEvents = 7;
+ /** native declaration : headers\openvr_capi.h:1024 */
+ public static final int VROverlayFlags_ShowTouchPadScrollWheel = 8;
+ /** native declaration : headers\openvr_capi.h:1025 */
+ public static final int VROverlayFlags_TransferOwnershipToInternalProcess = 9;
+ /** native declaration : headers\openvr_capi.h:1026 */
+ public static final int VROverlayFlags_SideBySide_Parallel = 10;
+ /** native declaration : headers\openvr_capi.h:1027 */
+ public static final int VROverlayFlags_SideBySide_Crossed = 11;
+ /** native declaration : headers\openvr_capi.h:1028 */
+ public static final int VROverlayFlags_Panorama = 12;
+ /** native declaration : headers\openvr_capi.h:1029 */
+ public static final int VROverlayFlags_StereoPanorama = 13;
+ /** native declaration : headers\openvr_capi.h:1030 */
+ public static final int VROverlayFlags_SortWithNonSceneOverlays = 14;
+ /** native declaration : headers\openvr_capi.h:1031 */
+ public static final int VROverlayFlags_VisibleInDashboard = 15;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1041
+ * enum values
+ */
+ public static interface VRMessageOverlayResponse {
+ /** native declaration : headers\openvr_capi.h:1034 */
+ public static final int VRMessageOverlayResponse_ButtonPress_0 = 0;
+ /** native declaration : headers\openvr_capi.h:1035 */
+ public static final int VRMessageOverlayResponse_ButtonPress_1 = 1;
+ /** native declaration : headers\openvr_capi.h:1036 */
+ public static final int VRMessageOverlayResponse_ButtonPress_2 = 2;
+ /** native declaration : headers\openvr_capi.h:1037 */
+ public static final int VRMessageOverlayResponse_ButtonPress_3 = 3;
+ /** native declaration : headers\openvr_capi.h:1038 */
+ public static final int VRMessageOverlayResponse_CouldntFindSystemOverlay = 4;
+ /** native declaration : headers\openvr_capi.h:1039 */
+ public static final int VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay = 5;
+ /** native declaration : headers\openvr_capi.h:1040 */
+ public static final int VRMessageOverlayResponse_ApplicationQuit = 6;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1046
+ * enum values
+ */
+ public static interface EGamepadTextInputMode {
+ /** native declaration : headers\openvr_capi.h:1043 */
+ public static final int EGamepadTextInputMode_k_EGamepadTextInputModeNormal = 0;
+ /** native declaration : headers\openvr_capi.h:1044 */
+ public static final int EGamepadTextInputMode_k_EGamepadTextInputModePassword = 1;
+ /** native declaration : headers\openvr_capi.h:1045 */
+ public static final int EGamepadTextInputMode_k_EGamepadTextInputModeSubmit = 2;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1050
+ * enum values
+ */
+ public static interface EGamepadTextInputLineMode {
+ /** native declaration : headers\openvr_capi.h:1048 */
+ public static final int EGamepadTextInputLineMode_k_EGamepadTextInputLineModeSingleLine = 0;
+ /** native declaration : headers\openvr_capi.h:1049 */
+ public static final int EGamepadTextInputLineMode_k_EGamepadTextInputLineModeMultipleLines = 1;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1057
+ * enum values
+ */
+ public static interface EOverlayDirection {
+ /** native declaration : headers\openvr_capi.h:1052 */
+ public static final int EOverlayDirection_OverlayDirection_Up = 0;
+ /** native declaration : headers\openvr_capi.h:1053 */
+ public static final int EOverlayDirection_OverlayDirection_Down = 1;
+ /** native declaration : headers\openvr_capi.h:1054 */
+ public static final int EOverlayDirection_OverlayDirection_Left = 2;
+ /** native declaration : headers\openvr_capi.h:1055 */
+ public static final int EOverlayDirection_OverlayDirection_Right = 3;
+ /** native declaration : headers\openvr_capi.h:1056 */
+ public static final int EOverlayDirection_OverlayDirection_Count = 4;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1061
+ * enum values
+ */
+ public static interface EVROverlayIntersectionMaskPrimitiveType {
+ /** native declaration : headers\openvr_capi.h:1059 */
+ public static final int EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Rectangle = 0;
+ /** native declaration : headers\openvr_capi.h:1060 */
+ public static final int EVROverlayIntersectionMaskPrimitiveType_OverlayIntersectionPrimitiveType_Circle = 1;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1076
+ * enum values
+ */
+ public static interface EVRRenderModelError {
+ /** native declaration : headers\openvr_capi.h:1063 */
+ public static final int EVRRenderModelError_VRRenderModelError_None = 0;
+ /** native declaration : headers\openvr_capi.h:1064 */
+ public static final int EVRRenderModelError_VRRenderModelError_Loading = 100;
+ /** native declaration : headers\openvr_capi.h:1065 */
+ public static final int EVRRenderModelError_VRRenderModelError_NotSupported = 200;
+ /** native declaration : headers\openvr_capi.h:1066 */
+ public static final int EVRRenderModelError_VRRenderModelError_InvalidArg = 300;
+ /** native declaration : headers\openvr_capi.h:1067 */
+ public static final int EVRRenderModelError_VRRenderModelError_InvalidModel = 301;
+ /** native declaration : headers\openvr_capi.h:1068 */
+ public static final int EVRRenderModelError_VRRenderModelError_NoShapes = 302;
+ /** native declaration : headers\openvr_capi.h:1069 */
+ public static final int EVRRenderModelError_VRRenderModelError_MultipleShapes = 303;
+ /** native declaration : headers\openvr_capi.h:1070 */
+ public static final int EVRRenderModelError_VRRenderModelError_TooManyVertices = 304;
+ /** native declaration : headers\openvr_capi.h:1071 */
+ public static final int EVRRenderModelError_VRRenderModelError_MultipleTextures = 305;
+ /** native declaration : headers\openvr_capi.h:1072 */
+ public static final int EVRRenderModelError_VRRenderModelError_BufferTooSmall = 306;
+ /** native declaration : headers\openvr_capi.h:1073 */
+ public static final int EVRRenderModelError_VRRenderModelError_NotEnoughNormals = 307;
+ /** native declaration : headers\openvr_capi.h:1074 */
+ public static final int EVRRenderModelError_VRRenderModelError_NotEnoughTexCoords = 308;
+ /** native declaration : headers\openvr_capi.h:1075 */
+ public static final int EVRRenderModelError_VRRenderModelError_InvalidTexture = 400;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1083
+ * enum values
+ */
+ public static interface EVRComponentProperty {
+ /** native declaration : headers\openvr_capi.h:1078 */
+ public static final int EVRComponentProperty_VRComponentProperty_IsStatic = 1;
+ /** native declaration : headers\openvr_capi.h:1079 */
+ public static final int EVRComponentProperty_VRComponentProperty_IsVisible = 2;
+ /** native declaration : headers\openvr_capi.h:1080 */
+ public static final int EVRComponentProperty_VRComponentProperty_IsTouched = 4;
+ /** native declaration : headers\openvr_capi.h:1081 */
+ public static final int EVRComponentProperty_VRComponentProperty_IsPressed = 8;
+ /** native declaration : headers\openvr_capi.h:1082 */
+ public static final int EVRComponentProperty_VRComponentProperty_IsScrolled = 16;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1088
+ * enum values
+ */
+ public static interface EVRNotificationType {
+ /** native declaration : headers\openvr_capi.h:1085 */
+ public static final int EVRNotificationType_Transient = 0;
+ /** native declaration : headers\openvr_capi.h:1086 */
+ public static final int EVRNotificationType_Persistent = 1;
+ /** native declaration : headers\openvr_capi.h:1087 */
+ public static final int EVRNotificationType_Transient_SystemWithUserValue = 2;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1095
+ * enum values
+ */
+ public static interface EVRNotificationStyle {
+ /** native declaration : headers\openvr_capi.h:1090 */
+ public static final int EVRNotificationStyle_None = 0;
+ /** native declaration : headers\openvr_capi.h:1091 */
+ public static final int EVRNotificationStyle_Application = 100;
+ /** native declaration : headers\openvr_capi.h:1092 */
+ public static final int EVRNotificationStyle_Contact_Disabled = 200;
+ /** native declaration : headers\openvr_capi.h:1093 */
+ public static final int EVRNotificationStyle_Contact_Enabled = 201;
+ /** native declaration : headers\openvr_capi.h:1094 */
+ public static final int EVRNotificationStyle_Contact_Active = 202;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1103
+ * enum values
+ */
+ public static interface EVRSettingsError {
+ /** native declaration : headers\openvr_capi.h:1097 */
+ public static final int EVRSettingsError_VRSettingsError_None = 0;
+ /** native declaration : headers\openvr_capi.h:1098 */
+ public static final int EVRSettingsError_VRSettingsError_IPCFailed = 1;
+ /** native declaration : headers\openvr_capi.h:1099 */
+ public static final int EVRSettingsError_VRSettingsError_WriteFailed = 2;
+ /** native declaration : headers\openvr_capi.h:1100 */
+ public static final int EVRSettingsError_VRSettingsError_ReadFailed = 3;
+ /** native declaration : headers\openvr_capi.h:1101 */
+ public static final int EVRSettingsError_VRSettingsError_JsonParseFailed = 4;
+ /** native declaration : headers\openvr_capi.h:1102 */
+ public static final int EVRSettingsError_VRSettingsError_UnsetSettingHasNoDefault = 5;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1111
+ * enum values
+ */
+ public static interface EVRScreenshotError {
+ /** native declaration : headers\openvr_capi.h:1105 */
+ public static final int EVRScreenshotError_VRScreenshotError_None = 0;
+ /** native declaration : headers\openvr_capi.h:1106 */
+ public static final int EVRScreenshotError_VRScreenshotError_RequestFailed = 1;
+ /** native declaration : headers\openvr_capi.h:1107 */
+ public static final int EVRScreenshotError_VRScreenshotError_IncompatibleVersion = 100;
+ /** native declaration : headers\openvr_capi.h:1108 */
+ public static final int EVRScreenshotError_VRScreenshotError_NotFound = 101;
+ /** native declaration : headers\openvr_capi.h:1109 */
+ public static final int EVRScreenshotError_VRScreenshotError_BufferTooSmall = 102;
+ /** native declaration : headers\openvr_capi.h:1110 */
+ public static final int EVRScreenshotError_VRScreenshotError_ScreenshotAlreadyInProgress = 108;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1116
+ * enum values
+ */
+ public static interface EVRSkeletalTransformSpace {
+ /** native declaration : headers\openvr_capi.h:1113 */
+ public static final int EVRSkeletalTransformSpace_VRSkeletalTransformSpace_Model = 0;
+ /** native declaration : headers\openvr_capi.h:1114 */
+ public static final int EVRSkeletalTransformSpace_VRSkeletalTransformSpace_Parent = 1;
+ /** native declaration : headers\openvr_capi.h:1115 */
+ public static final int EVRSkeletalTransformSpace_VRSkeletalTransformSpace_Additive = 2;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1120
+ * enum values
+ */
+ public static interface EVRInputFilterCancelType {
+ /** native declaration : headers\openvr_capi.h:1118 */
+ public static final int EVRInputFilterCancelType_VRInputFilterCancel_Timers = 0;
+ /** native declaration : headers\openvr_capi.h:1119 */
+ public static final int EVRInputFilterCancelType_VRInputFilterCancel_Momentum = 1;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1129
+ * enum values
+ */
+ public static interface EIOBufferError {
+ /** native declaration : headers\openvr_capi.h:1122 */
+ public static final int EIOBufferError_IOBuffer_Success = 0;
+ /** native declaration : headers\openvr_capi.h:1123 */
+ public static final int EIOBufferError_IOBuffer_OperationFailed = 100;
+ /** native declaration : headers\openvr_capi.h:1124 */
+ public static final int EIOBufferError_IOBuffer_InvalidHandle = 101;
+ /** native declaration : headers\openvr_capi.h:1125 */
+ public static final int EIOBufferError_IOBuffer_InvalidArgument = 102;
+ /** native declaration : headers\openvr_capi.h:1126 */
+ public static final int EIOBufferError_IOBuffer_PathExists = 103;
+ /** native declaration : headers\openvr_capi.h:1127 */
+ public static final int EIOBufferError_IOBuffer_PathDoesNotExist = 104;
+ /** native declaration : headers\openvr_capi.h:1128 */
+ public static final int EIOBufferError_IOBuffer_Permission = 105;
+ };
+ /**
+ * native declaration : headers\openvr_capi.h:1134
+ * enum values
+ */
+ public static interface EIOBufferMode {
+ /** native declaration : headers\openvr_capi.h:1131 */
+ public static final int EIOBufferMode_IOBufferMode_Read = 1;
+ /** native declaration : headers\openvr_capi.h:1132 */
+ public static final int EIOBufferMode_IOBufferMode_Write = 2;
+ /** native declaration : headers\openvr_capi.h:1133 */
+ public static final int EIOBufferMode_IOBufferMode_Create = 512;
+ };
+ /** OpenVR Constants */
+ public static final long k_nDriverNone = 4294967295L;
+ public static final int k_unMaxDriverDebugResponseSize = 32768;
+ public static final int k_unTrackedDeviceIndex_Hmd = 0;
+ public static final int k_unMaxTrackedDeviceCount = 64;
+ public static final int k_unTrackedDeviceIndexOther = -2;
+ public static final long k_unTrackedDeviceIndexInvalid = 4294967295L;
+ public static final long k_ulInvalidPropertyContainer = 0;
+ public static final int k_unInvalidPropertyTag = 0;
+ public static final long k_ulInvalidDriverHandle = 0;
+ public static final int k_unFloatPropertyTag = 1;
+ public static final int k_unInt32PropertyTag = 2;
+ public static final int k_unUint64PropertyTag = 3;
+ public static final int k_unBoolPropertyTag = 4;
+ public static final int k_unStringPropertyTag = 5;
+ public static final int k_unHmdMatrix34PropertyTag = 20;
+ public static final int k_unHmdMatrix44PropertyTag = 21;
+ public static final int k_unHmdVector3PropertyTag = 22;
+ public static final int k_unHmdVector4PropertyTag = 23;
+ public static final int k_unHiddenAreaPropertyTag = 30;
+ public static final int k_unPathHandleInfoTag = 31;
+ public static final int k_unActionPropertyTag = 32;
+ public static final int k_unInputValuePropertyTag = 33;
+ public static final int k_unWildcardPropertyTag = 34;
+ public static final int k_unHapticVibrationPropertyTag = 35;
+ public static final int k_unSkeletonPropertyTag = 36;
+ public static final int k_unSpatialAnchorPosePropertyTag = 40;
+ public static final int k_unOpenVRInternalReserved_Start = 1000;
+ public static final int k_unOpenVRInternalReserved_End = 10000;
+ public static final int k_unMaxPropertyStringSize = 32768;
+ public static final long k_ulInvalidActionHandle = 0;
+ public static final long k_ulInvalidActionSetHandle = 0;
+ public static final long k_ulInvalidInputValueHandle = 0;
+ public static final int k_unControllerStateAxisCount = 5;
+ public static final long k_ulOverlayHandleInvalid = 0;
+ public static final int k_unScreenshotHandleInvalid = 0;
+ public static final int k_unMaxApplicationKeyLength = 128;
+ public static final int k_unVROverlayMaxKeyLength = 128;
+ public static final int k_unVROverlayMaxNameLength = 128;
+ public static final int k_unMaxOverlayCount = 64;
+ public static final int k_unMaxOverlayIntersectionMaskPrimitivesCount = 32;
+ public static final int k_unNotificationTextMaxSize = 256;
+ public static final int k_unMaxSettingsKeyLength = 128;
+ public static final int k_unMaxActionNameLength = 64;
+ public static final int k_unMaxActionSetNameLength = 64;
+ public static final int k_unMaxActionOriginCount = 16;
+ public static final long k_ulInvalidIOBufferHandle = 0;
+ public static final int k_ulInvalidSpatialAnchorHandle = 0;
+
+
+ public static final String IVRSystem_Version = "IVRSystem_019";
+ public static final String IVRExtendedDisplay_Version = "IVRExtendedDisplay_001";
+ public static final String IVRTrackedCamera_Version = "IVRTrackedCamera_003";
+ public static final String k_pch_MimeType_HomeApp = "vr/home";
+ public static final String k_pch_MimeType_GameTheater = "vr/game_theater";
+ public static final String IVRApplications_Version = "IVRApplications_006";
+ public static final String IVRChaperone_Version = "IVRChaperone_003";
+ public static final String IVRChaperoneSetup_Version = "IVRChaperoneSetup_005";
+ public static final String IVRCompositor_Version = "IVRCompositor_022";
+ public static final String IVROverlay_Version = "IVROverlay_018";
+ public static final String k_pch_Controller_Component_GDC2015 = "gdc2015";
+ public static final String k_pch_Controller_Component_Base = "base";
+ public static final String k_pch_Controller_Component_Tip = "tip";
+ public static final String k_pch_Controller_Component_HandGrip = "handgrip";
+ public static final String k_pch_Controller_Component_Status = "status";
+ public static final String IVRRenderModels_Version = "IVRRenderModels_006";
+ public static final String IVRNotifications_Version = "IVRNotifications_002";
+ public static final String IVRSettings_Version = "IVRSettings_002";
+ public static final String k_pch_SteamVR_Section = "steamvr";
+ public static final String k_pch_SteamVR_RequireHmd_String = "requireHmd";
+ public static final String k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver";
+ public static final String k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd";
+ public static final String k_pch_SteamVR_DisplayDebug_Bool = "displayDebug";
+ public static final String k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe";
+ public static final String k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX";
+ public static final String k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY";
+ public static final String k_pch_SteamVR_SendSystemButtonToAllApps_Bool = "sendSystemButtonToAllApps";
+ public static final String k_pch_SteamVR_LogLevel_Int32 = "loglevel";
+ public static final String k_pch_SteamVR_IPD_Float = "ipd";
+ public static final String k_pch_SteamVR_Background_String = "background";
+ public static final String k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection";
+ public static final String k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight";
+ public static final String k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius";
+ public static final String k_pch_SteamVR_GridColor_String = "gridColor";
+ public static final String k_pch_SteamVR_PlayAreaColor_String = "playAreaColor";
+ public static final String k_pch_SteamVR_ShowStage_Bool = "showStage";
+ public static final String k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
+ public static final String k_pch_SteamVR_DirectMode_Bool = "directMode";
+ public static final String k_pch_SteamVR_DirectModeEdidVid_Int32 = "directModeEdidVid";
+ public static final String k_pch_SteamVR_DirectModeEdidPid_Int32 = "directModeEdidPid";
+ public static final String k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers";
+ public static final String k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees";
+ public static final String k_pch_SteamVR_BaseStationPowerManagement_Bool = "basestationPowerManagement";
+ public static final String k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
+ public static final String k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
+ public static final String k_pch_SteamVR_AllowAsyncReprojection_Bool = "allowAsyncReprojection";
+ public static final String k_pch_SteamVR_AllowReprojection_Bool = "allowInterleavedReprojection";
+ public static final String k_pch_SteamVR_ForceReprojection_Bool = "forceReprojection";
+ public static final String k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking";
+ public static final String k_pch_SteamVR_DefaultMirrorView_Int32 = "defaultMirrorView";
+ public static final String k_pch_SteamVR_ShowMirrorView_Bool = "showMirrorView";
+ public static final String k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry";
+ public static final String k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch";
+ public static final String k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch";
+ public static final String k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch";
+ public static final String k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard";
+ public static final String k_pch_SteamVR_EnableHomeApp = "enableHomeApp";
+ public static final String k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec";
+ public static final String k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
+ public static final String k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
+ public static final String k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+ public static final String k_pch_SteamVR_SupersampleManualOverride_Bool = "supersampleManualOverride";
+ public static final String k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync";
+ public static final String k_pch_SteamVR_AllowDisplayLockedMode_Bool = "allowDisplayLockedMode";
+ public static final String k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool = "haveStartedTutorialForNativeChaperoneDriver";
+ public static final String k_pch_SteamVR_ForceWindows32bitVRMonitor = "forceWindows32BitVRMonitor";
+ public static final String k_pch_SteamVR_DebugInput = "debugInput";
+ public static final String k_pch_SteamVR_LegacyInputRebinding = "legacyInputRebinding";
+ public static final String k_pch_SteamVR_DebugInputBinding = "debugInputBinding";
+ public static final String k_pch_SteamVR_InputBindingUIBlock = "inputBindingUI";
+ public static final String k_pch_SteamVR_RenderCameraMode = "renderCameraMode";
+ public static final String k_pch_Lighthouse_Section = "driver_lighthouse";
+ public static final String k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
+ public static final String k_pch_Lighthouse_DisableIMUExceptHMD_Bool = "disableimuexcepthmd";
+ public static final String k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation";
+ public static final String k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug";
+ public static final String k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation";
+ public static final String k_pch_Lighthouse_DBHistory_Bool = "dbhistory";
+ public static final String k_pch_Lighthouse_EnableBluetooth_Bool = "enableBluetooth";
+ public static final String k_pch_Lighthouse_PowerManagedBaseStations_String = "PowerManagedBaseStations";
+ public static final String k_pch_Null_Section = "driver_null";
+ public static final String k_pch_Null_SerialNumber_String = "serialNumber";
+ public static final String k_pch_Null_ModelNumber_String = "modelNumber";
+ public static final String k_pch_Null_WindowX_Int32 = "windowX";
+ public static final String k_pch_Null_WindowY_Int32 = "windowY";
+ public static final String k_pch_Null_WindowWidth_Int32 = "windowWidth";
+ public static final String k_pch_Null_WindowHeight_Int32 = "windowHeight";
+ public static final String k_pch_Null_RenderWidth_Int32 = "renderWidth";
+ public static final String k_pch_Null_RenderHeight_Int32 = "renderHeight";
+ public static final String k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons";
+ public static final String k_pch_Null_DisplayFrequency_Float = "displayFrequency";
+ public static final String k_pch_UserInterface_Section = "userinterface";
+ public static final String k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop";
+ public static final String k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray";
+ public static final String k_pch_UserInterface_Screenshots_Bool = "screenshots";
+ public static final String k_pch_UserInterface_ScreenshotType_Int = "screenshotType";
+ public static final String k_pch_Notifications_Section = "notifications";
+ public static final String k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb";
+ public static final String k_pch_Keyboard_Section = "keyboard";
+ public static final String k_pch_Keyboard_TutorialCompletions = "TutorialCompletions";
+ public static final String k_pch_Keyboard_ScaleX = "ScaleX";
+ public static final String k_pch_Keyboard_ScaleY = "ScaleY";
+ public static final String k_pch_Keyboard_OffsetLeftX = "OffsetLeftX";
+ public static final String k_pch_Keyboard_OffsetRightX = "OffsetRightX";
+ public static final String k_pch_Keyboard_OffsetY = "OffsetY";
+ public static final String k_pch_Keyboard_Smoothing = "Smoothing";
+ public static final String k_pch_Perf_Section = "perfcheck";
+ public static final String k_pch_Perf_HeuristicActive_Bool = "heuristicActive";
+ public static final String k_pch_Perf_NotifyInHMD_Bool = "warnInHMD";
+ public static final String k_pch_Perf_NotifyOnlyOnce_Bool = "warnOnlyOnce";
+ public static final String k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore";
+ public static final String k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit";
+ public static final String k_pch_Perf_TestData_Float = "perfTestData";
+ public static final String k_pch_Perf_LinuxGPUProfiling_Bool = "linuxGPUProfiling";
+ public static final String k_pch_CollisionBounds_Section = "collisionBounds";
+ public static final String k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle";
+ public static final String k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn";
+ public static final String k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn";
+ public static final String k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn";
+ public static final String k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance";
+ public static final String k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR";
+ public static final String k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG";
+ public static final String k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB";
+ public static final String k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA";
+ public static final String k_pch_Camera_Section = "camera";
+ public static final String k_pch_Camera_EnableCamera_Bool = "enableCamera";
+ public static final String k_pch_Camera_EnableCameraInDashboard_Bool = "enableCameraInDashboard";
+ public static final String k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds";
+ public static final String k_pch_Camera_EnableCameraForRoomView_Bool = "enableCameraForRoomView";
+ public static final String k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR";
+ public static final String k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG";
+ public static final String k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB";
+ public static final String k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA";
+ public static final String k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength";
+ public static final String k_pch_Camera_RoomViewMode_Int32 = "cameraRoomViewMode";
+ public static final String k_pch_audio_Section = "audio";
+ public static final String k_pch_audio_OnPlaybackDevice_String = "onPlaybackDevice";
+ public static final String k_pch_audio_OnRecordDevice_String = "onRecordDevice";
+ public static final String k_pch_audio_OnPlaybackMirrorDevice_String = "onPlaybackMirrorDevice";
+ public static final String k_pch_audio_OffPlaybackDevice_String = "offPlaybackDevice";
+ public static final String k_pch_audio_OffRecordDevice_String = "offRecordDevice";
+ public static final String k_pch_audio_VIVEHDMIGain = "viveHDMIGain";
+ public static final String k_pch_Power_Section = "power";
+ public static final String k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit";
+ public static final String k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout";
+ public static final String k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout";
+ public static final String k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout";
+ public static final String k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress";
+ public static final String k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby";
+ public static final String k_pch_Dashboard_Section = "dashboard";
+ public static final String k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard";
+ public static final String k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode";
+ public static final String k_pch_Dashboard_EnableWebUI = "webUI";
+ public static final String k_pch_Dashboard_EnableWebUIDevTools = "webUIDevTools";
+ public static final String k_pch_Dashboard_EnableWebUIDashboardReplacement = "webUIDashboard";
+ public static final String k_pch_modelskin_Section = "modelskins";
+ public static final String k_pch_Driver_Enable_Bool = "enable";
+ public static final String k_pch_WebInterface_Section = "WebInterface";
+ public static final String k_pch_WebInterface_WebEnable_Bool = "WebEnable";
+ public static final String k_pch_WebInterface_WebPort_String = "WebPort";
+ public static final String k_pch_TrackingOverride_Section = "TrackingOverrides";
+ public static final String k_pch_App_BindingAutosaveURLSuffix_String = "AutosaveURL";
+ public static final String k_pch_App_BindingCurrentURLSuffix_String = "CurrentURL";
+ public static final String k_pch_App_NeedToUpdateAutosaveSuffix_Bool = "NeedToUpdateAutosave";
+ public static final String k_pch_App_ActionManifestURL_String = "ActionManifestURL";
+ public static final String k_pch_Trackers_Section = "trackers";
+ public static final String IVRScreenshots_Version = "IVRScreenshots_001";
+ public static final String IVRResources_Version = "IVRResources_001";
+ public static final String IVRDriverManager_Version = "IVRDriverManager_001";
+ public static final String IVRInput_Version = "IVRInput_004";
+ public static final String IVRIOBuffer_Version = "IVRIOBuffer_001";
+ public static final String IVRSpatialAnchors_Version = "IVRSpatialAnchors_001";
+
+
+ /**
+ * Global entry points
+ * Original signature : intptr_t VR_InitInternal(EVRInitError*, EVRApplicationType)
+ * native declaration : headers\openvr_capi.h:2378
+ * @deprecated use the safer methods {@link #VR_InitInternal(java.nio.IntBuffer, int)} and {@link #VR_InitInternal(com.sun.jna.ptr.IntByReference, int)} instead
+ */
+ @Deprecated
+ public static native IntByReference VR_InitInternal(IntByReference peError, int eType);
+ /**
+ * Global entry points
+ * Original signature : intptr_t VR_InitInternal(EVRInitError*, EVRApplicationType)
+ * native declaration : headers\openvr_capi.h:2378
+ */
+ public static native IntByReference VR_InitInternal(IntBuffer peError, int eType);
+ /**
+ * Original signature : void VR_ShutdownInternal()
+ * native declaration : headers\openvr_capi.h:2380
+ */
+ public static native void VR_ShutdownInternal();
+ /**
+ * Original signature : bool VR_IsHmdPresent()
+ * native declaration : headers\openvr_capi.h:2382
+ */
+ public static native byte VR_IsHmdPresent();
+ /**
+ * Original signature : intptr_t VR_GetGenericInterface(const char*, EVRInitError*)
+ * native declaration : headers\openvr_capi.h:2384
+ * @deprecated use the safer methods {@link #VR_GetGenericInterface(java.lang.String, java.nio.IntBuffer)} and {@link #VR_GetGenericInterface(com.sun.jna.Pointer, com.sun.jna.ptr.IntByReference)} instead
+ */
+ @Deprecated
+ public static native IntByReference VR_GetGenericInterface(Pointer pchInterfaceVersion, IntByReference peError);
+ /**
+ * Original signature : intptr_t VR_GetGenericInterface(const char*, EVRInitError*)
+ * native declaration : headers\openvr_capi.h:2384
+ */
+ public static native IntByReference VR_GetGenericInterface(String pchInterfaceVersion, IntByReference peError);
+ /**
+ * Original signature : bool VR_IsRuntimeInstalled()
+ * native declaration : headers\openvr_capi.h:2386
+ */
+ public static native byte VR_IsRuntimeInstalled();
+ /**
+ * Original signature : char* VR_GetVRInitErrorAsSymbol(EVRInitError)
+ * native declaration : headers\openvr_capi.h:2388
+ */
+ public static native Pointer VR_GetVRInitErrorAsSymbol(int error);
+ /**
+ * Original signature : char* VR_GetVRInitErrorAsEnglishDescription(EVRInitError)
+ * native declaration : headers\openvr_capi.h:2390
+ */
+ public static native Pointer VR_GetVRInitErrorAsEnglishDescription(int error);
+ public static class VkQueue_T extends PointerType {
+ public VkQueue_T(Pointer address) {
+ super(address);
+ }
+ public VkQueue_T() {
+ super();
+ }
+ };
+ public static class VkPhysicalDevice_T extends PointerType {
+ public VkPhysicalDevice_T(Pointer address) {
+ super(address);
+ }
+ public VkPhysicalDevice_T() {
+ super();
+ }
+ };
+ public static class VkInstance_T extends PointerType {
+ public VkInstance_T(Pointer address) {
+ super(address);
+ }
+ public VkInstance_T() {
+ super();
+ }
+ };
+ public static class ID3D12CommandQueue extends PointerType {
+ public ID3D12CommandQueue(Pointer address) {
+ super(address);
+ }
+ public ID3D12CommandQueue() {
+ super();
+ }
+ };
+ public static class ID3D12Resource extends PointerType {
+ public ID3D12Resource(Pointer address) {
+ super(address);
+ }
+ public ID3D12Resource() {
+ super();
+ }
+ };
+ public static class VkDevice_T extends PointerType {
+ public VkDevice_T(Pointer address) {
+ super(address);
+ }
+ public VkDevice_T() {
+ super();
+ }
+ };
}
diff --git a/jme3-vr/src/main/java/com/jme3/system/jopenvr/NotificationBitmap_t.java b/jme3-vr/src/main/java/com/jme3/system/jopenvr/NotificationBitmap_t.java
index 1a932f1ec0..217eedb2c5 100644
--- a/jme3-vr/src/main/java/com/jme3/system/jopenvr/NotificationBitmap_t.java
+++ b/jme3-vr/src/main/java/com/jme3/system/jopenvr/NotificationBitmap_t.java
@@ -4,44 +4,44 @@
import java.util.Arrays;
import java.util.List;
/**
- * native declaration : headers\openvr_capi.h:1263
- * This file was autogenerated by JNAerator,
- * a tool written by Olivier Chafik that uses a few opensource projects..
- * For help, please visit NativeLibs4Java , Rococoa, or JNA.
- */
-public class NotificationBitmap_t extends Structure {
+ * native declaration : headers\openvr_capi.h:1588
+ * This file was autogenerated by JNAerator,
+ * a tool written by Olivier Chafik that uses a few opensource projects..
+ * For help, please visit NativeLibs4Java , Rococoa, or JNA.
+ */
+public class NotificationBitmap_t extends Structure {
/**
- * void *
- * C type : void*
- */
- public Pointer m_pImageData;
- public int m_nWidth;
- public int m_nHeight;
- public int m_nBytesPerPixel;
- public NotificationBitmap_t() {
- super();
- }
- protected List