Files
Main/Assets/Launcher/ExternalLibs/FingerGestures/Components/LongPressingGestureRecognizer.cs

88 lines
2.4 KiB
C#
Raw Permalink Normal View History

2025-01-25 04:38:09 +08:00
using UnityEngine;
using System.Collections;
/// <summary>
/// Long-Press gesture: detects when the finger is held down without moving, for a specific duration
/// </summary>
[AddComponentMenu( "FingerGestures/Gesture Recognizers/Long Pressing" )]
public class LongPressingGestureRecognizer : AveragedGestureRecognizer
{
/// <summary>
/// Event fired when the the gesture is recognized
/// </summary>
public event EventDelegate<LongPressingGestureRecognizer> OnLongPressing;
/// <summary>
/// How long the finger must stay down without moving in order to validate the gesture
/// </summary>
public float Duration = 0.3f;
/// <summary>
/// How far the finger is allowed to move from its <see cref="AveragedGestureRecognizer.StartPosition">initial position</see> without making the gesture fail
/// </summary>
public float MoveTolerance = 5.0f;
Vector2 delta = Vector2.zero;
Vector2 lastPos = Vector2.zero;
/// <summary>
/// Amount of motion performed since the last update
/// </summary>
public Vector2 MoveDelta
{
get { return delta; }
private set { delta = value; }
}
//protected override bool CanBegin( FingerGestures.IFingerList touches )
//{
// if(!base.CanBegin( touches ))
// return false;
// if(touches.GetAverageDistanceFromStart() < MoveTolerance)
// return false;
// return true;
//}
protected override void OnBegin( FingerGestures.IFingerList touches )
{
Duration = 0.3f;
Position = touches.GetAveragePosition();
StartPosition = Position;
MoveDelta = Vector2.zero;
lastPos = Position;
}
protected override GestureState OnActive( FingerGestures.IFingerList touches )
{
if(touches.Count != RequiredFingerCount)
{
return GestureState.Failed;
}
Position = touches.GetAveragePosition();
MoveDelta = Position - lastPos;
if(ElapsedTime >= Duration)
{
if(MoveDelta.sqrMagnitude > 0)
{
lastPos = Position;
}
RaiseOnLongPressing();
}
return GestureState.InProgress;
}
protected void RaiseOnLongPressing()
{
if(OnLongPressing != null)
{
OnLongPressing( this );
}
}
}