diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRMouseManager.java b/jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRMouseManager.java
index 8d73e7c04..97c0c2a3a 100644
--- a/jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRMouseManager.java
+++ b/jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRMouseManager.java
@@ -9,7 +9,6 @@ import com.jme3.input.MouseInput;
import com.jme3.input.lwjgl.GlfwMouseInputVR;
import com.jme3.material.RenderState.BlendMode;
import com.jme3.math.Vector2f;
-import com.jme3.scene.Node;
import com.jme3.system.AppSettings;
import com.jme3.system.lwjgl.LwjglWindow;
import com.jme3.texture.Texture;
@@ -27,8 +26,8 @@ public abstract class AbstractVRMouseManager implements VRMouseManager {
private VREnvironment environment = null;
-
-
+ private boolean vrMouseEnabled = true;
+ private boolean mouseAttached = false;
private Picture mouseImage;
private int recentCenterCount = 0;
@@ -70,6 +69,11 @@ public abstract class AbstractVRMouseManager implements VRMouseManager {
public VREnvironment getVREnvironment() {
return environment;
}
+
+ @Override
+ public void setVRMouseEnabled(boolean enabled) {
+ vrMouseEnabled = enabled;
+ }
@Override
public void setThumbstickMode(boolean set) {
@@ -185,10 +189,9 @@ public abstract class AbstractVRMouseManager implements VRMouseManager {
@Override
public void update(float tpf) {
// if we are showing the cursor, add our picture as it
-
- if( environment.getApplication().getInputManager().isCursorVisible() ) {
- if( mouseImage.getParent() == null ) {
-
+ if( vrMouseEnabled && environment.getApplication().getInputManager().isCursorVisible() ) {
+ if(!mouseAttached) {
+ mouseAttached = true;
environment.getApplication().getGuiViewPort().attachScene(mouseImage);
centerMouse();
// the "real" mouse pointer should stay hidden
@@ -216,13 +219,13 @@ public abstract class AbstractVRMouseManager implements VRMouseManager {
mouseImage.updateGeometricState();
- } else if( mouseImage.getParent() != null ) {
- Node n = mouseImage.getParent();
- mouseImage.removeFromParent();
-
- if (n != null){
- n.updateGeometricState();
- }
+ } else if(mouseAttached) {
+ mouseAttached = false;
+ environment.getApplication().getGuiViewPort().detachScene(mouseImage);
+
+ // Use the setCursorVisible implementation to show the cursor again, depending on the state of cursorVisible
+ boolean cursorVisible = environment.getApplication().getInputManager().isCursorVisible();
+ environment.getApplication().getContext().getMouseInput().setCursorVisible(cursorVisible);
}
}
}
diff --git a/jme3-vr/src/main/java/com/jme3/input/vr/VRMouseManager.java b/jme3-vr/src/main/java/com/jme3/input/vr/VRMouseManager.java
index 5257cd05c..aa6b10056 100644
--- a/jme3-vr/src/main/java/com/jme3/input/vr/VRMouseManager.java
+++ b/jme3-vr/src/main/java/com/jme3/input/vr/VRMouseManager.java
@@ -21,6 +21,12 @@ public interface VRMouseManager {
* @return the {@link VREnvironment VR Environment} to which this manager is attached.
*/
public VREnvironment getVREnvironment();
+
+ /**
+ * Set if the mouse cursor should be used in the VR view.
+ * @param enabled true
if the mouse cursor should be displayed in VR and false
otherwise.
+ */
+ public void setVRMouseEnabled(boolean enabled);
/**
* Set if the VR device controller is used within thumb stick mode.
@@ -29,7 +35,7 @@ public interface VRMouseManager {
public void setThumbstickMode(boolean set);
/**
- * Get if the VR device controller is used within thumb stick mode.
+ * Get if the VR device controller is used within thumb stick mode.
* @return true
if the VR device controller is used within thumb stick mode and false
otherwise.
*/
public boolean isThumbstickMode();