Пример #1
0
        void BuildAxisArray()
        {
            int padCount = Input.GetJoystickNames().Length;

            allGamepadAxis = new gamepadState[padCount];
            for (int i = 0; i < padCount; i++)
            {
                allGamepadAxis[i].axisValues = new float[Sinput.MAXAXISPERGAMEPAD];

                allGamepadAxis[i].zeroTime         = new float[Sinput.MAXAXISPERGAMEPAD];
                allGamepadAxis[i].plusOneTime      = new float[Sinput.MAXAXISPERGAMEPAD];
                allGamepadAxis[i].minusOneTime     = new float[Sinput.MAXAXISPERGAMEPAD];
                allGamepadAxis[i].minRecordedValue = new float[Sinput.MAXAXISPERGAMEPAD];
                allGamepadAxis[i].maxRecordedValue = new float[Sinput.MAXAXISPERGAMEPAD];

                allGamepadAxis[i].measuredFirstChange = new bool[Sinput.MAXAXISPERGAMEPAD];


                for (int a = 0; a < allGamepadAxis[i].axisValues.Length; a++)
                {
                    allGamepadAxis[i].measuredFirstChange[a] = false;

                    allGamepadAxis[i].axisValues[a] = Input.GetAxisRaw(SInputEnums.GetAxisString(i, a));

                    allGamepadAxis[i].zeroTime[a]         = 0f;
                    allGamepadAxis[i].plusOneTime[a]      = 0f;
                    allGamepadAxis[i].minusOneTime[a]     = 0f;
                    allGamepadAxis[i].minRecordedValue[a] = allGamepadAxis[i].axisValues[a];
                    allGamepadAxis[i].maxRecordedValue[a] = allGamepadAxis[i].axisValues[a];
                }

                allGamepadAxis[i].buttonValues = new bool[Sinput.MAXBUTTONSPERGAMEPAD];
                for (int b = 0; b < allGamepadAxis[i].buttonValues.Length; b++)
                {
                    KeyCode buttonCode = (KeyCode)Enum.Parse(typeof(KeyCode), string.Format("Joystick{0}Button{1}", (i + 1), b));
                    allGamepadAxis[i].buttonValues[b] = Input.GetKeyDown(buttonCode);
                }
            }
        }
Пример #2
0
        void UpdateAxisMonitoring()
        {
            if (null == allGamepadAxis)
            {
                BuildAxisArray();
            }
            int padCount = Input.GetJoystickNames().Length;

            if (padCount != allGamepadAxis.Length)
            {
                BuildAxisArray();
            }

            for (int i = 0; i < padCount; i++)
            {
                for (int a = 0; a < allGamepadAxis[i].axisValues.Length; a++)
                {
                    float presentValue = Input.GetAxisRaw(SInputEnums.GetAxisString(i, a));
                    if (AcceptChangesFromSlot(i + 1) && allGamepadAxis[i].measuredFirstChange[a] && allGamepadAxis[i].axisValues[a] != presentValue)
                    {
                        float restingValue = 0f;
                        if (allGamepadAxis[i].zeroTime[a] >= allGamepadAxis[i].minusOneTime[a] && allGamepadAxis[i].zeroTime[a] >= allGamepadAxis[i].plusOneTime[a])
                        {
                            restingValue = 0f;
                        }
                        else if (allGamepadAxis[i].minusOneTime[a] > allGamepadAxis[i].plusOneTime[a])
                        {
                            restingValue = -1f;
                        }
                        else
                        {
                            restingValue = 1f;
                        }
                        if (presentValue > restingValue + 0.3f || presentValue < restingValue - 0.3f)
                        {
                            //axis value has changed enough to register as an actual change and for us to have recorded enough properties to get a picture of how it works
                            changeFound               = true;
                            changedPadAxis.padIndex   = i;
                            changedPadAxis.inputIndex = a + 1;

                            changedPadAxis.axisMotionIsPositive = presentValue > allGamepadAxis[i].axisValues[a];
                            changedPadAxis.restingValue         = restingValue;
                            changedPadAxis.minRecordedValue     = allGamepadAxis[i].minRecordedValue[a];
                            changedPadAxis.maxRecordedValue     = allGamepadAxis[i].maxRecordedValue[a];
                        }
                    }

                    if (allGamepadAxis[i].measuredFirstChange[a])
                    {
                        if (presentValue > 0.4f)
                        {
                            allGamepadAxis[i].plusOneTime[a] += Time.deltaTime;
                        }
                        else if (presentValue < -0.4f)
                        {
                            allGamepadAxis[i].minusOneTime[a] += Time.deltaTime;
                        }
                        else
                        {
                            allGamepadAxis[i].zeroTime[a] += Time.deltaTime;
                        }
                    }

                    allGamepadAxis[i].minRecordedValue[a] = Mathf.Min(allGamepadAxis[i].minRecordedValue[a], presentValue);
                    allGamepadAxis[i].maxRecordedValue[a] = Mathf.Max(allGamepadAxis[i].maxRecordedValue[a], presentValue);

                    if (allGamepadAxis[i].axisValues[a] != presentValue)
                    {
                        allGamepadAxis[i].measuredFirstChange[a] = true;
                    }

                    allGamepadAxis[i].axisValues[a] = presentValue;
                }
                for (int b = 0; b < allGamepadAxis[i].buttonValues.Length; b++)
                {
                    KeyCode buttonCode   = (KeyCode)Enum.Parse(typeof(KeyCode), string.Format("Joystick{0}Button{1}", (i + 1), b));
                    bool    presentValue = Input.GetKeyDown(buttonCode);
                    if (AcceptChangesFromSlot(i + 1) && allGamepadAxis[i].buttonValues[b] != presentValue)
                    {
                        changeFound = true;
                        changedPadButton.padIndex   = i;
                        changedPadButton.inputIndex = b;
                    }
                    allGamepadAxis[i].buttonValues[b] = presentValue;
                }
            }
        }