/*
* @author Valentin Simonov / http://va.lent.in/
*/
using System.Collections.Generic;
using TouchScript.Utils;
using TouchScript.Pointers;
using UnityEngine;
namespace TouchScript.Gestures.TransformGestures.Clustered
{
///
/// ScreenTransformGesture which splits all pointers into 2 clusters and works with them.
/// Should be used for large touch surfaces.
///
[AddComponentMenu("TouchScript/Gestures/Clustered/Screen Transform Gesture (Clustered)")]
[HelpURL("http://touchscript.github.io/docs/html/T_TouchScript_Gestures_TransformGestures_Clustered_ClusteredScreenTransformGesture.htm")]
public class ClusteredScreenTransformGesture : ScreenTransformGesture
{
#region Private variables
private Clusters.Clusters2D clusters = new Clusters.Clusters2D();
#endregion
#region Gesture callbacks
///
protected override void pointersPressed(IList pointers)
{
clusters.AddPoints(pointers);
base.pointersPressed(pointers);
}
///
protected override void pointersUpdated(IList pointers)
{
clusters.Invalidate();
base.pointersUpdated(pointers);
}
///
protected override void pointersReleased(IList pointers)
{
clusters.RemovePoints(pointers);
base.pointersReleased(pointers);
}
///
protected override void reset()
{
base.reset();
clusters.RemoveAllPoints();
}
#endregion
#region Protected methods
///
protected override int getNumPoints()
{
if (clusters.HasClusters) return 2;
if (NumPointers > 0) return 1;
return 0;
}
///
protected override bool relevantPointers1(IList pointers)
{
return true;
}
///
protected override bool relevantPointers2(IList pointers)
{
return true;
}
///
protected override Vector2 getPointScreenPosition(int index)
{
if (!clusters.HasClusters) return ClusterUtils.Get2DCenterPosition(activePointers);
return clusters.GetCenterPosition(index);
}
///
protected override Vector2 getPointPreviousScreenPosition(int index)
{
if (!clusters.HasClusters) return ClusterUtils.GetPrevious2DCenterPosition(activePointers);
return clusters.GetPreviousCenterPosition(index);
}
#endregion
}
}