/// <summary>This will spawn Prefab at the specified finger based on the ScreenDepth setting.</summary>
        public void Spawn(LeanFinger finger)
        {
            if (Prefab != null && finger != null)
            {
                // Spawn and position
                var clone = Instantiate(Prefab);

                UpdateSpawnedTransform(finger, clone);

                clone.gameObject.SetActive(true);

                if (DragAfterSpawn == true)
                {
                    var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

                    fingerData.Clone = clone;
                }

                // Select?
                var selectable = clone.GetComponent <LeanSelectable>();

                if (selectable != null)
                {
                    selectable.Select(finger);
                }
            }
        }
Esempio n. 2
0
        private void HandleFingerUp(LeanFinger finger)
        {
            var fingerData = LeanFingerData.Find(fingerDatas, finger);

            if (fingerData != null && Shape != null && Shape.Points != null)
            {
                //Debug.Log("count " + fingerData.Points.Count);
                var minimum = Shape.ConnectEnds == true ? Shape.Points.Count + 1 : Shape.Points.Count;

                if (MinimumPoints > 0 && MinimumPoints < minimum)
                {
                    minimum = MinimumPoints;
                }

                if (fingerData.Points.Count >= minimum)
                {
                    if (OnDetected != null)
                    {
                        OnDetected.Invoke(fingerData);
                    }
                }
            }

            LeanFingerData.Remove(fingerDatas, finger, fingerDataPool);
        }
Esempio n. 3
0
        private void HandleFingerDown(LeanFinger finger)
        {
            if (Select != null)
            {
                if (RequireNoSelectables == true && LeanSelectable.IsSelectedCount > 0)
                {
                    return;
                }

                if (DeselectAllAtStart == true)
                {
                    LeanSelectable.DeselectAll();
                }

                if (RequireInitialSelection == true)
                {
                    waitingForSelection = true;

                    Select.SelectScreenPosition(finger);

                    waitingForSelection = false;
                }
                else
                {
                    LeanFingerData.FindOrCreate(ref fingerDatas, finger);

                    Select.SelectScreenPosition(finger);
                }
            }
        }
Esempio n. 4
0
        private void HandleFingerUp(LeanFinger finger)
        {
            // Find link for this finger, and clear it
            var fingerData = LeanFingerData.Find(fingerDatas, finger);

            if (fingerData != null)
            {
                fingerDatas.Remove(fingerData);

                if (fingerData.LastSet == true)
                {
                    if (onFingerUp != null)
                    {
                        onFingerUp.Invoke(finger);
                    }

                    if (onWorldUp != null)
                    {
                        var position = ScreenDepth.Convert(finger.ScreenPosition, gameObject);

                        onWorldUp.Invoke(position);
                    }
                }
            }
        }
        private void HandleFingerDown(LeanFinger finger)
        {
            // Limit to one selection box
            if (fingerDatas.Count > 0)
            {
                return;
            }

            // Only use fingers clear of the GUI
            if (IgnoreIfStartedOverGui == true && finger.StartedOverGui == true)
            {
                return;
            }

            // Make new link
            var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

            // Assign this finger to this link
            fingerData.Finger = finger;

            // Create LineRenderer instance for this link
            fingerData.Box = Instantiate(Prefab);

            fingerData.Box.gameObject.SetActive(true);

            // Move box to root
            fingerData.Box.transform.SetParent(Root, false);
        }
Esempio n. 6
0
        private void FingerDown(LeanFinger finger)
        {
            // Ignore?
            if (MaxLines > 0 && fingerDatas.Count >= MaxLines)
            {
                return;
            }

            if (IgnoreStartedOverGui == true && finger.StartedOverGui == true)
            {
                return;
            }

            if (IgnoreIsOverGui == true && finger.IsOverGui == true)
            {
                return;
            }

            // Make new link
            var leanFingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

            // Create LineRenderer instance for this link
            leanFingerData.Line = Instantiate(LinePrefab);

            // Add new link to list
            fingerDatas.Add(leanFingerData);
        }
Esempio n. 7
0
        protected virtual void OnDisable()
        {
            LeanTouch.OnFingerDown -= HandleFingerDown;
            LeanTouch.OnFingerUp   -= HandleFingerUp;

            LeanFingerData.RemoveAll(fingerDatas);
        }
