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); } } }
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; } } }