/// <summary> /// While tracking, observe if the specified button is pressed and update state accordingly /// </summary> /// <param name="buttonName">The agnostic name of the button</param> /// <param name="buttonIndex">The index of the button</param> void ButtonInputCheck(string inputName) { VRInputData updatedInputData = inputs[inputName]; switch (inputs[inputName].type) { case InputType.button: // Poll GettButtonDown only for binary buttons if (Input.GetButtonDown(inputName) && !inputs[inputName].isActive) { inputs[inputName].Began(); updatedInputData.isActive = true; StartCoroutine(UpdateStatusWhenInputBecomesInactive(inputName)); } break; case InputType.axis1D: // Poll GetAxis only for float inputs if (Input.GetAxis(inputName) > 0 && !inputs[inputName].isActive) { inputs[inputName].Began(); updatedInputData.isActive = true; StartCoroutine(UpdateStatusWhenInputBecomesInactive(inputName)); } break; case InputType.axis2D: break; } changeBuffer.Add(inputName, updatedInputData); }
/// <summary> /// The VRInputSubscriber class uses this function multiple times at runtime to connect to all its needed inputs. /// </summary> public void SubscribeToInput(string inputName, UnityAction began, UnityAction finished) { VRInputData updatedInputData = inputs[inputName]; updatedInputData.Began += began; updatedInputData.Finished += finished; inputs[inputName] = updatedInputData; }
IEnumerator UpdateStatusWhenInputBecomesInactive(string inputName) { VRInputData updatedInputData = inputs[inputName]; switch (inputs[inputName].type) { case InputType.button: yield return(new WaitUntil(() => Input.GetButtonUp(inputName))); updatedInputData.isActive = false; break; case InputType.axis1D: yield return(new WaitUntil(() => Input.GetAxis(inputName) == 0)); updatedInputData.isActive = false; break; } inputs[inputName].Finished(); inputs[inputName] = updatedInputData; }