Esempio n. 8
0
        private void FingerSet(LeanFinger finger)
        {
            // ignore?
            if (MaxLines > 0 && fingerDatas.Count >= MaxLines)
            {
                return;
            }

            if (IgnoreStartedOverGui == true && finger.StartedOverGui == true)
            {
                return;
            }

            if (IgnoreIsOverGui == true && finger.IsOverGui == true)
            {
                return;
            }

            if (RequiredSelectable != null && RequiredSelectable.IsSelectedBy(finger) == false)
            {
                return;
            }

            // Get data for this finger
            var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

            // Create line?
            if (fingerData.Line == null)
            {
                fingerData.Line = Instantiate(LinePrefab);
            }

            // Write line data
            WritePositions(fingerData.Line, fingerData.Finger);
        }
Esempio n. 9
0
        protected virtual void Update()
        {
            if (fingerDatas != null)
            {
                for (var i = fingerDatas.Count - 1; i >= 0; i--)
                {
                    var fingerData = fingerDatas[i];
                    var finger     = fingerData.Finger;
                    var screenFrom = finger.GetSnapshotScreenPosition(finger.Age - LeanTouch.CurrentTapThreshold);
                    var screenTo   = finger.ScreenPosition;

                    if (Vector2.Distance(screenFrom, screenTo) > LeanTouch.CurrentSwipeThreshold / LeanTouch.ScalingFactor)
                    {
                        if (fingerData.Flicked == false && TestFinger(finger, screenFrom, screenTo) == true)
                        {
                            fingerData.Flicked = true;

                            HandleFingerSwipe(finger, screenFrom, screenTo);

                            // If multi-flicks aren't allowed, remove the finger
                            if (Check != CheckType.Multiple)
                            {
                                LeanFingerData.Remove(fingerDatas, finger);
                            }
                        }
                    }
                    else
                    {
                        fingerData.Flicked = false;
                    }
                }
            }
        }
Esempio n. 10
0
        /// <summary>If you've set Use to ManuallyAddedFingers, then you can call this method to manually add a finger.</summary>
        public void AddFinger(LeanFinger finger)
        {
            var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

            fingerData.Points.Clear();

            fingerData.Points.Add(finger.ScreenPosition);
        }
        protected virtual void HandleFingerUp(LeanFinger finger)
        {
            var link = LeanFingerData.Find(fingerDatas, finger);

            if (link != null)
            {
                link.Finger = null; // The line will gradually fade out in Update
            }
        }
Esempio n. 12
0
        private void HandleFingerUpdate(LeanFinger finger)
        {
            var fingerData = LeanFingerData.Find(fingerDatas, finger);

            if (fingerData != null && Vector2.Distance(finger.ScreenPosition, fingerData.EndPoint) > StepThreshold)
            {
                fingerData.Points.Add(finger.ScreenPosition);
            }
        }
        protected virtual void Update()
        {
            // Get the fingers we want to use
            var fingers = Use.GetFingers(true);

            for (var i = 0; i < fingers.Count; i++)
            {
                var finger = fingers[i];

                if (LeanFingerData.Exists(fingerDatas, finger) == false)
                {
                    // Too many active links?
                    if (MaxTrails >= 0 && LeanFingerData.Count(fingerDatas) >= MaxTrails)
                    {
                        continue;
                    }

                    if (Prefab != null)
                    {
                        // Spawn and activate
                        var clone = Instantiate(Prefab);

                        clone.gameObject.SetActive(true);

                        // Register with FingerData
                        var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

                        fingerData.Line  = clone;
                        fingerData.Age   = 0.0f;
                        fingerData.Width = Prefab.widthMultiplier;
                    }
                }
            }

            // Update all FingerData
            for (var i = fingerDatas.Count - 1; i >= 0; i--)
            {
                var fingerData = fingerDatas[i];

                if (fingerData.Line != null)
                {
                    UpdateLine(fingerData, fingerData.Finger, fingerData.Line);

                    if (fingerData.Age >= FadeTime)
                    {
                        Destroy(fingerData.Line.gameObject);

                        fingerDatas.RemoveAt(i);
                    }
                }
                else
                {
                    fingerDatas.RemoveAt(i);
                }
            }
        }
        private void FingerUp(LeanFinger finger)
        {
            // Get link and reset cooldown
            var link = LeanFingerData.Find(ref fingerDatas, finger);

            if (link != null)
            {
                link.Cooldown = false;
            }
        }
