4 using System.Collections.Generic;
6 using SiliconStudio.Core.Mathematics;
8 namespace SiliconStudio.
Paradox.Input
10 internal sealed
class GestureRecognizerDrag : GestureRecognizerContMotion
12 private GestureConfigDrag ConfigDrag {
get {
return (GestureConfigDrag)Config; } }
14 private Dictionary<int, Vector2> fingerIdsToLowFilteredPos =
new Dictionary<int, Vector2>();
22 public GestureRecognizerDrag(GestureConfigDrag config,
float screenRatio)
23 : base(config, screenRatio)
27 protected override void InitializeGestureVariables()
29 startPosition = ComputeMeanPosition(FingerIdsToLastPos.Values);
30 lastPosition = startPosition;
31 fingerIdsToLowFilteredPos =
new Dictionary<int, Vector2>(FingerIdsToLastPos);
34 protected override void UpdateGestureVarsAndPerfomChecks()
36 foreach (var
id in FingerIdsToLastPos.Keys)
41 var compIndex = ConfigDrag.DragShape == GestureShape.Horizontal ? 1 : 0;
42 if (Math.Abs(FingerIdsToLastPos[
id][compIndex] - fingerIdsToLowFilteredPos[
id][compIndex]) > ConfigDrag.AllowedErrorMargins[compIndex])
43 HasGestureStarted =
false;
47 const float lowFilterCoef = 0.9f;
48 fingerIdsToLowFilteredPos[id] = fingerIdsToLowFilteredPos[id] * lowFilterCoef + (1f - lowFilterCoef) * FingerIdsToLastPos[
id];
51 currPosition = ComputeMeanPosition(FingerIdsToLastPos.Values);
54 protected override bool GestureBeginningConditionFulfilled()
56 return (currPosition - startPosition).Length() >= ConfigDrag.MinimumDragDistance;
59 protected override void AddGestureEventToCurrentList(
GestureState state)
61 var deltaTrans = currPosition - lastPosition;
62 CurrentGestureEvents.Add(
new GestureEventDrag(state, ConfigDrag.RequiredNumberOfFingers, ElapsedSinceLast, ElapsedSinceBeginning, ConfigDrag.DragShape,
63 NormalizeVector(startPosition), NormalizeVector(currPosition), NormalizeVector(deltaTrans)));
65 lastPosition = currPosition;
67 base.AddGestureEventToCurrentList(state);
Represents a two dimensional mathematical vector.