/// <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); } } }
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); }
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); } } }
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); }
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); }
protected virtual void OnDisable() { LeanTouch.OnFingerDown -= HandleFingerDown; LeanTouch.OnFingerUp -= HandleFingerUp; LeanFingerData.RemoveAll(fingerDatas); }
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); }
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; } } } }
/// <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 } }
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; } }
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); } }
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; } } } }
private void HandleFingerUpdate(LeanFinger finger) { var fingerData = LeanFingerData.Find(fingerDatas, finger); if (fingerData != null) { if (Select != null) { Select.SelectScreenPosition(finger); } } }
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); }
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; } }
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); }
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; } } }
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); } } }
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); } }
/// <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); } } }
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); }
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; }
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(); } } }