b486678290
Library -Artifacts
53 lines
2.0 KiB
C#
53 lines
2.0 KiB
C#
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"/>
|
|
[InputControlLayout(hideInUI = true)]
|
|
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();
|
|
}
|
|
}
|
|
}
|