/** * Check every axis on every gamepad to ensure that everything is * as stable as possible. * * @return true if the axis are stable, false otherwise */ static public bool TrainAxisStable() { bool stable = true; if (Input.axisRest == null) { Input.axisRest = new float[gamepadNum * gamepadAxisNum]; for (int i = 1; i < gamepadNum * gamepadAxisNum; i++) { Input.axisRest[i] = 0.0f; } } for (int gpIdx = 1; gpIdx < gamepadNum; gpIdx++) { for (int gpAxis = 0; gpAxis < gamepadAxisNum; gpAxis++) { int i = gpIdx * gamepadAxisNum + gpAxis; string name = $"joystick {gpIdx} axis {gpAxis}"; float cur = DefInput.GetAxisRaw(name); float rest = Input.axisRest[i]; float diff = Math.Abs(rest - cur); Input.axisRest[i] = 0.99f * (cur * 0.75f + rest * 0.25f); stable = (stable && diff < 0.05f); } } return(stable); }
public float GetAxis() { if (type == VirtualInputChannelType.Axis) { if (isAxisToAxisRemapped) { float value = UnInput.GetAxisRaw(name); if (value < 0) { return(-Easing.Ease(axisToAxisRemapType, axisToAxisRemapPhase, -value) * axisToAxisRemapScale); } else { return(Easing.Ease(axisToAxisRemapType, axisToAxisRemapPhase, value) * axisToAxisRemapScale); } } else { return(UnInput.GetAxisRaw(name)); } } else if (type == VirtualInputChannelType.Button) { if (negName != null) { bool pos = UnInput.GetButton(name), neg = UnInput.GetButton(negName); if (pos ^ neg) { return(pos ? buttonToAxisValue : -buttonToAxisValue); } else { return(0); } } else { return(UnInput.GetButton(name) ? buttonToAxisValue : 0); } } else // Key { if (negKey != UnKeyCode.None) { bool pos = UnInput.GetKey(key), neg = UnInput.GetKey(negKey); if (pos ^ neg) { return(pos ? buttonToAxisValue : -buttonToAxisValue); } else { return(0); } } else { return(UnInput.GetKey(key) ? buttonToAxisValue : 0); } } }
private void InitializeCurrentRightAndLeftState() { var rightPressed = UnityInput.GetAxisRaw("Horizontal") > 0; var leftPressed = UnityInput.GetAxisRaw("Horizontal") < 0; currentRightState = rightPressed && !leftPressed; currentLeftState = leftPressed && !rightPressed; }
public static new float GetAxisRaw(string axisName) { if (!Enabled) { return(0f); } return(UnityInput.GetAxisRaw(axisName)); }
public float GetAxisRaw() { if (this.isKey) { return(this.key2axis()); } else { return(this.axisVal2axis(DefInput.GetAxisRaw(this.input))); } }
public bool GetButton() { if (type == VirtualInputChannelType.Axis) { return(UnInput.GetAxisRaw(name) > axisToButtonThreshold); } else if (type == VirtualInputChannelType.Button) { return(UnInput.GetButton(name)); } else { return(UnInput.GetKey(key)); } }
/// <summary> /// Update the Touchpad / Thumbstick input from the device (in OpenVR, touchpad and thumbstick are the same input control) /// </summary> protected void UpdateDualAxisData(MixedRealityInteractionMapping interactionMapping) { Debug.Assert(interactionMapping.AxisType == AxisType.DualAxis); dualAxisPosition.x = UInput.GetAxisRaw(interactionMapping.AxisCodeX); dualAxisPosition.y = UInput.GetAxisRaw(interactionMapping.AxisCodeY); // Update the interaction data source interactionMapping.Vector2Data = dualAxisPosition; // If our value changed raise it. if (interactionMapping.Changed) { // Raise input system Event if it enabled InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionMapping.Vector2Data); } }
/// <summary> /// Update an Interaction Bool data type from a Bool input /// </summary> /// <remarks> /// <para>Raises an Input System "Input Down" event when the key is down, and raises an "Input Up" when it is released (e.g. a Button). /// Also raises a "Pressed" event while pressed.</para> /// </remarks> protected void UpdateButtonData(MixedRealityInteractionMapping interactionMapping) { using (UpdateButtonDataPerfMarker.Auto()) { Debug.Assert(interactionMapping.AxisType == AxisType.Digital); // Update the interaction data source switch (interactionMapping.InputType) { case DeviceInputType.TriggerPress: interactionMapping.BoolData = UInput.GetAxisRaw(interactionMapping.AxisCodeX).Equals(1); break; case DeviceInputType.TriggerTouch: case DeviceInputType.TriggerNearTouch: case DeviceInputType.ThumbNearTouch: case DeviceInputType.IndexFingerNearTouch: case DeviceInputType.MiddleFingerNearTouch: case DeviceInputType.RingFingerNearTouch: case DeviceInputType.PinkyFingerNearTouch: interactionMapping.BoolData = interactionMapping.KeyCode == KeyCode.None ? !UInput.GetAxisRaw(interactionMapping.AxisCodeX).Equals(0) : UInput.GetKey(interactionMapping.KeyCode); break; default: interactionMapping.BoolData = UInput.GetKey(interactionMapping.KeyCode); break; } // If our value changed raise it. if (interactionMapping.Changed) { // Raise input system event if it's enabled if (interactionMapping.BoolData) { CoreServices.InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); } else { CoreServices.InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); } } } }
/// <summary> /// Update an Interaction Bool data type from a Bool input /// </summary> /// <remarks> /// Raises an Input System "Input Down" event when the key is down, and raises an "Input Up" when it is released (e.g. a Button) /// Also raises a "Pressed" event while pressed /// </remarks> protected void UpdateButtonData(MixedRealityInteractionMapping interactionMapping) { Profiler.BeginSample("[MRTK] GenericJoystickController.UpdateButtonData"); Debug.Assert(interactionMapping.AxisType == AxisType.Digital); // Update the interaction data source switch (interactionMapping.InputType) { case DeviceInputType.TriggerPress: interactionMapping.BoolData = UInput.GetAxisRaw(interactionMapping.AxisCodeX).Equals(1); break; case DeviceInputType.TriggerNearTouch: case DeviceInputType.ThumbNearTouch: case DeviceInputType.IndexFingerNearTouch: case DeviceInputType.MiddleFingerNearTouch: case DeviceInputType.RingFingerNearTouch: case DeviceInputType.PinkyFingerNearTouch: interactionMapping.BoolData = !UInput.GetAxisRaw(interactionMapping.AxisCodeX).Equals(0); break; default: interactionMapping.BoolData = UInput.GetKey(interactionMapping.KeyCode); break; } // If our value changed raise it. if (interactionMapping.Changed) { // Raise input system event if it's enabled if (interactionMapping.BoolData) { CoreServices.InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); } else { CoreServices.InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); } } Profiler.EndSample(); // UpdateButtonData }
/// <summary> /// Update an Interaction Float data type from a SingleAxis (float) input /// </summary> /// <remarks> /// Raises a Float Input Changed event when the float data changes /// </remarks> protected void UpdateSingleAxisData(MixedRealityInteractionMapping interactionMapping) { Profiler.BeginSample("[MRTK] GenericJoystickController.UpdateSingleAxisData"); Debug.Assert(interactionMapping.AxisType == AxisType.SingleAxis); var singleAxisValue = UInput.GetAxisRaw(interactionMapping.AxisCodeX); if (interactionMapping.InputType == DeviceInputType.TriggerPress) { interactionMapping.BoolData = singleAxisValue.Equals(1); // If our value changed raise it. if (interactionMapping.Changed) { // Raise input system event if it's enabled if (interactionMapping.BoolData) { CoreServices.InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); } else { CoreServices.InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); } } } else { // Update the interaction data source interactionMapping.FloatData = singleAxisValue; // If our value changed raise it. if (interactionMapping.Changed) { // Raise input system event if it's enabled CoreServices.InputSystem?.RaiseFloatInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionMapping.FloatData); } } Profiler.EndSample(); // UpdateSingleAxisData }
/// <summary> /// Update the Touchpad / Thumbstick input from the device (in OpenVR, touchpad and thumbstick are the same input control) /// </summary> protected void UpdateDualAxisData(MixedRealityInteractionMapping interactionMapping) { Profiler.BeginSample("[MRTK] GenericJoystickController.UpdateDualAxisData"); Debug.Assert(interactionMapping.AxisType == AxisType.DualAxis); dualAxisPosition.x = UInput.GetAxisRaw(interactionMapping.AxisCodeX); dualAxisPosition.y = UInput.GetAxisRaw(interactionMapping.AxisCodeY); // Update the interaction data source interactionMapping.Vector2Data = dualAxisPosition; // If our value changed raise it. if (interactionMapping.Changed) { // Raise input system event if it's enabled CoreServices.InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionMapping.Vector2Data); } Profiler.EndSample(); // UpdateDualAxisData }
/// <summary> /// Update an Interaction Float data type from a SingleAxis (float) input /// </summary> /// <remarks> /// Raises a Float Input Changed event when the float data changes /// </remarks> protected void UpdateSingleAxisData(MixedRealityInteractionMapping interactionMapping) { using (UpdateSingleAxisDataPerfMarker.Auto()) { Debug.Assert(interactionMapping.AxisType == AxisType.SingleAxis); var singleAxisValue = UInput.GetAxisRaw(interactionMapping.AxisCodeX); if (interactionMapping.InputType == DeviceInputType.TriggerPress || interactionMapping.InputType == DeviceInputType.GripPress) { interactionMapping.BoolData = singleAxisValue.Equals(1); // If our value changed raise it. if (interactionMapping.Changed) { // Raise input system event if it's enabled if (interactionMapping.BoolData) { CoreServices.InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); } else { CoreServices.InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); } } } else { // Update the interaction data source interactionMapping.FloatData = singleAxisValue; // If our value changed raise it. if (interactionMapping.Changed) { // Raise input system event if it's enabled CoreServices.InputSystem?.RaiseFloatInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionMapping.FloatData); } } } }
public float GetAxisRaw(string name) => UnityInput.GetAxisRaw(name);
/// <summary> /// returns a specified axis /// </summary> /// <param name="axis">One of the analogue sticks, or the dpad</param> /// <param name="rawID">The controller number</param> /// <param name="raw">if raw is false then the controlIndex will be returned with a deadspot</param> /// <returns></returns> public static Vector2 GetAxis(Axis axis, GPRawID rawID, bool raw = false) { IList <AxisName> axisNameList = new List <AxisName>(); string xName = "", yName = ""; switch (axis) { case Axis.Dpad: xName = "DPad_XAxis_" + (int)rawID; yName = "DPad_YAxis_" + (int)rawID; axisNameList.Add(new AxisName(xName, yName)); break; case Axis.LeftStick: xName = "L_XAxis_" + (int)rawID; yName = "L_YAxis_" + (int)rawID; axisNameList.Add(new AxisName(xName, yName)); break; case Axis.RightStick: xName = "R_XAxis_" + (int)rawID; yName = "R_YAxis_" + (int)rawID; axisNameList.Add(new AxisName(xName, yName)); break; case Axis.Any: xName = "DPad_XAxis_" + (int)rawID; yName = "DPad_YAxis_" + (int)rawID; axisNameList.Add(new AxisName(xName, yName)); xName = "L_XAxis_" + (int)rawID; yName = "L_YAxis_" + (int)rawID; axisNameList.Add(new AxisName(xName, yName)); xName = "R_XAxis_" + (int)rawID; yName = "R_YAxis_" + (int)rawID; axisNameList.Add(new AxisName(xName, yName)); break; } Vector2 axisXY = Vector3.zero; try { foreach (AxisName elem in axisNameList) { float x, y; if (raw == false) { x = UInput.GetAxis(elem.xName); y = UInput.GetAxis(elem.yName); } else { x = UInput.GetAxisRaw(elem.xName); y = UInput.GetAxisRaw(elem.yName); } Vector2 vec = new Vector2(x, y); float mag = vec.magnitude; if (mag > 0f) { axisXY.x = x; axisXY.y = y; } } } catch (System.Exception e) { Debug.LogError(e); Debug.LogWarning("Have you set up all axes correctly? \nThe easiest solution is to replace the InputManager.asset with version located in the GamepadInput package. \nWarning: do so will overwrite any existing input"); } return(axisXY); }
static private CoroutineRet _waitInput(axis[] arr, Actions action) { int idx = action.idx(); bool done = false; while (!done) { /* Wait until the end of the next frame */ yield return(null); if (waitCaller.lastKey != KeyCode.None) { arr[idx] = new axis(waitCaller.lastKey); done = true; break; } else { /* Test every option in every gamepad :grimacing: */ for (int gpIdx = 1; !done && gpIdx < gamepadNum; gpIdx++) { for (int gpAxis = 0; gpAxis < gamepadAxisNum; gpAxis++) { string name = $"joystick {gpIdx} axis {gpAxis}"; int i = gpIdx * gamepadAxisNum + gpAxis; float rest = Input.axisRest[i]; float val = DefInput.GetAxisRaw(name); float diff = val - rest; /* Check that the axis is 80% of the way pressed * in the given direction */ if (val > rest && diff > 0.25f && diff / (1.0f - rest) >= 0.8f) { arr[idx] = new axis(name, axisType.positiveAxis, rest); done = true; break; } else if (val < rest && diff < -0.25f && Math.Abs(diff / (1.0f + rest)) >= 0.8f) { arr[idx] = new axis(name, axisType.negativeAxis, rest); done = true; break; } } for (int gpBt = 0; gpBt < gamepadButtonNum; gpBt++) { string name = $"joystick {gpIdx} button {gpBt}"; if (DefInput.GetButton(name)) { arr[idx] = new axis(name, axisType.none); done = true; break; } } } } } waitFunc = null; waitCaller.GetComponentInChildren <KeyLogger>().enabled = false; waitCaller = null; }
public static float GetAxisRaw(string name) { return(UnityInput.GetAxisRaw(name)); }
/* ======================================================================= * Menu getters * =======================================================================*/ static public bool MenuLeft() { return(DefInput.GetAxisRaw("joystick 0 axis 0") < -0.7f || DefInput.GetKey("left") || Input.GetHorizontalAxis() < -0.7f); }
static public bool MenuRight() { return(DefInput.GetAxisRaw("joystick 0 axis 0") > 0.7f || DefInput.GetKey("right") || Input.GetHorizontalAxis() > 0.7f); }
static public bool MenuCancel() { return(DefInput.GetAxisRaw("joystick 0 button 1") > 0.7f || DefInput.GetKey("escape")); }
static public bool MenuSelect() { return(DefInput.GetAxisRaw("joystick 0 button 0") > 0.7f || DefInput.GetKey("return")); }
static public bool MenuDown() { return(DefInput.GetAxisRaw("joystick 0 axis 1") > 0.7f || DefInput.GetKey("down") || Input.GetVerticalAxis() < -0.7f); }