Esempio n. 15
0
        private void FingerSet(LeanFinger finger)
        {
            // Try and find the link for this finger
            var leanFingerData = LeanFingerData.Find(ref fingerDatas, finger);

            // Link exists?
            if (leanFingerData != null && leanFingerData.Line != null)
            {
                WritePositions(leanFingerData.Line, leanFingerData.Finger);
            }
        }
        private void HandleFingerSet(LeanFinger finger)
        {
            // Try and find the link for this finger
            var fingerData = LeanFingerData.Find(fingerDatas, finger);

            // Link exists?
            if (fingerData != null && fingerData.Box != null)
            {
                WriteTransform(fingerData.Box, fingerData.Finger);
            }
        }
Esempio n. 17
0
        private void HandleFingerUp(LeanFinger finger)
        {
            var fingerData = LeanFingerData.Find(fingerDatas, finger);
            var points     = fingerData.Points;

            LeanFingerData.Remove(fingerDatas, finger, fingerDataPool);

            if (Shape != null)
            {
                ranges.Clear();

                var min = Shape.Points.Count;
                var max = Shape.Points.Count;

                if (MinimumPoints > 0)
                {
                    min = MinimumPoints;
                }

                for (var i = max; i >= min; i--)
                {
                    if (Shape.ConnectEnds == true)
                    {
                        for (var j = 0; j < Shape.Points.Count; j++)
                        {
                            AddRange(j, j + i - 1);
                        }
                    }
                    else
                    {
                        var steps = Shape.Points.Count - i;

                        for (var j = 0; j <= steps; j++)
                        {
                            AddRange(j, j + i - 2);
                        }
                    }
                }

                foreach (var range in ranges)
                {
                    if (CalculateMatch(points, Shape.Points, DistanceThreshold, ErrorThreshold, range.x, range.y) == true)
                    {
                        if (onDetected != null)
                        {
                            onDetected.Invoke(finger);
                        }

                        return;
                    }
                }
            }
        }
Esempio n. 18
0
        private void HandleFingerUpdate(LeanFinger finger)
        {
            var fingerData = LeanFingerData.Find(fingerDatas, finger);

            if (fingerData != null)
            {
                if (Select != null)
                {
                    Select.SelectScreenPosition(finger);
                }
            }
        }
Esempio n. 19
0
		private void HandleFingerDown(LeanFinger finger)
		{
			if (IgnoreStartedOverGui == true && finger.StartedOverGui == true)
			{
				return;
			}

			// Get link for this finger and reset
			var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

			fingerData.Movement = Vector2.zero;

			fingers.Add(finger);
		}
Esempio n. 20
0
        private void FingerUp(LeanFinger finger)
        {
            // If link with this finger exists, null finger and assign life, so it can be destroyed later
            var fingerData = LeanFingerData.Find(ref fingerDatas, finger);

            if (fingerData != null)
            {
                // Call up method
                LinkFingerUp(fingerData);

                fingerData.Finger = null;
                fingerData.Life   = FadeTime;
            }
        }
Esempio n. 21
0
        private void AddFinger(LeanFinger finger, int index, bool reverse)
        {
            var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, null);             // We want to be able to store multiple links per finger, so pass null initially

            fingerData.Finger  = finger;
            fingerData.Index   = index;
            fingerData.Reverse = reverse;

            fingerData.Buffer.Clear();
            fingerData.Points.Clear();

            fingerData.Buffer.Add(finger.ScreenPosition);
            fingerData.Points.Add(finger.ScreenPosition);
            fingerData.Points.Add(finger.ScreenPosition);
        }
Esempio n. 22
0
        private void FingerUp(LeanFinger finger)
        {
            // Find link for this finger, and clear it
            var fingerData = LeanFingerData.Find(ref fingerDatas, finger);

            if (fingerData != null)
            {
                fingerDatas.Remove(fingerData);

                LinkFingerUp(fingerData);

                if (fingerData.Line != null)
                {
                    Destroy(fingerData.Line.gameObject);
                }
            }
        }
        private void FingerSet(LeanFinger finger)
        {
            // Ignore this finger?
            if (IgnoreStartedOverGui == true && finger.StartedOverGui == true)
            {
                return;
            }

            if (IgnoreIsOverGui == true && finger.IsOverGui == true)
            {
                return;
            }

            if (RequiredSelectable != null && RequiredSelectable.IsSelectedBy(finger) == false)
            {
                return;
            }

            // Get link and skip if on cooldown
            var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

            if (fingerData.Cooldown == true)
            {
                return;
            }

            // The scaled delta position magnitude required to register a swipe
            var swipeThreshold = LeanTouch.Instance.SwipeThreshold;

            // The amount of seconds we consider valid for a swipe
            var tapThreshold = LeanTouch.CurrentTapThreshold;

            // Get the scaled delta position between now, and 'swipeThreshold' seconds ago
            var recentDelta = finger.GetSnapshotScreenDelta(tapThreshold);

            // Has the finger recently swiped?
            if (recentDelta.magnitude > swipeThreshold)
            {
                if (CheckSwipe(finger, recentDelta) == true)
                {
                    // Begin cooldown
                    fingerData.CooldownTime = MultipleSwipeDelay;
                    fingerData.Cooldown     = true;
                }
            }
        }
