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();