コード例 #1
0
    /**
     * 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);
    }
コード例 #2
0
 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);
         }
     }
 }
コード例 #3
0
ファイル: Keyboard.cs プロジェクト: gendalf90/WhenGunsSpeak
        private void InitializeCurrentRightAndLeftState()
        {
            var rightPressed = UnityInput.GetAxisRaw("Horizontal") > 0;
            var leftPressed  = UnityInput.GetAxisRaw("Horizontal") < 0;

            currentRightState = rightPressed && !leftPressed;
            currentLeftState  = leftPressed && !rightPressed;
        }
コード例 #4
0
ファイル: Input.cs プロジェクト: popcron/input
    public static new float GetAxisRaw(string axisName)
    {
        if (!Enabled)
        {
            return(0f);
        }

        return(UnityInput.GetAxisRaw(axisName));
    }
コード例 #5
0
 public float GetAxisRaw()
 {
     if (this.isKey)
     {
         return(this.key2axis());
     }
     else
     {
         return(this.axisVal2axis(DefInput.GetAxisRaw(this.input)));
     }
 }
コード例 #6
0
 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));
     }
 }
コード例 #7
0
        /// <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);
                    }
                }
            }
        }
コード例 #9
0
        /// <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
        }
コード例 #10
0
        /// <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
        }
コード例 #11
0
        /// <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);
                    }
                }
            }
        }
コード例 #13
0
 public float GetAxisRaw(string name) => UnityInput.GetAxisRaw(name);
コード例 #14
0
ファイル: GamePadImpl.cs プロジェクト: direct1889/dUtility
        /// <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);
        }
コード例 #15
0
    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;
    }
コード例 #16
0
 public static float GetAxisRaw(string name)
 {
     return(UnityInput.GetAxisRaw(name));
 }
コード例 #17
0
    /* =======================================================================
     *   Menu getters
     * =======================================================================*/

    static public bool MenuLeft()
    {
        return(DefInput.GetAxisRaw("joystick 0 axis 0") < -0.7f ||
               DefInput.GetKey("left") ||
               Input.GetHorizontalAxis() < -0.7f);
    }
コード例 #18
0
 static public bool MenuRight()
 {
     return(DefInput.GetAxisRaw("joystick 0 axis 0") > 0.7f ||
            DefInput.GetKey("right") ||
            Input.GetHorizontalAxis() > 0.7f);
 }
コード例 #19
0
 static public bool MenuCancel()
 {
     return(DefInput.GetAxisRaw("joystick 0 button 1") > 0.7f ||
            DefInput.GetKey("escape"));
 }
コード例 #20
0
 static public bool MenuSelect()
 {
     return(DefInput.GetAxisRaw("joystick 0 button 0") > 0.7f ||
            DefInput.GetKey("return"));
 }
コード例 #21
0
 static public bool MenuDown()
 {
     return(DefInput.GetAxisRaw("joystick 0 axis 1") > 0.7f ||
            DefInput.GetKey("down") ||
            Input.GetVerticalAxis() < -0.7f);
 }