4 using System.Collections.Generic;
6 using SiliconStudio.Core.Mathematics;
8 namespace SiliconStudio.
Paradox.Input
10 internal sealed
class GestureRecognizerFlick : GestureRecognizer
12 private GestureConfigFlick ConfigFlick {
get {
return (GestureConfigFlick)Config; } }
14 public GestureRecognizerFlick(GestureConfigFlick config,
float screenRatio)
15 : base(config, screenRatio)
19 protected override void ProcessDownEventPointer(
int id,
Vector2 pos)
21 FingerIdToBeginPositions[id] = pos;
22 FingerIdsToLastPos[id] = pos;
23 HasGestureStarted = (NbOfFingerOnScreen == ConfigFlick.RequiredNumberOfFingers);
26 protected override void ProcessMoveEventPointers(Dictionary<int, Vector2> fingerIdsToMovePos)
28 if (!HasGestureStarted)
31 foreach (var
id in fingerIdsToMovePos.Keys)
33 var newPos = fingerIdsToMovePos[id];
38 var compIndex = ConfigFlick.FlickShape == GestureShape.Horizontal? 1:0;
39 if (Math.Abs(newPos[compIndex] - FingerIdToBeginPositions[
id][compIndex]) > ConfigFlick.AllowedErrorMargins[compIndex])
40 HasGestureStarted =
false;
44 FingerIdsToLastPos[id] = newPos;
47 if (HasGestureStarted)
50 var startPos = ComputeMeanPosition(FingerIdToBeginPositions.Values);
51 var currPos = ComputeMeanPosition(FingerIdsToLastPos.Values);
52 var translDist = (currPos - startPos).Length();
53 if (translDist > ConfigFlick.MinimumFlickLength && translDist / ElapsedSinceBeginning.TotalSeconds > ConfigFlick.MinimumAverageSpeed)
55 CurrentGestureEvents.Add(
new GestureEventFlick(ConfigFlick.RequiredNumberOfFingers, ElapsedSinceBeginning, ConfigFlick.FlickShape, NormalizeVector(startPos), NormalizeVector(currPos)));
56 HasGestureStarted =
false;
61 protected override void ProcessUpEventPointer(
int id,
Vector2 pos)
63 FingerIdToBeginPositions.Remove(id);
64 FingerIdsToLastPos.Remove(id);
65 HasGestureStarted = (NbOfFingerOnScreen == ConfigFlick.RequiredNumberOfFingers);
Represents a two dimensional mathematical vector.