From c3e8cb689d06b9754cf4527f252f469fd5349d5b Mon Sep 17 00:00:00 2001 From: jrbudda Date: Tue, 23 May 2017 18:20:22 -0400 Subject: [PATCH] 39pre --- .../net/minecraft/client/Minecraft.java.patch | 2 +- .../client/entity/EntityPlayerSP.java.patch | 2 +- .../client/renderer/EntityRenderer.java.patch | 4 +- .../minecrift/gameplay/BackpackTracker.java | 9 +- .../mtbs3d/minecrift/provider/MCOpenVR.java | 1746 ++++++++--------- .../mtbs3d/minecrift/settings/VRSettings.java | 2 +- 6 files changed, 882 insertions(+), 883 deletions(-) diff --git a/patches/net/minecraft/client/Minecraft.java.patch b/patches/net/minecraft/client/Minecraft.java.patch index 90887889..ccbb06df 100644 --- a/patches/net/minecraft/client/Minecraft.java.patch +++ b/patches/net/minecraft/client/Minecraft.java.patch @@ -1246,7 +1246,7 @@ + * The minecriftVerString will be automatically updated by the build scripts, do not modify here. + * Modify minecriftversion.py in root minecrift dir. + */ -+ public final String minecriftVerString = "Vivecraft 1.7.10 jrbudda-38r2"; ++ public final String minecriftVerString = "Vivecraft 1.7.10 jrbudda-39pre"; + private boolean trigger; + /* end version */ + /** END MINECRIFT */ diff --git a/patches/net/minecraft/client/entity/EntityPlayerSP.java.patch b/patches/net/minecraft/client/entity/EntityPlayerSP.java.patch index b24ab2c4..5368bfe7 100644 --- a/patches/net/minecraft/client/entity/EntityPlayerSP.java.patch +++ b/patches/net/minecraft/client/entity/EntityPlayerSP.java.patch @@ -566,7 +566,7 @@ + if(!this.capabilities.isFlying && !this.inWater) addFactor = VRSettings.getInertiaAddFactor(inertiaFactor); + + float yAdd = 1f; -+ if(this.capabilities.isFlying) yAdd = 3f; //HACK ++ if(this.capabilities.isFlying) yAdd = 5f; //HACK + + this.motionX = this.motionX + (mX * addFactor); + this.motionZ = this.motionZ + (mZ * addFactor); diff --git a/patches/net/minecraft/client/renderer/EntityRenderer.java.patch b/patches/net/minecraft/client/renderer/EntityRenderer.java.patch index b6a7efdc..1ffa59fb 100644 --- a/patches/net/minecraft/client/renderer/EntityRenderer.java.patch +++ b/patches/net/minecraft/client/renderer/EntityRenderer.java.patch @@ -4407,7 +4407,7 @@ + eye = Vec3.createVectorHelper(mc.vrSettings.vrFixedCamposX, mc.vrSettings.vrFixedCamposY, mc.vrSettings.vrFixedCamposZ); + } + } -+ Vector3f guipos = MCOpenVR.guiPos_World; ++ Vector3f guipos = MCOpenVR.guiPos_Room; + Matrix4f guirot = MCOpenVR.guiRotationPose; + Vec3 guiLocal = Vec3.createVectorHelper(0, 0, 0); + @@ -4561,7 +4561,7 @@ + Vec3 pos = posAvg.add(Vec3.createVectorHelper(dir.xCoord * dist, dir.yCoord * dist, dir.zCoord * dist)); + guipos = new Vector3f((float)pos.xCoord, (float)pos.yCoord, (float)pos.zCoord); + guirot = Matrix4f.rotationY(-(yawAvg + (float)Math.PI / 2)); // don't ask -+ MCOpenVR.guiPos_World = guipos; ++ MCOpenVR.guiPos_Room = guipos; + MCOpenVR.guiRotationPose = guirot; + } + diff --git a/src/com/mtbs3d/minecrift/gameplay/BackpackTracker.java b/src/com/mtbs3d/minecrift/gameplay/BackpackTracker.java index 1b6f10aa..82de7177 100644 --- a/src/com/mtbs3d/minecrift/gameplay/BackpackTracker.java +++ b/src/com/mtbs3d/minecrift/gameplay/BackpackTracker.java @@ -47,11 +47,10 @@ public void doProcess(Minecraft minecraft, EntityPlayerSP player){ double dot = controllerDir.dotProduct(down); double dotDelta = delta.dotProduct(hmddir); - if ( - ((hmdPos.yCoord - controllerPos.yCoord) > 0.05) && //controller below hmd - (dot > .8) && // pointing approx down - (dotDelta > 0) // behind head - ){ + boolean zone = ((Math.abs(hmdPos.yCoord - controllerPos.yCoord)) < 0.25) && //controller below hmd + (dotDelta > 0); // behind head + + if (zone){ if(!wasIn[c]){ if(player.inventory.currentItem != 0){ previousSlot = player.inventory.currentItem; diff --git a/src/com/mtbs3d/minecrift/provider/MCOpenVR.java b/src/com/mtbs3d/minecrift/provider/MCOpenVR.java index 6a8d8220..6f74a2ab 100644 --- a/src/com/mtbs3d/minecrift/provider/MCOpenVR.java +++ b/src/com/mtbs3d/minecrift/provider/MCOpenVR.java @@ -80,7 +80,7 @@ public class MCOpenVR static VR_IVRCompositor_FnTable vrCompositor; static VR_IVROverlay_FnTable vrOverlay; static VR_IVRSettings_FnTable vrSettings; - static VR_IVRRenderModels_FnTable vrRenderModels; + static VR_IVRRenderModels_FnTable vrRenderModels; static VR_IVRChaperone_FnTable vrChaperone; private static IntByReference hmdErrorStore = new IntByReference(); @@ -135,14 +135,14 @@ public class MCOpenVR static Vec3[] aimSource = new Vec3[3]; static Vector3f thirdcontrollerDirection = new Vector3f(); - + static Vector3f offset=new Vector3f(0,0,0); static Vector3f headDirection = new Vector3f(); static Vector3f controllerDirection = new Vector3f(); static Vector3f lcontrollerDirection = new Vector3f(); static boolean[] controllerTracking = new boolean[3]; - + // Controllers private static int RIGHT_CONTROLLER = 0; private static int LEFT_CONTROLLER = 1; @@ -172,10 +172,10 @@ public class MCOpenVR private static long k_buttonGrip = (1L << JOpenVRLibrary.EVRButtonId.EVRButtonId_k_EButton_Grip); private static long k_button_A = (1L << JOpenVRLibrary.EVRButtonId.EVRButtonId_k_EButton_A); private static long k_button_HandTrigger = (1L << JOpenVRLibrary.EVRButtonId.EVRButtonId_k_EButton_Axis2); - + private static float triggerThreshold = .25f; - public static Vector3f guiPos_World = new Vector3f(); + public static Vector3f guiPos_Room = new Vector3f(); public static Matrix4f guiRotationPose = new Matrix4f(); public static float guiScale = 1.0f; public static double startedOpeningInventory = 0; @@ -197,39 +197,39 @@ public class MCOpenVR private static Vector2f[][] touchpadSamples = new Vector2f[3][5]; private static int[] touchpadSampleCount = new int[3]; -private static float[] inventory_swipeX = new float[3]; + private static float[] inventory_swipeX = new float[3]; private static float[] inventory_swipeY = new float[3]; - + static boolean headIsTracking; - + private static int moveModeSwitchcount = 0; public static boolean isWalkingAbout; private static boolean isFreeRotate; private static float walkaboutYawStart; - + private static float hmdForwardYaw; - -public static boolean mrMovingCamActive; + + public static boolean mrMovingCamActive; public static Vec3 mrControllerPos = Vec3.createVectorHelper(0, 0, 0); public static float mrControllerPitch; public static float mrControllerYaw; public static float mrControllerRoll; public static float rtbX, rtbY; - + public String getName() { return "OpenVR"; } - + public String getID() { return "openvr"; } - + public boolean isInitialized() { return initialized; } - + public String getVersion() { return "Version TODO"; } static KeyBinding hotbarNext = new KeyBinding("Hotbar Next", 201, "Vivecraft"); @@ -257,7 +257,7 @@ public MCOpenVR() controllerDeviceIndex[c] = -1; controllerTipTransform[c] = new Matrix4f(); handRotation[c] = new Matrix4f(); - + lastControllerState[c] = new VRControllerState_t(); controllerStateReference[c] = new VRControllerState_t(); inputStateRefernceArray[c] = new VRControllerState_t.ByReference(); @@ -281,7 +281,7 @@ public MCOpenVR() private static boolean tried; - + public static boolean init() throws Exception { @@ -298,12 +298,12 @@ public static boolean init() throws Exception // look in .minecraft first for openvr_api.dll File minecraftDir = Utils.getWorkingDirectory(); // misleading name, actually the .minecraft directory File workingDir = new File(System.getProperty("user.dir")); - + String osname = System.getProperty("os.name").toLowerCase(); String osarch= System.getProperty("os.arch").toLowerCase(); String osFolder = "win32"; - + if (osname.contains("windows")){ if (osarch.contains("64")) { @@ -320,8 +320,8 @@ else if( osname.contains("linux")){ else if( osname.contains("mac")){ osFolder = "osx32"; } - - + + String openVRPath = new File(minecraftDir, osFolder).getPath(); System.out.println("Adding OpenVR search path: " + openVRPath); NativeLibrary.addSearchPath("openvr_api", openVRPath); @@ -363,15 +363,15 @@ else if( osname.contains("mac")){ HmdMatrix34_t matR = vrsystem.GetEyeToHeadTransform.apply(JOpenVRLibrary.EVREye.EVREye_Eye_Right); OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(matR, hmdPoseRightEye); - mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, rotateLeft)); - mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, rotateRight)); - mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, rotateFree)); - mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, walkabout)); - mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, quickTorch)); - mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, hotbarNext)); - mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, hotbarPrev)); - - + mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, rotateLeft)); + mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, rotateRight)); + mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, rotateFree)); + mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, walkabout)); + mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, quickTorch)); + mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, hotbarNext)); + mc.gameSettings.keyBindings = (KeyBinding[])((KeyBinding[])ArrayUtils.add(mc.gameSettings.keyBindings, hotbarPrev)); + + initialized = true; return true; } @@ -381,30 +381,30 @@ else if( osname.contains("mac")){ public static boolean isError(){ return hmdErrorStore.getValue() != 0 || hmdErrorStoreBuf.get(0) != 0; } - + public static int getError(){ return hmdErrorStore.getValue() != 0 ? hmdErrorStore.getValue() : hmdErrorStoreBuf.get(0); } - + private static void initializeJOpenVR() throws Exception { hmdErrorStoreBuf = IntBuffer.allocate(1); vrsystem = null; JOpenVRLibrary.VR_InitInternal(hmdErrorStoreBuf, JOpenVRLibrary.EVRApplicationType.EVRApplicationType_VRApplication_Scene); - + if(!isError()) { // ok, try and get the vrsystem pointer.. vrsystem = new VR_IVRSystem_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRSystem_Version, hmdErrorStoreBuf)); } - + if( vrsystem == null || isError()) { throw new Exception(jopenvr.JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(getError()).getString(0)); } else { - + vrsystem.setAutoSynch(false); vrsystem.read(); - + System.out.println("OpenVR initialized & VR connected."); - + tlastVsync = FloatBuffer.allocate(1); _tframeCount = LongBuffer.allocate(1); @@ -437,7 +437,7 @@ private static Pointer ptrFomrString(String in){ return p; } - + static void debugOut(){ for(Field i :JOpenVRLibrary.ETrackedDeviceProperty.class.getDeclaredFields()){ try { @@ -505,7 +505,7 @@ public static void initOpenVRSettings() throws Exception } } } - + public static void initOpenVRCompositor(boolean set) throws Exception { if( set && vrsystem != null ) { @@ -525,18 +525,18 @@ public static void initOpenVRCompositor(boolean set) throws Exception vrsystem.GetStringTrackedDeviceProperty.apply(JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd,JOpenVRLibrary.ETrackedDeviceProperty.ETrackedDeviceProperty_Prop_ManufacturerName_String,s,buffsize,hmdErrorStore); String id=s.getString(0); System.out.println("Device manufacturer is: "+id); - + if(!id.equals("HTC")) { isVive=false; mc.vrSettings.loadOptions(); } - + //TODO: detect tracking system if(mc.vrSettings.seated && !isVive) resetPosition(); else clearOffset(); - + } else { throw new Exception(jopenvr.JOpenVRLibrary.VR_GetVRInitErrorAsEnglishDescription(getError()).getString(0)); } @@ -572,7 +572,7 @@ public static void initOpenVRCompositor(boolean set) throws Exception texType0.handle = Pointer.createConstant(-1); texType0.write(); - + // texture type texType1.eColorSpace = JOpenVRLibrary.EColorSpace.EColorSpace_ColorSpace_Gamma; texType1.eType = JOpenVRLibrary.ETextureType.ETextureType_TextureType_OpenGL; @@ -581,7 +581,7 @@ public static void initOpenVRCompositor(boolean set) throws Exception texType1.setAutoWrite(false); texType1.handle = Pointer.createConstant(-1); texType1.write(); - + System.out.println("OpenVR Compositor initialized OK."); } @@ -602,7 +602,7 @@ public static void initOpenVRRenderModels() throws Exception } } } - + private static void initOpenVRChaperone() throws Exception { vrChaperone = new VR_IVRChaperone_FnTable(JOpenVRLibrary.VR_GetGenericInterface(JOpenVRLibrary.IVRChaperone_Version, hmdErrorStoreBuf)); if (vrChaperone != null && hmdErrorStore.getValue() == 0) { @@ -634,12 +634,12 @@ public boolean initOpenVRControlPanel() private String lasttyped = ""; - + public static void poll(long frameIndex) { Minecraft.getMinecraft().mcProfiler.startSection("input"); boolean sleeping = (mc.theWorld !=null && mc.thePlayer != null && mc.thePlayer.isPlayerSleeping()); - + pollInputEvents(); if(!mc.vrSettings.seated){ @@ -672,7 +672,7 @@ public static void poll(long frameIndex) processVRFunctions(sleeping, mc.currentScreen != null); Minecraft.getMinecraft().mcProfiler.endStartSection("updatePose"); - updatePose(); + updatePose(); Minecraft.getMinecraft().mcProfiler.endSection(); } @@ -680,29 +680,29 @@ public static void poll(long frameIndex) private static Vec3 vecFromVector(Vector3f in){ return Vec3.createVectorHelper(in.x, in.y, in.z); } - + private static void processHotbar() { - + if(mc.thePlayer == null) return; if(mc.thePlayer.inventory == null) return; - + Vec3 main = getAimSource(0); Vec3 off = getAimSource(1); - + Vec3 barStartos = null,barEndos = null; - + int i = 1; if(mc.vrSettings.vrReverseHands) i = -1; - + if (mc.vrSettings.vrHudLockMode == mc.vrSettings.HUD_LOCK_WRIST){ - barStartos = vecFromVector( getAimRotation(1).transform(new Vector3f(i*0.04f,-0.05f,0.24f))); - barEndos = vecFromVector( getAimRotation(1).transform(new Vector3f(i*0.2f,-0.05f,-0.05f))); + barStartos = vecFromVector( getAimRotation(1).transform(new Vector3f(i*0.04f,-0.05f,0.24f))); + barEndos = vecFromVector( getAimRotation(1).transform(new Vector3f(i*0.2f,-0.05f,-0.05f))); } else if (mc.vrSettings.vrHudLockMode == mc.vrSettings.HUD_LOCK_HAND){ - barStartos = vecFromVector( getAimRotation(1).transform(new Vector3f(-.18f,0.08f,-0.01f))); - barEndos = vecFromVector( getAimRotation(1).transform(new Vector3f(0.19f,0.04f,-0.08f))); + barStartos = vecFromVector( getAimRotation(1).transform(new Vector3f(-.18f,0.08f,-0.01f))); + barEndos = vecFromVector( getAimRotation(1).transform(new Vector3f(0.19f,0.04f,-0.08f))); } else return; //how did u get here - - + + Vec3 barStart = off.addVector(barStartos.xCoord, barStartos.yCoord, barStartos.zCoord); Vec3 barEnd = off.addVector(barEndos.xCoord, barEndos.yCoord, barEndos.zCoord); @@ -711,28 +711,28 @@ private static void processHotbar() { float dist = (float) (pq.crossProduct(u).lengthVector() / u.lengthVector()); if(dist > 0.06) return; - + float fact = (float) (pq.dotProduct(u) / (u.xCoord*u.xCoord + u.yCoord*u.yCoord + u.zCoord*u.zCoord)); - + if(fact < 0) return; - + Vec3 w2 = pq.subtract(Vec3.createVectorHelper(u.xCoord*fact, u.yCoord*fact, u.zCoord*fact)); - + Vec3 point = w2.subtract(main); float linelen = (float) barStart.subtract(barEnd).lengthVector(); float ilen = (float) barStart.subtract(point).lengthVector(); float pos = ilen / linelen * 9; - + int box = (int) Math.floor(pos); if(pos - Math.floor(pos) < 0.1) return; - + if(box > 8) return; if(box < 0) return; //all that maths for this. if(box != mc.thePlayer.inventory.currentItem){ - mc.thePlayer.inventory.currentItem = box; - vrsystem.TriggerHapticPulse.apply(controllerDeviceIndex[0], 0, (short) 750); + mc.thePlayer.inventory.currentItem = box; + vrsystem.TriggerHapticPulse.apply(controllerDeviceIndex[0], 0, (short) 750); } } @@ -765,7 +765,7 @@ public static boolean setKeyboardOverlayShowing(boolean showingState, GuiTextFie } else { try { - vrOverlay.HideKeyboard.apply(); + vrOverlay.HideKeyboard.apply(); } catch (Error e) { // TODO: handle exception } @@ -781,20 +781,20 @@ public static boolean setKeyboardOverlayShowing(boolean showingState, GuiTextFie } - + //TODO: to hell with all these conversions. //sets mouse position for currentscreen private static void processGui() { - + if(guiRotationPose == null) return; - + Vector3f controllerPos = new Vector3f(); //OpenVRUtil.convertMatrix4ftoTranslationVector(controllerPose[0]); Vec3 con = mc.vrPlayer.getControllerPos_World(0); controllerPos.x = (float) con.xCoord; controllerPos.y = (float) con.yCoord; controllerPos.z = (float) con.zCoord; - + Vec3 controllerdir = mc.vrPlayer.getControllerMainDir_World(); Vector3f cdir = new Vector3f((float)controllerdir.xCoord,(float) controllerdir.yCoord,(float) controllerdir.zCoord); Vector3f forward = new Vector3f(0,0,1); @@ -809,11 +809,11 @@ private static void processGui() { float guiHalfHeight = guiHeight * 0.5f; Vector3f gp = new Vector3f(); - - gp.x = (float) (guiPos_World.x + mc.entityRenderer.interPolatedRoomOrigin.xCoord ) ; - gp.y = (float) (guiPos_World.y + mc.entityRenderer.interPolatedRoomOrigin.yCoord ) ; - gp.z = (float) (guiPos_World.z + mc.entityRenderer.interPolatedRoomOrigin.zCoord ) ; - + + gp.x = (float) (guiPos_Room.x + mc.entityRenderer.interPolatedRoomOrigin.xCoord ) ; + gp.y = (float) (guiPos_Room.y + mc.entityRenderer.interPolatedRoomOrigin.yCoord ) ; + gp.z = (float) (guiPos_Room.z + mc.entityRenderer.interPolatedRoomOrigin.zCoord ) ; + Vector3f guiTopLeft = gp.subtract(guiUp.divide(1.0f / guiHalfHeight)).subtract(guiRight.divide(1.0f/guiHalfWidth)); Vector3f guiTopRight = gp.subtract(guiUp.divide(1.0f / guiHalfHeight)).add(guiRight.divide(1.0f / guiHalfWidth)); @@ -830,7 +830,7 @@ private static void processGui() { float u = relativePoint.dot(guiRight.divide(1.0f/guiWidth)); float v = relativePoint.dot(guiUp.divide(1.0f/guiWidth)); - + // adjust vertical for aspect ratio v = ( (v - 0.5f) * ((float)mc.displayWidth / (float)mc.displayHeight) ) + 0.5f; @@ -900,7 +900,7 @@ else if (controllerMouseX == -1.0f) lastpressedleftclick = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTrigger) > 0; lastpressedmiddleclick = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0 ; lastpressedrightclick= (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_button_A) > 0 ; - + pressedleftclick = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTrigger) > 0; pressedmiddleclick = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; pressedrightclick = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_button_A) > 0; @@ -1004,14 +1004,14 @@ else if (controllerMouseX == -1.0f) if (pressedLMB || pressedRMB) { - // {mc.thePlayer.closeScreen();} + // {mc.thePlayer.closeScreen();} } } } } - + public static void destroy() { if (initialized) @@ -1021,41 +1021,41 @@ public static void destroy() } } - - - -// public HmdParameters getHMDInfo() -// { -// HmdParameters hmd = new HmdParameters(); -// if ( isInitialized() ) -// { -// IntBuffer rtx = IntBuffer.allocate(1); -// IntBuffer rty = IntBuffer.allocate(1); -// vrsystem.GetRecommendedRenderTargetSize.apply(rtx, rty); -// -// hmd.Type = HmdType.ovrHmd_Other; -// hmd.ProductName = "OpenVR"; -// hmd.Manufacturer = "Unknown"; -// hmd.AvailableHmdCaps = 0; -// hmd.DefaultHmdCaps = 0; -// hmd.AvailableTrackingCaps = HmdParameters.ovrTrackingCap_Orientation | HmdParameters.ovrTrackingCap_Position; -// hmd.DefaultTrackingCaps = HmdParameters.ovrTrackingCap_Orientation | HmdParameters.ovrTrackingCap_Position; -// hmd.Resolution = new Sizei( rtx.get(0) * 2, rty.get(0) ); -// -// float topFOV = vrsystem.GetFloatTrackedDeviceProperty.apply(JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd, JOpenVRLibrary.ETrackedDeviceProperty.ETrackedDeviceProperty_Prop_FieldOfViewTopDegrees_Float, hmdErrorStore); -// float bottomFOV = vrsystem.GetFloatTrackedDeviceProperty.apply(JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd, JOpenVRLibrary.ETrackedDeviceProperty.ETrackedDeviceProperty_Prop_FieldOfViewBottomDegrees_Float, hmdErrorStore); -// float leftFOV = vrsystem.GetFloatTrackedDeviceProperty.apply(JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd, JOpenVRLibrary.ETrackedDeviceProperty.ETrackedDeviceProperty_Prop_FieldOfViewLeftDegrees_Float, hmdErrorStore); -// float rightFOV = vrsystem.GetFloatTrackedDeviceProperty.apply(JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd, JOpenVRLibrary.ETrackedDeviceProperty.ETrackedDeviceProperty_Prop_FieldOfViewRightDegrees_Float, hmdErrorStore); -// -// hmd.DefaultEyeFov[0] = new FovPort((float)Math.tan(topFOV),(float)Math.tan(bottomFOV),(float)Math.tan(leftFOV),(float)Math.tan(rightFOV)); -// hmd.DefaultEyeFov[1] = new FovPort((float)Math.tan(topFOV),(float)Math.tan(bottomFOV),(float)Math.tan(leftFOV),(float)Math.tan(rightFOV)); -// hmd.MaxEyeFov[0] = new FovPort((float)Math.tan(topFOV),(float)Math.tan(bottomFOV),(float)Math.tan(leftFOV),(float)Math.tan(rightFOV)); -// hmd.MaxEyeFov[1] = new FovPort((float)Math.tan(topFOV),(float)Math.tan(bottomFOV),(float)Math.tan(leftFOV),(float)Math.tan(rightFOV)); -// hmd.DisplayRefreshRate = 90.0f; -// } -// -// return hmd; -// } + + + + // public HmdParameters getHMDInfo() + // { + // HmdParameters hmd = new HmdParameters(); + // if ( isInitialized() ) + // { + // IntBuffer rtx = IntBuffer.allocate(1); + // IntBuffer rty = IntBuffer.allocate(1); + // vrsystem.GetRecommendedRenderTargetSize.apply(rtx, rty); + // + // hmd.Type = HmdType.ovrHmd_Other; + // hmd.ProductName = "OpenVR"; + // hmd.Manufacturer = "Unknown"; + // hmd.AvailableHmdCaps = 0; + // hmd.DefaultHmdCaps = 0; + // hmd.AvailableTrackingCaps = HmdParameters.ovrTrackingCap_Orientation | HmdParameters.ovrTrackingCap_Position; + // hmd.DefaultTrackingCaps = HmdParameters.ovrTrackingCap_Orientation | HmdParameters.ovrTrackingCap_Position; + // hmd.Resolution = new Sizei( rtx.get(0) * 2, rty.get(0) ); + // + // float topFOV = vrsystem.GetFloatTrackedDeviceProperty.apply(JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd, JOpenVRLibrary.ETrackedDeviceProperty.ETrackedDeviceProperty_Prop_FieldOfViewTopDegrees_Float, hmdErrorStore); + // float bottomFOV = vrsystem.GetFloatTrackedDeviceProperty.apply(JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd, JOpenVRLibrary.ETrackedDeviceProperty.ETrackedDeviceProperty_Prop_FieldOfViewBottomDegrees_Float, hmdErrorStore); + // float leftFOV = vrsystem.GetFloatTrackedDeviceProperty.apply(JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd, JOpenVRLibrary.ETrackedDeviceProperty.ETrackedDeviceProperty_Prop_FieldOfViewLeftDegrees_Float, hmdErrorStore); + // float rightFOV = vrsystem.GetFloatTrackedDeviceProperty.apply(JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd, JOpenVRLibrary.ETrackedDeviceProperty.ETrackedDeviceProperty_Prop_FieldOfViewRightDegrees_Float, hmdErrorStore); + // + // hmd.DefaultEyeFov[0] = new FovPort((float)Math.tan(topFOV),(float)Math.tan(bottomFOV),(float)Math.tan(leftFOV),(float)Math.tan(rightFOV)); + // hmd.DefaultEyeFov[1] = new FovPort((float)Math.tan(topFOV),(float)Math.tan(bottomFOV),(float)Math.tan(leftFOV),(float)Math.tan(rightFOV)); + // hmd.MaxEyeFov[0] = new FovPort((float)Math.tan(topFOV),(float)Math.tan(bottomFOV),(float)Math.tan(leftFOV),(float)Math.tan(rightFOV)); + // hmd.MaxEyeFov[1] = new FovPort((float)Math.tan(topFOV),(float)Math.tan(bottomFOV),(float)Math.tan(leftFOV),(float)Math.tan(rightFOV)); + // hmd.DisplayRefreshRate = 90.0f; + // } + // + // return hmd; + // } @@ -1063,14 +1063,14 @@ private static void findControllerDevices() { controllerDeviceIndex[RIGHT_CONTROLLER] = -1; controllerDeviceIndex[LEFT_CONTROLLER] = -1; - - if(mc.vrSettings.vrReverseHands){ - controllerDeviceIndex[RIGHT_CONTROLLER] = vrsystem.GetTrackedDeviceIndexForControllerRole.apply(JOpenVRLibrary.ETrackedControllerRole.ETrackedControllerRole_TrackedControllerRole_LeftHand); - controllerDeviceIndex[LEFT_CONTROLLER] = vrsystem.GetTrackedDeviceIndexForControllerRole.apply(JOpenVRLibrary.ETrackedControllerRole.ETrackedControllerRole_TrackedControllerRole_RightHand); - }else { - controllerDeviceIndex[LEFT_CONTROLLER] = vrsystem.GetTrackedDeviceIndexForControllerRole.apply(JOpenVRLibrary.ETrackedControllerRole.ETrackedControllerRole_TrackedControllerRole_LeftHand); - controllerDeviceIndex[RIGHT_CONTROLLER] = vrsystem.GetTrackedDeviceIndexForControllerRole.apply(JOpenVRLibrary.ETrackedControllerRole.ETrackedControllerRole_TrackedControllerRole_RightHand); - } + + if(mc.vrSettings.vrReverseHands){ + controllerDeviceIndex[RIGHT_CONTROLLER] = vrsystem.GetTrackedDeviceIndexForControllerRole.apply(JOpenVRLibrary.ETrackedControllerRole.ETrackedControllerRole_TrackedControllerRole_LeftHand); + controllerDeviceIndex[LEFT_CONTROLLER] = vrsystem.GetTrackedDeviceIndexForControllerRole.apply(JOpenVRLibrary.ETrackedControllerRole.ETrackedControllerRole_TrackedControllerRole_RightHand); + }else { + controllerDeviceIndex[LEFT_CONTROLLER] = vrsystem.GetTrackedDeviceIndexForControllerRole.apply(JOpenVRLibrary.ETrackedControllerRole.ETrackedControllerRole_TrackedControllerRole_LeftHand); + controllerDeviceIndex[RIGHT_CONTROLLER] = vrsystem.GetTrackedDeviceIndexForControllerRole.apply(JOpenVRLibrary.ETrackedControllerRole.ETrackedControllerRole_TrackedControllerRole_RightHand); + } } private static void updateControllerButtonState() @@ -1122,720 +1122,720 @@ private static void updateControllerButtonState() //OK the fundamental problem with this is Minecraft uses a LWJGL event buffer for keyboard and mouse inputs. It polls those devices faster - //and presents the game with a nice queue of things that happened. With OpenVR we're polling the controllers directly on the -game- (edit render?) loop. - //This means we should only set keys as pressed when they change state, or they will repeat. - //And we should still unpress the key when released. - //TODO: make a new class that polls more quickly and provides Minecraft.java with a HTCController.next() event queue. (unless openVR has one?) - private static void processControllerButtons(boolean sleeping, boolean gui) - { + //and presents the game with a nice queue of things that happened. With OpenVR we're polling the controllers directly on the -game- (edit render?) loop. + //This means we should only set keys as pressed when they change state, or they will repeat. + //And we should still unpress the key when released. + //TODO: make a new class that polls more quickly and provides Minecraft.java with a HTCController.next() event queue. (unless openVR has one?) + private static void processControllerButtons(boolean sleeping, boolean gui) + { // right controller - //last - boolean lastpressedRGrip = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; - boolean lastpressedRtouchpadBottomLeft = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && - (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; - boolean lastpressedRtouchpadBottomRight = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && - (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; - boolean lastpressedRtouchpadTopLeft = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && - (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; - boolean lastpressedRtouchpadTopRight = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && - (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; - boolean lastpressedRAppMenu = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; - boolean lastpressedRTrigger = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean lastpressedRTriggerClick =( lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTrigger )>0; - //current - boolean pressedRGrip = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; - boolean pressedRtouchpadBottomLeft = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && - (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; - boolean pressedRtouchpadBottomRight = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && - (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; - boolean pressedRtouchpadTopLeft = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && - (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; - boolean pressedRtouchpadTopRight = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && - (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; - boolean pressedRAppMenu = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; - boolean pressedRTrigger = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean pressedRTriggerClick =( controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTrigger )>0; - - if(!gui){ - //R GRIP - if (pressedRGrip && !lastpressedRGrip) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_GRIP.ordinal()].press(); - } - //R TOUCHPAD - if (pressedRtouchpadBottomLeft && !lastpressedRtouchpadBottomLeft){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_BL.ordinal()].press(); - } - if (pressedRtouchpadBottomRight && !lastpressedRtouchpadBottomRight){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_BR.ordinal()].press(); - } - if (pressedRtouchpadTopLeft && !lastpressedRtouchpadTopLeft){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_UL.ordinal()].press(); - } - if (pressedRtouchpadTopRight && !lastpressedRtouchpadTopRight ){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_UR.ordinal()].press(); - } - //R TRIGGER - if (pressedRTrigger && !lastpressedRTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TRIGGER.ordinal()].press(); - } - //R AppMenu - if (pressedRAppMenu && !lastpressedRAppMenu) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_APPMENU.ordinal()].press(); - } - //R triggerclick - if (pressedRTriggerClick && !lastpressedRTriggerClick) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TRIGGER_FULLCLICK.ordinal()].press(); - } - } - - if(!pressedRGrip && lastpressedRGrip) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_GRIP.ordinal()].unpress(); - } - //R TOUCHPAD - if (!pressedRtouchpadBottomLeft && lastpressedRtouchpadBottomLeft){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_BL.ordinal()].unpress(); - } - if (!pressedRtouchpadBottomRight && lastpressedRtouchpadBottomRight){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_BR.ordinal()].unpress(); - } - if (!pressedRtouchpadTopLeft && lastpressedRtouchpadTopLeft){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_UL.ordinal()].unpress(); - } - if (!pressedRtouchpadTopRight && lastpressedRtouchpadTopRight ){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_UR.ordinal()].unpress(); + //last + boolean lastpressedRGrip = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; + boolean lastpressedRtouchpadBottomLeft = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && + (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; + boolean lastpressedRtouchpadBottomRight = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && + (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; + boolean lastpressedRtouchpadTopLeft = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && + (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; + boolean lastpressedRtouchpadTopRight = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && + (lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; + boolean lastpressedRAppMenu = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; + boolean lastpressedRTrigger = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean lastpressedRTriggerClick =( lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTrigger )>0; + //current + boolean pressedRGrip = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; + boolean pressedRtouchpadBottomLeft = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && + (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; + boolean pressedRtouchpadBottomRight = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && + (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; + boolean pressedRtouchpadTopLeft = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && + (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; + boolean pressedRtouchpadTopRight = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && + (controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; + boolean pressedRAppMenu = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; + boolean pressedRTrigger = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean pressedRTriggerClick =( controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTrigger )>0; + + if(!gui){ + //R GRIP + if (pressedRGrip && !lastpressedRGrip) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_GRIP.ordinal()].press(); } - //R TRIGGER - if(!pressedRTrigger && lastpressedRTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TRIGGER.ordinal()].unpress(); - } - if(!pressedRAppMenu && lastpressedRAppMenu) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_APPMENU.ordinal()].unpress(); - } - if(!pressedRTriggerClick && lastpressedRTriggerClick) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TRIGGER_FULLCLICK.ordinal()].unpress(); + //R TOUCHPAD + if (pressedRtouchpadBottomLeft && !lastpressedRtouchpadBottomLeft){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_BL.ordinal()].press(); } - - - - // left controller - //last - boolean lastpressedLGrip = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; - boolean lastpressedLtouchpadBottomLeft = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && - (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; - boolean lastpressedLtouchpadBottomRight = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && - (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; - boolean lastpressedLtouchpadTopLeft = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && - (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; - boolean lastpressedLtouchpadTopRight = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && - (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; - boolean lastpressedLAppMenu = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; - boolean lastpressedLTrigger = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean lastpressedLTriggerClick =( lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTrigger )>0; - //current - boolean pressedLGrip = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; - boolean pressedLtouchpadBottomLeft = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && - (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; - boolean pressedLtouchpadBottomRight = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && - (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; - boolean pressedLtouchpadTopLeft = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && - (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; - boolean pressedLtouchpadTopRight = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && - (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && - (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; - boolean pressedLAppMenu = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; - boolean pressedLTrigger = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean pressedLTriggerClick =( controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTrigger )>0; - - - if(!gui){ - //l GRIP - no gui cause shift. - if (pressedLGrip && !lastpressedLGrip) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_GRIP.ordinal()].press(); - } - - } - - if (pressedLtouchpadBottomLeft && !lastpressedLtouchpadBottomLeft){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_BL.ordinal()].press(); - } - if (pressedLtouchpadBottomRight && !lastpressedLtouchpadBottomRight){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_BR.ordinal()].press(); - } - if (pressedLtouchpadTopLeft && !lastpressedLtouchpadTopLeft){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_UL.ordinal()].press(); - } - if (pressedLtouchpadTopRight && !lastpressedLtouchpadTopRight ){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_UR.ordinal()].press(); + if (pressedRtouchpadBottomRight && !lastpressedRtouchpadBottomRight){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_BR.ordinal()].press(); + } + if (pressedRtouchpadTopLeft && !lastpressedRtouchpadTopLeft){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_UL.ordinal()].press(); + } + if (pressedRtouchpadTopRight && !lastpressedRtouchpadTopRight ){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_UR.ordinal()].press(); + } + //R TRIGGER + if (pressedRTrigger && !lastpressedRTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TRIGGER.ordinal()].press(); } - //L TRIGGER - if (pressedLTrigger && !lastpressedLTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TRIGGER.ordinal()].press(); - } - if (pressedLAppMenu && !lastpressedLAppMenu) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_APPMENU.ordinal()].press(); + //R AppMenu + if (pressedRAppMenu && !lastpressedRAppMenu) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_APPMENU.ordinal()].press(); } - //L triggerclick - if (pressedLTriggerClick && !lastpressedLTriggerClick) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TRIGGER_FULLCLICK.ordinal()].press(); + //R triggerclick + if (pressedRTriggerClick && !lastpressedRTriggerClick) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TRIGGER_FULLCLICK.ordinal()].press(); } + } - if(!pressedLGrip && lastpressedLGrip) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_GRIP.ordinal()].unpress(); - } - if (!pressedLtouchpadBottomLeft && lastpressedLtouchpadBottomLeft){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_BL.ordinal()].unpress(); + if(!pressedRGrip && lastpressedRGrip) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_GRIP.ordinal()].unpress(); + } + //R TOUCHPAD + if (!pressedRtouchpadBottomLeft && lastpressedRtouchpadBottomLeft){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_BL.ordinal()].unpress(); + } + if (!pressedRtouchpadBottomRight && lastpressedRtouchpadBottomRight){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_BR.ordinal()].unpress(); + } + if (!pressedRtouchpadTopLeft && lastpressedRtouchpadTopLeft){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_UL.ordinal()].unpress(); + } + if (!pressedRtouchpadTopRight && lastpressedRtouchpadTopRight ){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TOUCHPAD_UR.ordinal()].unpress(); + } + //R TRIGGER + if(!pressedRTrigger && lastpressedRTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TRIGGER.ordinal()].unpress(); + } + if(!pressedRAppMenu && lastpressedRAppMenu) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_APPMENU.ordinal()].unpress(); + } + if(!pressedRTriggerClick && lastpressedRTriggerClick) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_RIGHT_TRIGGER_FULLCLICK.ordinal()].unpress(); + } + + + + // left controller + //last + boolean lastpressedLGrip = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; + boolean lastpressedLtouchpadBottomLeft = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && + (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; + boolean lastpressedLtouchpadBottomRight = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && + (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; + boolean lastpressedLtouchpadTopLeft = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && + (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; + boolean lastpressedLtouchpadTopRight = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && + (lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; + boolean lastpressedLAppMenu = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; + boolean lastpressedLTrigger = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean lastpressedLTriggerClick =( lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTrigger )>0; + //current + boolean pressedLGrip = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; + boolean pressedLtouchpadBottomLeft = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && + (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; + boolean pressedLtouchpadBottomRight = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < 0 ) && + (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; + boolean pressedLtouchpadTopLeft = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && + (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < 0 ) ; + boolean pressedLtouchpadTopRight = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0 && + (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0 ) && + (controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0 ) ; + boolean pressedLAppMenu = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; + boolean pressedLTrigger = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean pressedLTriggerClick =( controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTrigger )>0; + + + if(!gui){ + //l GRIP - no gui cause shift. + if (pressedLGrip && !lastpressedLGrip) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_GRIP.ordinal()].press(); } - if (!pressedLtouchpadBottomRight && lastpressedLtouchpadBottomRight){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_BR.ordinal()].unpress(); - } - if (!pressedLtouchpadTopLeft && lastpressedLtouchpadTopLeft){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_UL.ordinal()].unpress(); - } - if (!pressedLtouchpadTopRight && lastpressedLtouchpadTopRight ){ - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_UR.ordinal()].unpress(); - } - if(!pressedLTrigger && lastpressedLTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TRIGGER.ordinal()].unpress(); - } - if(!pressedLAppMenu && lastpressedLAppMenu) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_APPMENU.ordinal()].unpress(); - } - if(!pressedLTriggerClick && lastpressedLTriggerClick) { - mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TRIGGER_FULLCLICK.ordinal()].unpress(); - } - if(pressedLAppMenu && !lastpressedLAppMenu) { //handle menu directly - - if(pressedLGrip){ - setKeyboardOverlayShowing(!keyboardShowing, null); - } else{ - if(gui || keyboardShowing){ - - if(mc.currentScreen instanceof GuiWinGame){ //from 'esc' key on guiwingame since we cant push it. - mc.thePlayer.sendQueue.addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.PERFORM_RESPAWN)); - mc.displayGuiScreen((GuiScreen)null); - }else { - mc.thePlayer.closeScreen(); - setKeyboardOverlayShowing(false, null); - } - }else - mc.displayInGameMenu(); - } - } - - if(pressedRAppMenu && !lastpressedRAppMenu) { - if(mc.gameSettings.keyBindPickBlock.getIsKeyPressed() && mc.vrSettings.displayMirrorMode == mc.vrSettings.MIRROR_MIXED_REALITY){ - VRHotkeys.snapMRCam(mc,0); - } - } } - //TODO: move somewhere else. - private static void processControllerButtonsOculus(boolean sleeping, boolean gui) - { - // right controller - //last - boolean lastpressedRHandTrigger = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_button_HandTrigger) > 0; - boolean lastpressedB = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; - boolean lastpressedA = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_button_A) > 0; - boolean lastpressedRTrigger = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean lastpressedRStick = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0; - - boolean lastTouchedRHandTrigger = (lastControllerState[RIGHT_CONTROLLER].ulButtonTouched & k_button_HandTrigger) > 0; - boolean lastTouchedB = (lastControllerState[RIGHT_CONTROLLER].ulButtonTouched & k_buttonAppMenu) > 0; - boolean lastTouchedA = (lastControllerState[RIGHT_CONTROLLER].ulButtonTouched & k_button_A) > 0; - boolean lastTouchedRTrigger = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean lastTouchedRStick = (lastControllerState[RIGHT_CONTROLLER].ulButtonTouched & k_buttonTouchpad) > 0; - - boolean lastpressedRStickRight = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0.5 ; - boolean lastpressedRStickLeft = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < -0.5 ; - boolean lastpressedRStickDown = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < -0.5 ; - boolean lastpressedRStickUp = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0.5 ; - - //current - boolean pressedRHandTrigger = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_button_HandTrigger) > 0; - boolean pressedB = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; - boolean pressedA = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_button_A) > 0; - boolean pressedRTrigger = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean pressedRStick = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0; - - //current - boolean TouchedRHandTrigger = (controllerStateReference[RIGHT_CONTROLLER].ulButtonTouched & k_button_HandTrigger) > 0; - boolean TouchedB = (controllerStateReference[RIGHT_CONTROLLER].ulButtonTouched & k_buttonAppMenu) > 0; - boolean TouchedA = (controllerStateReference[RIGHT_CONTROLLER].ulButtonTouched & k_button_A) > 0; - boolean TouchedRTrigger = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean TouchedRStick = (controllerStateReference[RIGHT_CONTROLLER].ulButtonTouched & k_buttonTouchpad) > 0; - - boolean pressedRStickRight = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0.5 ; - boolean pressedRStickLeft = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < -0.5 ; - boolean pressedRStickDown = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < -0.5 ; - boolean pressedRStickUp = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0.5 ; - - - if(!gui){ //ignore the left, right, middle mouse buttons - //R GRIP - if (pressedRHandTrigger && !lastpressedRHandTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_HAND_TRIGGER_PRESS.ordinal()].press(); - } - //R TRIGGER - if (pressedRTrigger && !lastpressedRTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_INDEX_TRIGGER_PRESS.ordinal()].press(); - } - //R A - if (pressedA && !lastpressedA) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_A_PRESS.ordinal()].press(); - } - } - - //R B - if (pressedB && !lastpressedB) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_B_PRESS.ordinal()].press(); - } - - //R GRIP - if (TouchedRHandTrigger && !lastTouchedRHandTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_HAND_TRIGGER_TOUCH.ordinal()].press(); - } - //R TRIGGER - if (TouchedRTrigger && !lastTouchedRTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_INDEX_TRIGGER_TOUCH.ordinal()].press(); + if (pressedLtouchpadBottomLeft && !lastpressedLtouchpadBottomLeft){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_BL.ordinal()].press(); + } + if (pressedLtouchpadBottomRight && !lastpressedLtouchpadBottomRight){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_BR.ordinal()].press(); + } + if (pressedLtouchpadTopLeft && !lastpressedLtouchpadTopLeft){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_UL.ordinal()].press(); + } + if (pressedLtouchpadTopRight && !lastpressedLtouchpadTopRight ){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_UR.ordinal()].press(); + } + //L TRIGGER + if (pressedLTrigger && !lastpressedLTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TRIGGER.ordinal()].press(); + } + if (pressedLAppMenu && !lastpressedLAppMenu) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_APPMENU.ordinal()].press(); + } + //L triggerclick + if (pressedLTriggerClick && !lastpressedLTriggerClick) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TRIGGER_FULLCLICK.ordinal()].press(); + } + + if(!pressedLGrip && lastpressedLGrip) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_GRIP.ordinal()].unpress(); + } + if (!pressedLtouchpadBottomLeft && lastpressedLtouchpadBottomLeft){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_BL.ordinal()].unpress(); + } + if (!pressedLtouchpadBottomRight && lastpressedLtouchpadBottomRight){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_BR.ordinal()].unpress(); + } + if (!pressedLtouchpadTopLeft && lastpressedLtouchpadTopLeft){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_UL.ordinal()].unpress(); + } + if (!pressedLtouchpadTopRight && lastpressedLtouchpadTopRight ){ + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TOUCHPAD_UR.ordinal()].unpress(); + } + if(!pressedLTrigger && lastpressedLTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TRIGGER.ordinal()].unpress(); + } + if(!pressedLAppMenu && lastpressedLAppMenu) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_APPMENU.ordinal()].unpress(); + } + if(!pressedLTriggerClick && lastpressedLTriggerClick) { + mc.vrSettings.buttonMappings[ViveButtons.BUTTON_LEFT_TRIGGER_FULLCLICK.ordinal()].unpress(); + } + + if(pressedLAppMenu && !lastpressedLAppMenu) { //handle menu directly + + if(pressedLGrip){ + setKeyboardOverlayShowing(!keyboardShowing, null); + } else{ + if(gui || keyboardShowing){ + + if(mc.currentScreen instanceof GuiWinGame){ //from 'esc' key on guiwingame since we cant push it. + mc.thePlayer.sendQueue.addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.PERFORM_RESPAWN)); + mc.displayGuiScreen((GuiScreen)null); + }else { + mc.thePlayer.closeScreen(); + setKeyboardOverlayShowing(false, null); + } + }else + mc.displayInGameMenu(); } - - //R B - if (TouchedB && !lastTouchedB) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_B_TOUCH.ordinal()].press(); - } - - //R A - if (TouchedA && !lastTouchedA) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_A_TOUCH.ordinal()].press(); - } - //R Stick - if (pressedRStick && !lastpressedRStick) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_PRESS.ordinal()].press(); - } + } - //R Stick - if (TouchedRStick && !lastTouchedRStick) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_TOUCH.ordinal()].press(); - } - //R Stick Left - if (pressedRStickLeft && !lastpressedRStickLeft) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_LEFT.ordinal()].press(); - } - //R Stick Right - if (pressedRStickRight && !lastpressedRStickRight) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_RIGHT.ordinal()].press(); - } - //R Stick Up - if (pressedRStickUp && !lastpressedRStickUp) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_UP.ordinal()].press(); + if(pressedRAppMenu && !lastpressedRAppMenu) { + if(mc.gameSettings.keyBindPickBlock.getIsKeyPressed() && mc.vrSettings.displayMirrorMode == mc.vrSettings.MIRROR_MIXED_REALITY){ + VRHotkeys.snapMRCam(mc,0); } - //R Stick Down - if (pressedRStickDown && !lastpressedRStickDown) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_DOWN.ordinal()].press(); - } - - + } + } + + //TODO: move somewhere else. + private static void processControllerButtonsOculus(boolean sleeping, boolean gui) + { + // right controller + //last + boolean lastpressedRHandTrigger = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_button_HandTrigger) > 0; + boolean lastpressedB = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; + boolean lastpressedA = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_button_A) > 0; + boolean lastpressedRTrigger = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean lastpressedRStick = (lastControllerState[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0; + + boolean lastTouchedRHandTrigger = (lastControllerState[RIGHT_CONTROLLER].ulButtonTouched & k_button_HandTrigger) > 0; + boolean lastTouchedB = (lastControllerState[RIGHT_CONTROLLER].ulButtonTouched & k_buttonAppMenu) > 0; + boolean lastTouchedA = (lastControllerState[RIGHT_CONTROLLER].ulButtonTouched & k_button_A) > 0; + boolean lastTouchedRTrigger = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean lastTouchedRStick = (lastControllerState[RIGHT_CONTROLLER].ulButtonTouched & k_buttonTouchpad) > 0; + + boolean lastpressedRStickRight = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0.5 ; + boolean lastpressedRStickLeft = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < -0.5 ; + boolean lastpressedRStickDown = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < -0.5 ; + boolean lastpressedRStickUp = lastControllerState[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0.5 ; + + //current + boolean pressedRHandTrigger = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_button_HandTrigger) > 0; + boolean pressedB = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; + boolean pressedA = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_button_A) > 0; + boolean pressedRTrigger = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean pressedRStick = (controllerStateReference[RIGHT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0; + + //current + boolean TouchedRHandTrigger = (controllerStateReference[RIGHT_CONTROLLER].ulButtonTouched & k_button_HandTrigger) > 0; + boolean TouchedB = (controllerStateReference[RIGHT_CONTROLLER].ulButtonTouched & k_buttonAppMenu) > 0; + boolean TouchedA = (controllerStateReference[RIGHT_CONTROLLER].ulButtonTouched & k_button_A) > 0; + boolean TouchedRTrigger = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean TouchedRStick = (controllerStateReference[RIGHT_CONTROLLER].ulButtonTouched & k_buttonTouchpad) > 0; + + boolean pressedRStickRight = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0.5 ; + boolean pressedRStickLeft = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < -0.5 ; + boolean pressedRStickDown = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < -0.5 ; + boolean pressedRStickUp = controllerStateReference[RIGHT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0.5 ; + + + if(!gui){ //ignore the left, right, middle mouse buttons //R GRIP - if (!pressedRHandTrigger && lastpressedRHandTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_HAND_TRIGGER_PRESS.ordinal()].unpress(); + if (pressedRHandTrigger && !lastpressedRHandTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_HAND_TRIGGER_PRESS.ordinal()].press(); } //R TRIGGER - if (!pressedRTrigger && lastpressedRTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_INDEX_TRIGGER_PRESS.ordinal()].unpress(); - } - //R B - if (!pressedB && lastpressedB) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_B_PRESS.ordinal()].unpress(); - } + if (pressedRTrigger && !lastpressedRTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_INDEX_TRIGGER_PRESS.ordinal()].press(); + } //R A - if (!pressedA && lastpressedA) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_A_PRESS.ordinal()].unpress(); + if (pressedA && !lastpressedA) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_A_PRESS.ordinal()].press(); } + } - //R Stick - if (!pressedRStick && lastpressedRStick) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_PRESS.ordinal()].unpress(); - } + //R B + if (pressedB && !lastpressedB) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_B_PRESS.ordinal()].press(); + } + + //R GRIP + if (TouchedRHandTrigger && !lastTouchedRHandTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_HAND_TRIGGER_TOUCH.ordinal()].press(); + } + //R TRIGGER + if (TouchedRTrigger && !lastTouchedRTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_INDEX_TRIGGER_TOUCH.ordinal()].press(); + } - //R GRIP - if (!TouchedRHandTrigger && lastTouchedRHandTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_HAND_TRIGGER_TOUCH.ordinal()].unpress(); - } - //R TRIGGER - if (!TouchedRTrigger && lastTouchedRTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_INDEX_TRIGGER_TOUCH.ordinal()].unpress(); - } - //R B - if (!TouchedB && lastTouchedB) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_B_TOUCH.ordinal()].unpress(); - } - //R A - if (!TouchedA && lastTouchedA) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_A_TOUCH.ordinal()].unpress(); - } - //R Stick - if (!TouchedRStick && lastTouchedRStick) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_TOUCH.ordinal()].unpress(); - } + //R B + if (TouchedB && !lastTouchedB) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_B_TOUCH.ordinal()].press(); + } + + //R A + if (TouchedA && !lastTouchedA) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_A_TOUCH.ordinal()].press(); + } + //R Stick + if (pressedRStick && !lastpressedRStick) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_PRESS.ordinal()].press(); + } - //R Stick Left - if (!pressedRStickLeft && lastpressedRStickLeft) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_LEFT.ordinal()].unpress(); - } - //R Stick Right - if (!pressedRStickRight && lastpressedRStickRight) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_RIGHT.ordinal()].unpress(); - } - //R Stick Up - if (!pressedRStickUp && lastpressedRStickUp) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_UP.ordinal()].unpress(); - } - //R Stick Down - if (!pressedRStickDown && lastpressedRStickDown) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_DOWN.ordinal()].unpress(); - } - - // LEFT controller - //last - boolean lastpressedLHandTrigger = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; - boolean lastpressedY = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; - boolean lastpressedX = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_button_A) > 0; - boolean lastpressedLTrigger = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean lastpressedLStick = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0; - - boolean lastTouchedLHandTrigger = (lastControllerState[LEFT_CONTROLLER].ulButtonTouched & k_buttonGrip) > 0; - boolean lastTouchedY = (lastControllerState[LEFT_CONTROLLER].ulButtonTouched & k_buttonAppMenu) > 0; - boolean lastTouchedX = (lastControllerState[LEFT_CONTROLLER].ulButtonTouched & k_button_A) > 0; - boolean lastTouchedLTrigger = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean lastTouchedLStick = (lastControllerState[LEFT_CONTROLLER].ulButtonTouched & k_buttonTouchpad) > 0; - - boolean lastpressedStickRight = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0.5 ; - boolean lastpressedStickLeft = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < -0.5 ; - boolean lastpressedStickDown = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < -0.5 ; - boolean lastpressedStickUp = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0.5 ; - - //current - boolean pressedLHandTrigger = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; - boolean pressedY = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; - boolean pressedX = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_button_A) > 0; - boolean pressedLTrigger = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean pressedLStick = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0; - - boolean TouchedLHandTrigger = (controllerStateReference[LEFT_CONTROLLER].ulButtonTouched & k_buttonGrip) > 0; - boolean TouchedY = (controllerStateReference[LEFT_CONTROLLER].ulButtonTouched & k_buttonAppMenu) > 0; - boolean TouchedX = (controllerStateReference[LEFT_CONTROLLER].ulButtonTouched & k_button_A) > 0; - boolean TouchedLTrigger = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; - boolean TouchedLStick = (controllerStateReference[LEFT_CONTROLLER].ulButtonTouched & k_buttonTouchpad) > 0; - - - boolean pressedStickRight = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0.5 ; - boolean pressedStickLeft = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < -0.5 ; - boolean pressedStickDown = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < -0.5 ; - boolean pressedStickUp = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0.5 ; - - - - rtbX = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x; - rtbY = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y; - - //press - - if(!gui){ - //L GRIP - if (pressedLHandTrigger && !lastpressedLHandTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_HAND_TRIGGER_PRESS.ordinal()].press(); - } - } + //R Stick + if (TouchedRStick && !lastTouchedRStick) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_TOUCH.ordinal()].press(); + } + //R Stick Left + if (pressedRStickLeft && !lastpressedRStickLeft) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_LEFT.ordinal()].press(); + } + //R Stick Right + if (pressedRStickRight && !lastpressedRStickRight) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_RIGHT.ordinal()].press(); + } + //R Stick Up + if (pressedRStickUp && !lastpressedRStickUp) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_UP.ordinal()].press(); + } + //R Stick Down + if (pressedRStickDown && !lastpressedRStickDown) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_DOWN.ordinal()].press(); + } - //L TRIGGER - if (pressedLTrigger && !lastpressedLTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_INDEX_TRIGGER_PRESS.ordinal()].press(); - } - //L B - if (pressedY && !lastpressedY) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_Y_PRESS.ordinal()].press(); - } - //L A - if (pressedX && !lastpressedX) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_X_PRESS.ordinal()].press(); - } - //L Stick - if (pressedLStick && !lastpressedLStick) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_PRESS.ordinal()].press(); - } - //L GRIP - if (TouchedLHandTrigger && !lastTouchedLHandTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_HAND_TRIGGER_TOUCH.ordinal()].press(); - } - //L TRIGGER - if (TouchedLTrigger && !lastTouchedLTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_INDEX_TRIGGER_TOUCH.ordinal()].press(); - } - //L B - if (TouchedY && !lastTouchedY) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_Y_TOUCH.ordinal()].press(); - } - //L A - if (TouchedX && !lastTouchedX) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_X_TOUCH.ordinal()].press(); - } - //L Stick - if (TouchedLStick && !lastTouchedLStick) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_TOUCH.ordinal()].press(); - } - //L Stick Left - if (pressedStickLeft && !lastpressedStickLeft) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_LEFT.ordinal()].press(); - } - //L Stick Right - if (pressedStickRight && !lastpressedStickRight) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_RIGHT.ordinal()].press(); - } - //L Stick Up - if (pressedStickUp && !lastpressedStickUp) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_UP.ordinal()].press(); - } - //L Stick Down - if (pressedStickDown && !lastpressedStickDown) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_DOWN.ordinal()].press(); - } - //unpress + //R GRIP + if (!pressedRHandTrigger && lastpressedRHandTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_HAND_TRIGGER_PRESS.ordinal()].unpress(); + } + //R TRIGGER + if (!pressedRTrigger && lastpressedRTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_INDEX_TRIGGER_PRESS.ordinal()].unpress(); + } + //R B + if (!pressedB && lastpressedB) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_B_PRESS.ordinal()].unpress(); + } + //R A + if (!pressedA && lastpressedA) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_A_PRESS.ordinal()].unpress(); + } + + //R Stick + if (!pressedRStick && lastpressedRStick) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_PRESS.ordinal()].unpress(); + } + + //R GRIP + if (!TouchedRHandTrigger && lastTouchedRHandTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_HAND_TRIGGER_TOUCH.ordinal()].unpress(); + } + //R TRIGGER + if (!TouchedRTrigger && lastTouchedRTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_INDEX_TRIGGER_TOUCH.ordinal()].unpress(); + } + //R B + if (!TouchedB && lastTouchedB) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_B_TOUCH.ordinal()].unpress(); + } + //R A + if (!TouchedA && lastTouchedA) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_A_TOUCH.ordinal()].unpress(); + } + //R Stick + if (!TouchedRStick && lastTouchedRStick) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_TOUCH.ordinal()].unpress(); + } + + //R Stick Left + if (!pressedRStickLeft && lastpressedRStickLeft) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_LEFT.ordinal()].unpress(); + } + //R Stick Right + if (!pressedRStickRight && lastpressedRStickRight) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_RIGHT.ordinal()].unpress(); + } + //R Stick Up + if (!pressedRStickUp && lastpressedRStickUp) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_UP.ordinal()].unpress(); + } + //R Stick Down + if (!pressedRStickDown && lastpressedRStickDown) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_RIGHT_STICK_DOWN.ordinal()].unpress(); + } + + // LEFT controller + //last + boolean lastpressedLHandTrigger = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; + boolean lastpressedY = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; + boolean lastpressedX = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_button_A) > 0; + boolean lastpressedLTrigger = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean lastpressedLStick = (lastControllerState[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0; + + boolean lastTouchedLHandTrigger = (lastControllerState[LEFT_CONTROLLER].ulButtonTouched & k_buttonGrip) > 0; + boolean lastTouchedY = (lastControllerState[LEFT_CONTROLLER].ulButtonTouched & k_buttonAppMenu) > 0; + boolean lastTouchedX = (lastControllerState[LEFT_CONTROLLER].ulButtonTouched & k_button_A) > 0; + boolean lastTouchedLTrigger = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean lastTouchedLStick = (lastControllerState[LEFT_CONTROLLER].ulButtonTouched & k_buttonTouchpad) > 0; + + boolean lastpressedStickRight = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0.5 ; + boolean lastpressedStickLeft = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < -0.5 ; + boolean lastpressedStickDown = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < -0.5 ; + boolean lastpressedStickUp = lastControllerState[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0.5 ; + + //current + boolean pressedLHandTrigger = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonGrip) > 0; + boolean pressedY = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonAppMenu) > 0; + boolean pressedX = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_button_A) > 0; + boolean pressedLTrigger = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean pressedLStick = (controllerStateReference[LEFT_CONTROLLER].ulButtonPressed & k_buttonTouchpad) > 0; + + boolean TouchedLHandTrigger = (controllerStateReference[LEFT_CONTROLLER].ulButtonTouched & k_buttonGrip) > 0; + boolean TouchedY = (controllerStateReference[LEFT_CONTROLLER].ulButtonTouched & k_buttonAppMenu) > 0; + boolean TouchedX = (controllerStateReference[LEFT_CONTROLLER].ulButtonTouched & k_button_A) > 0; + boolean TouchedLTrigger = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_Trigger].x > triggerThreshold; + boolean TouchedLStick = (controllerStateReference[LEFT_CONTROLLER].ulButtonTouched & k_buttonTouchpad) > 0; + + + boolean pressedStickRight = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x > 0.5 ; + boolean pressedStickLeft = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x < -0.5 ; + boolean pressedStickDown = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y < -0.5 ; + boolean pressedStickUp = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y > 0.5 ; + + + + rtbX = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].x; + rtbY = controllerStateReference[LEFT_CONTROLLER].rAxis[k_EAxis_TouchPad].y; + + //press + + if(!gui){ //L GRIP - if (!pressedLHandTrigger && lastpressedLHandTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_HAND_TRIGGER_PRESS.ordinal()].unpress(); - } - //L TRIGGER - if (!pressedLTrigger && lastpressedLTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_INDEX_TRIGGER_PRESS.ordinal()].unpress(); - } - //L B - if (!pressedY && lastpressedY) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_Y_PRESS.ordinal()].unpress(); - } - //L A - if (!pressedX && lastpressedX) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_X_PRESS.ordinal()].unpress(); - } - //L Stick - if (!pressedLStick && lastpressedLStick) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_PRESS.ordinal()].unpress(); - } - //L GRIP - if (!TouchedLHandTrigger && lastTouchedLHandTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_HAND_TRIGGER_TOUCH.ordinal()].unpress(); - } - //L TRIGGER - if (!TouchedLTrigger && lastTouchedLTrigger) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_INDEX_TRIGGER_TOUCH.ordinal()].unpress(); - } - //L B - if (!TouchedY && lastTouchedY) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_Y_TOUCH.ordinal()].unpress(); - } - //L A - if (!TouchedX && lastTouchedX) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_X_TOUCH.ordinal()].unpress(); + if (pressedLHandTrigger && !lastpressedLHandTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_HAND_TRIGGER_PRESS.ordinal()].press(); } - //L Stick - if (!TouchedLStick && lastTouchedLStick) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_TOUCH.ordinal()].unpress(); - } - //L Stick Left - if (!pressedStickLeft && lastpressedStickLeft) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_LEFT.ordinal()].unpress(); - } - //L Stick Right - if (!pressedStickRight && lastpressedStickRight) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_RIGHT.ordinal()].unpress(); + } + + //L TRIGGER + if (pressedLTrigger && !lastpressedLTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_INDEX_TRIGGER_PRESS.ordinal()].press(); + } + //L B + if (pressedY && !lastpressedY) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_Y_PRESS.ordinal()].press(); + } + //L A + if (pressedX && !lastpressedX) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_X_PRESS.ordinal()].press(); + } + //L Stick + if (pressedLStick && !lastpressedLStick) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_PRESS.ordinal()].press(); + } + //L GRIP + if (TouchedLHandTrigger && !lastTouchedLHandTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_HAND_TRIGGER_TOUCH.ordinal()].press(); + } + //L TRIGGER + if (TouchedLTrigger && !lastTouchedLTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_INDEX_TRIGGER_TOUCH.ordinal()].press(); + } + //L B + if (TouchedY && !lastTouchedY) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_Y_TOUCH.ordinal()].press(); + } + //L A + if (TouchedX && !lastTouchedX) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_X_TOUCH.ordinal()].press(); + } + //L Stick + if (TouchedLStick && !lastTouchedLStick) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_TOUCH.ordinal()].press(); + } + //L Stick Left + if (pressedStickLeft && !lastpressedStickLeft) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_LEFT.ordinal()].press(); + } + //L Stick Right + if (pressedStickRight && !lastpressedStickRight) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_RIGHT.ordinal()].press(); + } + //L Stick Up + if (pressedStickUp && !lastpressedStickUp) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_UP.ordinal()].press(); + } + //L Stick Down + if (pressedStickDown && !lastpressedStickDown) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_DOWN.ordinal()].press(); + } + //unpress + + //L GRIP + if (!pressedLHandTrigger && lastpressedLHandTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_HAND_TRIGGER_PRESS.ordinal()].unpress(); + } + //L TRIGGER + if (!pressedLTrigger && lastpressedLTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_INDEX_TRIGGER_PRESS.ordinal()].unpress(); + } + //L B + if (!pressedY && lastpressedY) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_Y_PRESS.ordinal()].unpress(); + } + //L A + if (!pressedX && lastpressedX) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_X_PRESS.ordinal()].unpress(); + } + //L Stick + if (!pressedLStick && lastpressedLStick) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_PRESS.ordinal()].unpress(); + } + //L GRIP + if (!TouchedLHandTrigger && lastTouchedLHandTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_HAND_TRIGGER_TOUCH.ordinal()].unpress(); + } + //L TRIGGER + if (!TouchedLTrigger && lastTouchedLTrigger) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_INDEX_TRIGGER_TOUCH.ordinal()].unpress(); + } + //L B + if (!TouchedY && lastTouchedY) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_Y_TOUCH.ordinal()].unpress(); + } + //L A + if (!TouchedX && lastTouchedX) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_X_TOUCH.ordinal()].unpress(); + } + //L Stick + if (!TouchedLStick && lastTouchedLStick) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_TOUCH.ordinal()].unpress(); + } + //L Stick Left + if (!pressedStickLeft && lastpressedStickLeft) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_LEFT.ordinal()].unpress(); + } + //L Stick Right + if (!pressedStickRight && lastpressedStickRight) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_RIGHT.ordinal()].unpress(); + } + //L Stick Up + if (!pressedStickUp && lastpressedStickUp) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_UP.ordinal()].unpress(); + } + //L Stick Down + if (!pressedStickDown && lastpressedStickDown) { + mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_DOWN.ordinal()].unpress(); + } + + + if(pressedY && !lastpressedY) { //handle menu directly + + if(pressedLHandTrigger){ + setKeyboardOverlayShowing(!keyboardShowing, null); + } else{ + if(gui || keyboardShowing){ + + if(mc.currentScreen instanceof GuiWinGame){ //from 'esc' key on guiwingame since we cant push it. + mc.thePlayer.sendQueue.addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.PERFORM_RESPAWN)); + mc.displayGuiScreen((GuiScreen)null); + }else { + mc.thePlayer.closeScreen(); + setKeyboardOverlayShowing(false, null); + } + }else + mc.displayInGameMenu(); } - //L Stick Up - if (!pressedStickUp && lastpressedStickUp) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_UP.ordinal()].unpress(); + } + + if(pressedA && !lastpressedA) { //handle menu directly + if(mc.gameSettings.keyBindPickBlock.getIsKeyPressed() && mc.vrSettings.displayMirrorMode == mc.vrSettings.MIRROR_MIXED_REALITY){ + VRHotkeys.snapMRCam(mc,0); } - //L Stick Down - if (!pressedStickDown && lastpressedStickDown) { - mc.vrSettings.buttonMappings[ViveButtons.OCULUS_LEFT_STICK_DOWN.ordinal()].unpress(); + } + + } + + private static void processVRFunctions(boolean sleeping, boolean gui) { + //VIVE SPECIFIC FUNCTIONALITY + //TODO: Find a better home for these. + + if( Keyboard.isKeyDown(Keyboard.KEY_RCONTROL)) return; + + //handle movementtoggle + if (mc.gameSettings.keyBindPickBlock.getIsKeyPressed()) { + if(mc.vrSettings.vrAllowLocoModeSwotch){ + moveModeSwitchcount++; + if (moveModeSwitchcount >= 20 * 4) { + moveModeSwitchcount = 0; + mc.vrPlayer.setFreeMoveMode(!mc.vrPlayer.getFreeMoveMode()); + } } + } else { + moveModeSwitchcount = 0; + } + if(rotateLeft.isPressed()){ + mc.vrSettings.vrWorldRotation+=mc.vrSettings.vrWorldRotationIncrement; + mc.vrSettings.vrWorldRotation = mc.vrSettings.vrWorldRotation % 360; + } - if(pressedY && !lastpressedY) { //handle menu directly - - if(pressedLHandTrigger){ - setKeyboardOverlayShowing(!keyboardShowing, null); - } else{ - if(gui || keyboardShowing){ + if(rotateRight.isPressed()){ + mc.vrSettings.vrWorldRotation-=mc.vrSettings.vrWorldRotationIncrement; + mc.vrSettings.vrWorldRotation = mc.vrSettings.vrWorldRotation % 360; + } + + if(!gui){ + if(walkabout.getIsKeyPressed()){ + float yaw = aimYaw; - if(mc.currentScreen instanceof GuiWinGame){ //from 'esc' key on guiwingame since we cant push it. - mc.thePlayer.sendQueue.addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.PERFORM_RESPAWN)); - mc.displayGuiScreen((GuiScreen)null); - }else { - mc.thePlayer.closeScreen(); - setKeyboardOverlayShowing(false, null); + //oh this is ugly. TODO: cache which hand when binding button. + for (VRControllerButtonMapping vb : mc.vrSettings.buttonMappings) { + if (vb.key == walkabout) { + if(vb.Button.name().contains("_LEFT")){ + yaw = laimYaw; + break; } - }else - mc.displayInGameMenu(); + } } - } - - if(pressedA && !lastpressedA) { //handle menu directly - if(mc.gameSettings.keyBindPickBlock.getIsKeyPressed() && mc.vrSettings.displayMirrorMode == mc.vrSettings.MIRROR_MIXED_REALITY){ - VRHotkeys.snapMRCam(mc,0); + + if (!isWalkingAbout){ + isWalkingAbout = true; + walkaboutYawStart = mc.vrSettings.vrWorldRotation + yaw; } - } - - } - - private static void processVRFunctions(boolean sleeping, boolean gui) { - //VIVE SPECIFIC FUNCTIONALITY - //TODO: Find a better home for these. - - if( Keyboard.isKeyDown(Keyboard.KEY_RCONTROL)) return; - - //handle movementtoggle - if (mc.gameSettings.keyBindPickBlock.getIsKeyPressed()) { - if(mc.vrSettings.vrAllowLocoModeSwotch){ - moveModeSwitchcount++; - if (moveModeSwitchcount >= 20 * 4) { - moveModeSwitchcount = 0; - mc.vrPlayer.setFreeMoveMode(!mc.vrPlayer.getFreeMoveMode()); - } + else { + mc.vrSettings.vrWorldRotation = walkaboutYawStart - yaw; + mc.vrSettings.vrWorldRotation %= 360; // Prevent stupidly large values (can they even happen here?) + // mc.vrPlayer.checkandUpdateRotateScale(true); } } else { - moveModeSwitchcount = 0; - } - - if(rotateLeft.isPressed()){ - mc.vrSettings.vrWorldRotation+=mc.vrSettings.vrWorldRotationIncrement; - mc.vrSettings.vrWorldRotation = mc.vrSettings.vrWorldRotation % 360; - } - - if(rotateRight.isPressed()){ - mc.vrSettings.vrWorldRotation-=mc.vrSettings.vrWorldRotationIncrement; - mc.vrSettings.vrWorldRotation = mc.vrSettings.vrWorldRotation % 360; + isWalkingAbout = false; } - - if(!gui){ - if(walkabout.getIsKeyPressed()){ - float yaw = aimYaw; - - //oh this is ugly. TODO: cache which hand when binding button. - for (VRControllerButtonMapping vb : mc.vrSettings.buttonMappings) { - if (vb.key == walkabout) { - if(vb.Button.name().contains("_LEFT")){ - yaw = laimYaw; - break; - } + } + + if(!gui){ + if(rotateFree.getIsKeyPressed()){ + float yaw = aimYaw; + + //oh this is ugly. TODO: cache which hand when binding button. + for (VRControllerButtonMapping vb : mc.vrSettings.buttonMappings) { + if (vb.key == rotateFree) { + if(vb.Button.name().contains("_LEFT")){ + yaw = laimYaw; + break; } } - - if (!isWalkingAbout){ - isWalkingAbout = true; - walkaboutYawStart = mc.vrSettings.vrWorldRotation + yaw; - } - else { - mc.vrSettings.vrWorldRotation = walkaboutYawStart - yaw; - mc.vrSettings.vrWorldRotation %= 360; // Prevent stupidly large values (can they even happen here?) - // mc.vrPlayer.checkandUpdateRotateScale(true); - } - } else { - isWalkingAbout = false; } - } - - if(!gui){ - if(rotateFree.getIsKeyPressed()){ - float yaw = aimYaw; - - //oh this is ugly. TODO: cache which hand when binding button. - for (VRControllerButtonMapping vb : mc.vrSettings.buttonMappings) { - if (vb.key == rotateFree) { - if(vb.Button.name().contains("_LEFT")){ - yaw = laimYaw; - break; - } - } - } - - if (!isFreeRotate){ - isFreeRotate = true; - walkaboutYawStart = mc.vrSettings.vrWorldRotation - yaw; - } - else { - mc.vrSettings.vrWorldRotation = walkaboutYawStart + yaw; + + if (!isFreeRotate){ + isFreeRotate = true; + walkaboutYawStart = mc.vrSettings.vrWorldRotation - yaw; + } + else { + mc.vrSettings.vrWorldRotation = walkaboutYawStart + yaw; // mc.vrPlayer.checkandUpdateRotateScale(true,0); - } - } else { - isFreeRotate = false; } + } else { + isFreeRotate = false; } - - - if(hotbarNext.isPressed()) { - changeHotbar(-1); - MCOpenVR.triggerHapticPulse(0, 250); - MCOpenVR.triggerHapticPulse(1, 250); - } - - if(hotbarPrev.isPressed()){ - changeHotbar(1); - MCOpenVR.triggerHapticPulse(0, 250); - MCOpenVR.triggerHapticPulse(1, 250); - } - - if(quickTorch.isPressed() && mc.thePlayer != null){ - for (int slot=0;slot<9;slot++) - { - ItemStack itemStack = mc.thePlayer.inventory.getStackInSlot(slot); - if (itemStack!=null && itemStack.getUnlocalizedName().equals("tile.torch") && mc.currentScreen == null) - { - quickTorchPreviousSlot = mc.thePlayer.inventory.currentItem; - mc.thePlayer.inventory.currentItem = slot; - mc.rightClickMouse(); - // switch back immediately - mc.thePlayer.inventory.currentItem = quickTorchPreviousSlot; - quickTorchPreviousSlot = -1; - break; - } - } - } - - // if you start teleporting, close any UI - if (gui && !sleeping && mc.gameSettings.keyBindForward.getIsKeyPressed() && !(mc.currentScreen instanceof GuiWinGame)) - { - mc.thePlayer.closeScreen(); - } + } - if(!mc.gameSettings.keyBindInventory.getIsKeyPressed()){ - startedOpeningInventory = 0; - } - //GuiContainer.java only listens directly to the keyboard to close. - if(gui && !(mc.currentScreen instanceof GuiWinGame) && mc.gameSettings.keyBindInventory.getIsKeyPressed()){ //inventory will repeat open/close while button is held down. TODO: fix. - if((getCurrentTimeSecs() - startedOpeningInventory) > 0.5) mc.thePlayer.closeScreen(); - mc.gameSettings.keyBindInventory.unpressKey(); //minecraft.java will open a new window otherwise. + if(hotbarNext.isPressed()) { + changeHotbar(-1); + MCOpenVR.triggerHapticPulse(0, 250); + MCOpenVR.triggerHapticPulse(1, 250); + } + + if(hotbarPrev.isPressed()){ + changeHotbar(1); + MCOpenVR.triggerHapticPulse(0, 250); + MCOpenVR.triggerHapticPulse(1, 250); + } + + if(quickTorch.isPressed() && mc.thePlayer != null){ + for (int slot=0;slot<9;slot++) + { + ItemStack itemStack = mc.thePlayer.inventory.getStackInSlot(slot); + if (itemStack!=null && itemStack.getUnlocalizedName().equals("tile.torch") && mc.currentScreen == null) + { + quickTorchPreviousSlot = mc.thePlayer.inventory.currentItem; + mc.thePlayer.inventory.currentItem = slot; + mc.rightClickMouse(); + // switch back immediately + mc.thePlayer.inventory.currentItem = quickTorchPreviousSlot; + quickTorchPreviousSlot = -1; + break; + } } + } + + // if you start teleporting, close any UI + if (gui && !sleeping && mc.gameSettings.keyBindForward.getIsKeyPressed() && !(mc.currentScreen instanceof GuiWinGame)) + { + mc.thePlayer.closeScreen(); + } + + if(!mc.gameSettings.keyBindInventory.getIsKeyPressed()){ + startedOpeningInventory = 0; + } + //GuiContainer.java only listens directly to the keyboard to close. + if(gui && !(mc.currentScreen instanceof GuiWinGame) && mc.gameSettings.keyBindInventory.getIsKeyPressed()){ //inventory will repeat open/close while button is held down. TODO: fix. + if((getCurrentTimeSecs() - startedOpeningInventory) > 0.5) mc.thePlayer.closeScreen(); + mc.gameSettings.keyBindInventory.unpressKey(); //minecraft.java will open a new window otherwise. } - + } + + //jrbuda:: oh hello there you are. private static void pollInputEvents() { @@ -1988,13 +1988,13 @@ private static void processTouchpadSampleBuffer() } - + private static void changeHotbar(int dir){ mc.thePlayer.inventory.changeCurrentItem(dir); short duration = 250; vrsystem.TriggerHapticPulse.apply(controllerDeviceIndex[1], 0, duration); } - + private static void updatePose() { if ( vrsystem == null || vrCompositor == null ) @@ -2002,7 +2002,7 @@ private static void updatePose() int ret = vrCompositor.WaitGetPoses.apply(hmdTrackedDevicePoseReference, JOpenVRLibrary.k_unMaxTrackedDeviceCount, null, 0); if(ret>0)System.out.println("Compositor Error: GetPoseError " + OpenVRStereoRenderer.getCompostiorError(ret)); - + if(ret == 101){ //this is so dumb but it works. triggerHapticPulse(0, 500); triggerHapticPulse(1, 500); @@ -2010,7 +2010,7 @@ private static void updatePose() if(controllerDeviceIndex[0] != -1 && controllerDeviceIndex[1] !=-1) controllerDeviceIndex[THIRD_CONTROLLER] = -1; - + for (int nDevice = 0; nDevice < JOpenVRLibrary.k_unMaxTrackedDeviceCount; ++nDevice ) { hmdTrackedDevicePoses[nDevice].read(); @@ -2018,16 +2018,16 @@ private static void updatePose() { jopenvr.OpenVRUtil.convertSteamVRMatrix3ToMatrix4f(hmdTrackedDevicePoses[nDevice].mDeviceToAbsoluteTracking, poseMatrices[nDevice]); } - + if(mc.vrSettings.displayMirrorMode == VRSettings.MIRROR_MIXED_REALITY){ int c = vrsystem.GetTrackedDeviceClass.apply(nDevice); int r = vrsystem.GetControllerRoleForTrackedDeviceIndex.apply(nDevice); - if((c == 2 && r == 0) || c == 3) - controllerDeviceIndex[THIRD_CONTROLLER] = nDevice; + if((c == 2 && r == 0) || c == 3) + controllerDeviceIndex[THIRD_CONTROLLER] = nDevice; } - + } - + if (hmdTrackedDevicePoses[JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd].bPoseIsValid != 0 ) { OpenVRUtil.Matrix4fCopy(poseMatrices[JOpenVRLibrary.k_unTrackedDeviceIndex_Hmd], hmdPose); @@ -2060,7 +2060,7 @@ private static void updatePose() updateAim(); } - + /** * * @return Play area size or null if not valid @@ -2077,7 +2077,7 @@ public static float[] getPlayAreaSize() { /** * @return The coordinate of the 'center' eye position relative to the head yaw plane */ - + static Vec3 getCenterEyePosition() { Vector3f pos = OpenVRUtil.convertMatrix4ftoTranslationVector(hmdPose); return Vec3.createVectorHelper(pos.x + offset.x, pos.y + offset.y, pos.z + offset.z); @@ -2086,7 +2086,7 @@ static Vec3 getCenterEyePosition() { /** * @return The coordinate of the left or right eye position relative to the head yaw plane */ - + static Vec3 getEyePosition(renderPass eye) { Matrix4f hmdToEye = hmdPoseRightEye; @@ -2099,7 +2099,7 @@ static Vec3 getEyePosition(renderPass eye) } else { hmdToEye = null; } - + if(hmdToEye == null){ Matrix4f pose = hmdPose; Vector3f pos = OpenVRUtil.convertMatrix4ftoTranslationVector(pose); @@ -2117,7 +2117,7 @@ static Vec3 getEyePosition(renderPass eye) * * @return The Head Yaw, in degrees */ - + static float getHeadYawDegrees() { Quatf quat = OpenVRUtil.convertMatrix4ftoRotationQuat(hmdPose); @@ -2132,7 +2132,7 @@ static float getHeadYawDegrees() * * @return The Head Pitch, in degrees */ - + static float getHeadPitchDegrees() { Quatf quat = OpenVRUtil.convertMatrix4ftoRotationQuat(hmdPose); @@ -2147,11 +2147,11 @@ static float getHeadPitchDegrees() * * @return quaternion w, x, y & z components */ - - + + final String k_pch_SteamVR_Section = "steamvr"; final String k_pch_SteamVR_RenderTargetMultiplier_Float = "renderTargetMultiplier"; - + static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) { KeyBinding.unPressAllKeys(); @@ -2159,12 +2159,12 @@ static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) KeyboardSimulator.robot.mouseRelease(InputEvent.BUTTON2_DOWN_MASK); KeyboardSimulator.robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK); KeyboardSimulator.robot.keyRelease(KeyEvent.VK_SHIFT); - + if(newScreen == null || (mc.thePlayer!=null && !mc.thePlayer.isEntityAlive())){ - guiPos_World = null; + guiPos_Room = null; guiRotationPose = null; } - + // main menu/win game/ if (mc.theWorld==null || newScreen instanceof GuiWinGame ) { //TODO reset scale things @@ -2174,18 +2174,18 @@ static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) mc.vrSettings.vrWorldRotation = 0; mc.vrPlayer.worldRotationRadians = (float) Math.toRadians( mc.vrSettings.vrWorldRotation); float[] playArea = getPlayAreaSize(); - guiPos_World = new Vector3f( + Vector3f guiPos_World = new Vector3f( (float) (0 + mc.vrPlayer.getRoomOriginPos_World().xCoord), (float) (1.3f + mc.vrPlayer.getRoomOriginPos_World().yCoord), (float) ((playArea != null ? -playArea[1] / 2 : -1.5f) - 0.3f + mc.vrPlayer.getRoomOriginPos_World().zCoord)); - - + + guiRotationPose = new Matrix4f(); guiRotationPose.M[0][0] = guiRotationPose.M[1][1] = guiRotationPose.M[2][2] = guiRotationPose.M[3][3] = 1.0F; guiRotationPose.M[0][1] = guiRotationPose.M[1][0] = guiRotationPose.M[2][3] = guiRotationPose.M[3][1] = 0.0F; guiRotationPose.M[0][2] = guiRotationPose.M[1][2] = guiRotationPose.M[2][0] = guiRotationPose.M[3][2] = 0.0F; guiRotationPose.M[0][3] = guiRotationPose.M[1][3] = guiRotationPose.M[2][1] = guiRotationPose.M[3][0] = 0.0F; - + return; } else { //these dont update when screen open. if (mc.vrSettings.vrWorldRotationCached != 0) { @@ -2193,7 +2193,7 @@ static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) mc.vrSettings.vrWorldRotationCached = 0; } } - + // i am dead view if (mc.thePlayer!=null && !mc.thePlayer.isEntityAlive()) { @@ -2202,7 +2202,7 @@ static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) MCOpenVR.guiScale = 1.0f*mc.vrPlayer.worldScale; Vec3 v = mc.entityRenderer.getEyeRenderPos(renderPass.Center); Vec3 d = mc.roomScale.getHMDDir_World(); - guiPos_World = new Vector3f( + Vector3f guiPos_World = new Vector3f( (float) (v.xCoord + d.xCoord*mc.vrPlayer.worldScale), (float) (v.yCoord + d.yCoord*mc.vrPlayer.worldScale), (float) (v.zCoord + d.zCoord*mc.vrPlayer.worldScale)); @@ -2212,10 +2212,10 @@ static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) guiRotationPose = new Matrix4f(orientationQuat); guiRotationPose.M[3][3] = 1.0f; - - guiPos_World = guiPos_World.subtract(new Vector3f((float)mc.entityRenderer.interPolatedRoomOrigin.xCoord, + + guiPos_Room = guiPos_World.subtract(new Vector3f((float)mc.entityRenderer.interPolatedRoomOrigin.xCoord, (float) mc.entityRenderer.interPolatedRoomOrigin.yCoord, (float) mc.entityRenderer.interPolatedRoomOrigin.zCoord)); - + } else if ( previousScreen==null && newScreen != null || newScreen instanceof GuiContainerCreative || newScreen instanceof GuiChat) { @@ -2235,7 +2235,7 @@ static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) if(appearOverBlock && mc.objectMouseOver !=null){ guiScale =(float) (Math.sqrt(mc.vrPlayer.worldScale) * 2); - guiPos_World =new Vector3f((float) mc.objectMouseOver.blockX + 0.5f, + Vector3f guiPos_World =new Vector3f((float) mc.objectMouseOver.blockX + 0.5f, (float) mc.objectMouseOver.blockY + 1.7f, (float) mc.objectMouseOver.blockZ + 0.5f); @@ -2250,23 +2250,23 @@ static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) guiRotationPose = Matrix4f.rotationY((float) yaw); Matrix4f tilt = OpenVRUtil.rotationXMatrix(pitch); guiRotationPose = Matrix4f.multiply(guiRotationPose,tilt); - - guiPos_World = guiPos_World.subtract(new Vector3f((float)mc.entityRenderer.interPolatedRoomOrigin.xCoord, + + guiPos_Room = guiPos_World.subtract(new Vector3f((float)mc.entityRenderer.interPolatedRoomOrigin.xCoord, (float) mc.entityRenderer.interPolatedRoomOrigin.yCoord, (float) mc.entityRenderer.interPolatedRoomOrigin.zCoord)); - + } else{ Vec3 adj = Vec3.createVectorHelper(0,0,-2); if (newScreen instanceof GuiChat){ - adj = Vec3.createVectorHelper(0.3,1,-2); + adj = Vec3.createVectorHelper(0.3,1,-2); } else if (newScreen instanceof GuiScreenBook || newScreen instanceof GuiEditSign) { - adj = Vec3.createVectorHelper(0,1,-2); + adj = Vec3.createVectorHelper(0,1,-2); } - + Vec3 v = mc.vrPlayer.getHMDPos_World(); Vec3 e = mc.roomScale.getCustomHMDVector(adj); - guiPos_World = new Vector3f( + Vector3f guiPos_World = new Vector3f( (float) (e.xCoord * mc.vrPlayer.worldScale / 2 + v.xCoord), (float) (e.yCoord* mc.vrPlayer.worldScale / 2 + v.yCoord), (float) (e.zCoord* mc.vrPlayer.worldScale / 2 + v.zCoord)); @@ -2278,17 +2278,17 @@ static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) guiScale = mc.vrPlayer.worldScale; if(mc.theWorld == null) guiScale = 2.0f; - + guiRotationPose = Matrix4f.rotationY((float) Math.toRadians( getHeadYawDegrees() + mc.vrSettings.vrWorldRotation)); Matrix4f tilt = OpenVRUtil.rotationXMatrix((float)Math.toRadians(mc.roomScale.getHMDPitch_World())); guiRotationPose = Matrix4f.multiply(guiRotationPose,tilt); - guiPos_World = guiPos_World.subtract(new Vector3f((float)mc.entityRenderer.interPolatedRoomOrigin.xCoord, + guiPos_Room = guiPos_World.subtract(new Vector3f((float)mc.entityRenderer.interPolatedRoomOrigin.xCoord, (float) mc.entityRenderer.interPolatedRoomOrigin.yCoord, (float) mc.entityRenderer.interPolatedRoomOrigin.zCoord)); - + } } - + @@ -2300,50 +2300,50 @@ static void onGuiScreenChanged(GuiScreen previousScreen, GuiScreen newScreen) float getBodyPitchDegrees() { return 0; //Always return 0 for body pitch } - + float getAimYaw() { return aimYaw; } - + float getAimPitch() { return aimPitch; } - - Vector3f forward = new Vector3f(0,0,-1); - + + Vector3f forward = new Vector3f(0,0,-1); + Vec3 getAimVector( int controller ) { Matrix4f aimRotation = getAimRotation(controller); - Vector3f controllerDirection = aimRotation.transform(forward); + Vector3f controllerDirection = aimRotation.transform(forward); Vec3 out = Vec3.createVectorHelper(controllerDirection.x, controllerDirection.y,controllerDirection.z); return out; } - - + + public static Matrix4f getAimRotation( int controller ) { return controller == 0 ? controllerRotation[0]: controllerRotation[1]; } - - + + static Vec3 getAimSource( int controller ) { if(!mc.vrSettings.seated) return Vec3.createVectorHelper(aimSource[controller].xCoord + offset.x, aimSource[controller].yCoord + offset.y, aimSource[controller].zCoord + offset.z); return Vec3.createVectorHelper(aimSource[controller].xCoord, aimSource[controller].yCoord, aimSource[controller].zCoord); } - - + + static void triggerHapticPulse(int controller, int strength) { if (controllerDeviceIndex[controller]==-1) return; vrsystem.TriggerHapticPulse.apply(controllerDeviceIndex[controller], 0, (short)strength); } - - + + private static void updateAim() { if (mc==null) return; Vector3f forward = new Vector3f(0,0,-1); - + hmdRotation.M[0][0] = hmdPose.M[0][0]; hmdRotation.M[0][1] = hmdPose.M[0][1]; hmdRotation.M[0][2] = hmdPose.M[0][2]; @@ -2360,14 +2360,14 @@ private static void updateAim() { hmdRotation.M[3][1] = 0.0F; hmdRotation.M[3][2] = 0.0F; hmdRotation.M[3][3] = 1.0F; - + headDirection = hmdRotation.transform(forward); - + Vec3 eye = getCenterEyePosition(); hmdHistory.add(eye); Vector3f v3 = MCOpenVR.hmdRotation.transform(new Vector3f(0,-.1f, .1f)); hmdPivotHistory.add(Vec3.createVectorHelper(v3.x+eye.xCoord, v3.y+eye.yCoord, v3.z+eye.zCoord)); - + handRotation[0].M[0][0] = controllerPose[0].M[0][0]; handRotation[0].M[0][1] = controllerPose[0].M[0][1]; handRotation[0].M[0][2] = controllerPose[0].M[0][2]; @@ -2384,20 +2384,20 @@ private static void updateAim() { handRotation[0].M[3][1] = 0.0F; handRotation[0].M[3][2] = 0.0F; handRotation[0].M[3][3] = 1.0F; - + if(mc.vrSettings.seated){ controllerPose[0] = hmdPose.inverted().inverted(); controllerPose[1] = hmdPose.inverted().inverted(); } else controllerPose[0] = Matrix4f.multiply(controllerPose[0], controllerTipTransform[0]); - + // grab controller position in tracker space, scaled to minecraft units Vector3f controllerPos = OpenVRUtil.convertMatrix4ftoTranslationVector(controllerPose[0]); - + aimSource[0] = Vec3.createVectorHelper(controllerPos.x, controllerPos.y, controllerPos.z); controllerHistory[0].add(aimSource[0]); - + // build matrix describing controller rotation controllerRotation[0].M[0][0] = controllerPose[0].M[0][0]; controllerRotation[0].M[0][1] = controllerPose[0].M[0][1]; @@ -2418,7 +2418,7 @@ private static void updateAim() { if(mc.vrSettings.seated && mc.currentScreen == null){ org.lwjgl.util.vector.Matrix4f temp = new org.lwjgl.util.vector.Matrix4f(); - + float hRange = 110; float vRange = 180; double h = Mouse.getX() / (double) mc.displayWidth * hRange - (hRange / 2); @@ -2433,12 +2433,12 @@ private static void updateAim() { int rightedge=(int)((rotStart + (hRange / 2)) *(double) mc.displayWidth / hRange )-1; float rotMul = ((float)Math.abs(h) - rotStart) / ((hRange / 2) - rotStart); // Scaled 0...1 from rotStart to FOV edge if(rotMul > 0.15) rotMul = 0.15f; - + if(h < -rotStart){ mc.vrSettings.vrWorldRotation += rotSpeed * rotMul * mc.getFrameDelta(); mc.vrSettings.vrWorldRotation %= 360; // Prevent stupidly large values hmdForwardYaw = (float)Math.toDegrees(Math.atan2(headDirection.x, headDirection.z)); - // mc.vrPlayer.checkandUpdateRotateScale(true); + // mc.vrPlayer.checkandUpdateRotateScale(true); Mouse.setCursorPosition(leftedge,Mouse.getY()); h=-rotStart; } @@ -2446,7 +2446,7 @@ private static void updateAim() { mc.vrSettings.vrWorldRotation -= rotSpeed * rotMul * mc.getFrameDelta(); mc.vrSettings.vrWorldRotation %= 360; // Prevent stupidly large values hmdForwardYaw = (float)Math.toDegrees(Math.atan2(headDirection.x, headDirection.z)); - // mc.vrPlayer.checkandUpdateRotateScale(true); + // mc.vrPlayer.checkandUpdateRotateScale(true); Mouse.setCursorPosition(rightedge,Mouse.getY()); h=rotStart; } @@ -2458,22 +2458,22 @@ private static void updateAim() { } temp.rotate((float) Math.toRadians(-nPitch), new org.lwjgl.util.vector.Vector3f(1,0,0)); - + temp.rotate((float) Math.toRadians(-180 + h - hmdForwardYaw), new org.lwjgl.util.vector.Vector3f(0,1,0)); - + controllerRotation[0].M[0][0] = temp.m00; controllerRotation[0].M[0][1] = temp.m01; controllerRotation[0].M[0][2] = temp.m02; - + controllerRotation[0].M[1][0] = temp.m10; controllerRotation[0].M[1][1] = temp.m11; controllerRotation[0].M[1][2] = temp.m12; - + controllerRotation[0].M[2][0] = temp.m20; controllerRotation[0].M[2][1] = temp.m21; controllerRotation[0].M[2][2] = temp.m22; } - + // Calculate aim angles from controller orientation // Minecraft entities don't have a roll, so just base it on a direction controllerDirection = controllerRotation[0].transform(forward); @@ -2496,18 +2496,18 @@ private static void updateAim() { handRotation[1].M[3][1] = 0.0F; handRotation[1].M[3][2] = 0.0F; handRotation[1].M[3][3] = 1.0F; - + // update off hand aim if(!mc.vrSettings.seated) controllerPose[1] = Matrix4f.multiply(controllerPose[1], controllerTipTransform[1]); - + // update off hand aim Vector3f leftControllerPos = OpenVRUtil.convertMatrix4ftoTranslationVector(controllerPose[1]); - + aimSource[1] = Vec3.createVectorHelper(leftControllerPos.x, leftControllerPos.y, leftControllerPos.z); controllerHistory[1].add(aimSource[1]); - + // build matrix describing controller rotation controllerRotation[1].M[0][0] = controllerPose[1].M[0][0]; controllerRotation[1].M[0][1] = controllerPose[1].M[0][1]; @@ -2530,11 +2530,11 @@ private static void updateAim() { aimSource[1] = getCenterEyePosition(); aimSource[0] = getCenterEyePosition(); } - + lcontrollerDirection = controllerRotation[1].transform(forward); laimPitch = (float)Math.toDegrees(Math.asin(lcontrollerDirection.y/lcontrollerDirection.length())); laimYaw = (float)Math.toDegrees(Math.atan2(lcontrollerDirection.x, lcontrollerDirection.z)); - + boolean debugThirdController = false; if(controllerTracking[2] || debugThirdController){ //third controller Vector3f thirdControllerPos = OpenVRUtil.convertMatrix4ftoTranslationVector(controllerPose[2]); @@ -2571,11 +2571,11 @@ private static void updateAim() { } } } - + public static Matrix4f getHandRotation( int controller ) { return controller == 0 ? handRotation[0]: handRotation[1]; } - + private static void getTipTransforms() { if (vrRenderModels == null) return; int count = vrRenderModels.GetRenderModelCount.apply(); @@ -2592,19 +2592,19 @@ private static void getTipTransforms() { } } } - + public static double getCurrentTimeSecs() { return System.nanoTime() / 1000000000d; } - + public static void resetPosition() { Vec3 cp = getCenterEyePosition(); Vec3 pos = Vec3.createVectorHelper(cp.xCoord*-1 + offset.x,cp.yCoord*-1 + offset.y,cp.zCoord*-1 + offset.z); offset=new Vector3f((float) pos.xCoord,(float)pos.yCoord+1.62f,(float)pos.zCoord); } - + public static void clearOffset() { offset=new Vector3f(0,0,0); } diff --git a/src/com/mtbs3d/minecrift/settings/VRSettings.java b/src/com/mtbs3d/minecrift/settings/VRSettings.java index f5faf809..2480e956 100644 --- a/src/com/mtbs3d/minecrift/settings/VRSettings.java +++ b/src/com/mtbs3d/minecrift/settings/VRSettings.java @@ -1060,7 +1060,7 @@ public void setOptionValue(VRSettings.VrOptions par1EnumOptions, int par2) this.vrHudLockMode = HUD_LOCK_WRIST; break; case HUD_LOCK_WRIST: - this.vrHudLockMode = HUD_LOCK_BODY; + this.vrHudLockMode = HUD_LOCK_HAND; break; case HUD_LOCK_BODY: this.vrHudLockMode = HUD_LOCK_HAND;