浏览代码

Merge pull request #1064 from FennelFetish/jme3-vr_mouse-fix

Adds option to disable VR mouse cursor
Rickard Edén 6 年之前
父节点
当前提交
1a1348983b

+ 17 - 14
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);
         }
     }  
 }

+ 7 - 1
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 <code>true</code> if the mouse cursor should be displayed in VR and <code>false</code> 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 <code>true</code> if the VR device controller is used within thumb stick mode and <code>false</code> otherwise.
    */
   public boolean isThumbstickMode();