Adds option to disable VR mouse cursor and thus enable the cursor on the desktop.

Fixes repeated attachment of mouseImage as scene to gui viewport (because its parent was always null).
accellbaker
FennelFetish 6 years ago
parent 3b24067a3c
commit 88a9069662
  1. 29
      jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRMouseManager.java
  2. 8
      jme3-vr/src/main/java/com/jme3/input/vr/VRMouseManager.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;
@ -71,6 +70,11 @@ public abstract class AbstractVRMouseManager implements VRMouseManager {
return environment;
}
@Override
public void setVRMouseEnabled(boolean enabled) {
vrMouseEnabled = enabled;
}
@Override
public void setThumbstickMode(boolean set) {
thumbstickMode = 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();
} else if(mouseAttached) {
mouseAttached = false;
environment.getApplication().getGuiViewPort().detachScene(mouseImage);
if (n != null){
n.updateGeometricState();
}
// 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);
}
}
}

@ -22,6 +22,12 @@ public interface VRMouseManager {
*/
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.
* @param set <code>true</code> if the VR device controller is used within thumb stick mode and <code>false</code> otherwise.
@ -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();

Loading…
Cancel
Save