Esempio n. 24
0
        private void HandleFingerUp(LeanFinger finger)
        {
            // Find link for this finger, and clear it
            var fingerData = LeanFingerData.Find(fingerDatas, finger);

            if (fingerData != null)
            {
                fingerDatas.Remove(fingerData);

                if (fingerData.LastSet == true)
                {
                    if (onFingerUp != null)
                    {
                        onFingerUp.Invoke(finger);
                    }
                }
            }
        }
        private void HandleFingerUp(LeanFinger finger)
        {
            // Try and find the link for this finger
            var fingerData = LeanFingerData.Find(fingerDatas, finger);

            // Link exists?
            if (fingerData != null)
            {
                // Remove link from list
                fingerDatas.Remove(fingerData);

                // Destroy box GameObject
                if (fingerData.Box != null)
                {
                    Destroy(fingerData.Box.gameObject);
                }
            }
        }
Esempio n. 26
0
        private void FingerUp(LeanFinger finger)
        {
            // Try and find the link for this finger
            var link = LeanFingerData.Find(ref fingerDatas, finger);

            // Link exists?
            if (link != null)
            {
                // Remove link from list
                fingerDatas.Remove(link);

                // Destroy line GameObject
                if (link.Line != null)
                {
                    Destroy(link.Line.gameObject);
                }

                Shoot(finger);
            }
        }
Esempio n. 27
0
        /// <summary>If you've set Use to ManuallyAddedFingers, then you can call this method to manually add a finger.</summary>
        public void AddFinger(LeanFinger finger)
        {
            if (Shape != null && Shape.Points != null && Shape.Points.Count > 1)
            {
                // Discard any existing FingerData for this finger
                LeanFingerData.Remove(fingerDatas, finger, fingerDataPool);

                if (Shape.ConnectEnds == true)
                {
                    // If the shape is connected then begin detection from every point, because we don't know where the user has begun drawing from yet.
                    for (var i = Shape.Points.Count - 1; i >= 0; i--)
                    {
                        AddFinger(finger, i);
                    }
                }
                else
                {
                    AddFinger(finger, 0);
                }
            }
        }
Esempio n. 28
0
        private void FingerSet(LeanFinger finger)
        {
            if (MaxLines > 0 && fingerDatas.Count >= MaxLines)
            {
                return;
            }

            if (RequiredSelectable != null && RequiredSelectable.IsSelected == false)
            {
                return;
            }

            // Get link for this finger and write positions
            var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

            if (fingerData.Line == null)
            {
                fingerData.Line = Instantiate(LinePrefab);
            }

            WritePositions(fingerData.Line, fingerData.Finger);
        }
Esempio n. 29
0
        private void HandleFingerDown(LeanFinger finger)
        {
            if (IgnoreStartedOverGui == true && finger.StartedOverGui == true)
            {
                return;
            }
            if (IgnoreIsOverGui == true && finger.IsOverGui == true)
            {
                return;
            }

            if (RequiredSelectable != null && RequiredSelectable.IsSelected == false)
            {
                return;
            }

            // Get link for this finger and reset
            var fingerData = LeanFingerData.FindOrCreate(ref fingerDatas, finger);

            fingerData.LastSet          = false;
            fingerData.TotalScaledDelta = Vector2.zero;
        }
Esempio n. 30
0
        private void SelectGlobal(LeanSelectable selectable, LeanFinger finger)
        {
            if (waitingForSelection == true)
            {
                LeanFingerData.FindOrCreate(ref fingerDatas, finger);
            }

            var fingerData = LeanFingerData.Find(fingerDatas, finger);

            if (fingerData != null)
            {
                // Good selection?
                if (MaximumSeparation <= 0.0f || fingerData.LastSelectable == null || Vector3.Distance(fingerData.LastSelectable.transform.position, selectable.transform.position) <= MaximumSeparation)
                {
                    fingerData.LastSelectable = selectable;
                }
                // Too far to select?
                else
                {
                    selectable.Deselect();
                }
            }
        }