Maze / Library /PackageCache /com.unity.inputsystem@1.6.1 /InputSystem /Controls /TouchPressControl.cs
| using System; | |
| using UnityEngine.InputSystem.Layouts; | |
| using UnityEngine.InputSystem.LowLevel; | |
| using UnityEngine.InputSystem.Utilities; | |
| namespace UnityEngine.InputSystem.Controls | |
| { | |
| /// <summary> | |
| /// A button that reads its pressed state from <see cref="TouchControl.phase"/>. | |
| /// </summary> | |
| /// <remarks> | |
| /// This control is used by <see cref="TouchControl"/> to link <see cref="TouchControl.press"/> | |
| /// to <see cref="TouchControl.phase"/>. It will return 1 as long as the value of | |
| /// phase is <see cref="TouchPhase.Began"/>, <see cref="TouchPhase.Stationary"/>, or | |
| /// <see cref="TouchPhase.Moved"/>, i.e. as long as the touch is in progress. For | |
| /// all other phases, it will return 0. | |
| /// </remarks> | |
| /// <seealso cref="TouchControl"/> | |
| [] | |
| public class TouchPressControl : ButtonControl | |
| { | |
| /// <inheritdoc /> | |
| protected override void FinishSetup() | |
| { | |
| base.FinishSetup(); | |
| if (!stateBlock.format.IsIntegerFormat()) | |
| throw new NotSupportedException( | |
| $"Non-integer format '{stateBlock.format}' is not supported for TouchButtonControl '{this}'"); | |
| } | |
| /// <inheritdoc /> | |
| public override unsafe float ReadUnprocessedValueFromState(void* statePtr) | |
| { | |
| var valuePtr = (byte*)statePtr + (int)m_StateBlock.byteOffset; | |
| var uintValue = MemoryHelpers.ReadMultipleBitsAsUInt(valuePtr, m_StateBlock.bitOffset, m_StateBlock.sizeInBits); | |
| var phaseValue = (TouchPhase)uintValue; | |
| var value = 0.0f; | |
| if (phaseValue == TouchPhase.Began || phaseValue == TouchPhase.Stationary || | |
| phaseValue == TouchPhase.Moved) | |
| value = 1; | |
| return Preprocess(value); | |
| } | |
| public override unsafe void WriteValueIntoState(float value, void* statePtr) | |
| { | |
| throw new NotSupportedException(); | |
| } | |
| } | |
| } | |