88 lines
2.4 KiB
C#
88 lines
2.4 KiB
C#
|
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 );
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|