// Add a finger based on index, or return the existing one private void AddFinger(int index, Vector2 screenPosition, float pressure) { var finger = FindFinger(index); // No finger found? if (finger == null) { var inactiveIndex = FindInactiveFingerIndex(index); // Use inactive finger? if (inactiveIndex >= 0) { finger = InactiveFingers[inactiveIndex]; InactiveFingers.RemoveAt(inactiveIndex); // Inactive for too long? if (finger.Age > TapThreshold) { finger.TapCount = 0; } // Reset values finger.Age = 0.0f; finger.Set = false; finger.LastSet = false; finger.Tap = false; finger.Swipe = false; } // Create new finger? else { finger = new LeanFinger(); finger.Index = index; } finger.StartScreenPosition = screenPosition; finger.LastScreenPosition = screenPosition; finger.LastPressure = pressure; finger.StartedOverGui = PointOverGui(screenPosition); Fingers.Add(finger); } finger.Set = true; finger.ScreenPosition = screenPosition; finger.Pressure = pressure; // Record? if (RecordFingers == true) { // Too many snapshots? if (RecordLimit > 0.0f) { if (finger.SnapshotDuration > RecordLimit) { var removeCount = LeanSnapshot.GetLowerIndex(finger.Snapshots, finger.Age - RecordLimit); finger.ClearSnapshots(removeCount); } } // Record snapshot? if (RecordThreshold > 0.0f) { if (finger.Snapshots.Count == 0 || finger.LastSnapshotScreenDelta.magnitude >= RecordThreshold) { finger.RecordSnapshot(); } } else { finger.RecordSnapshot(); } } }
// Add a finger based on index, or return the existing one private LeanFinger AddFinger(int index, Vector2 screenPosition, float pressure, bool set) { var finger = FindFinger(index); // No finger found? if (finger == null) { // If a finger goes up but hasn't been registered yet then it will mess up the event flow, so skip it (this shouldn't normally occur). if (set == false) { return(null); } var inactiveIndex = FindInactiveFingerIndex(index); // Use inactive finger? if (inactiveIndex >= 0) { finger = InactiveFingers[inactiveIndex]; InactiveFingers.RemoveAt(inactiveIndex); // Inactive for too long? if (finger.Age > TapThreshold) { finger.TapCount = 0; } // Reset values finger.Age = 0.0f; finger.Old = false; finger.Set = false; finger.LastSet = false; finger.Tap = false; finger.Swipe = false; finger.Expired = false; } else { #if LEAN_ALLOW_RECLAIM // Before we create a new finger, try reclaiming one in case the finger ID was given incorrectly finger = ReclaimFinger(index, screenPosition); #endif // Create new finger? if (finger == null) { finger = new LeanFinger(); finger.Index = index; } } finger.StartScreenPosition = screenPosition; finger.LastScreenPosition = screenPosition; finger.LastPressure = pressure; finger.StartedOverGui = PointOverGui(screenPosition); Fingers.Add(finger); } finger.Set = set; finger.ScreenPosition = screenPosition; finger.Pressure = pressure; // Record? if (RecordFingers == true) { // Too many snapshots? if (RecordLimit > 0.0f) { if (finger.SnapshotDuration > RecordLimit) { var removeCount = LeanSnapshot.GetLowerIndex(finger.Snapshots, finger.Age - RecordLimit); finger.ClearSnapshots(removeCount); } } // Record snapshot? if (RecordThreshold > 0.0f) { if (finger.Snapshots.Count == 0 || finger.LastSnapshotScreenDelta.magnitude >= RecordThreshold) { finger.RecordSnapshot(); } } else { finger.RecordSnapshot(); } } return(finger); }