using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using bbiwarg.Images; namespace bbiwarg.Detectors.Fingers { class FingerTracker { private FingerImage fingerImage; private List[] detectedFingers; private List trackedFingers; private int framesUntilTracked; public FingerTracker() { framesUntilTracked = 5; detectedFingers = new List[framesUntilTracked]; for (int i = 0; i < framesUntilTracked; i++) { detectedFingers[i] = new List(); } } public List getFingers() { return trackedFingers; } public void setDetectedTouchEventsThisFrame(List detectedFingersThisFrame, FingerImage fingerImage) { this.fingerImage = fingerImage; for (int i = (framesUntilTracked - 1); i > 0; i--) { detectedFingers[i] = detectedFingers[i - 1]; } detectedFingers[0] = detectedFingersThisFrame; findTrackedFingers(); } private void findTrackedFingers() { trackedFingers = new List(); foreach (Finger finger in detectedFingers[0]) { bool tracked = true; for (int i = 1; i < framesUntilTracked; i++) { if (!hasSimilarFingerInFrame(finger, i)) tracked = false; } if (tracked) { fingerImage.drawLine(finger.getLineEndPoint1(), finger.getLineEndPoint2(), FingerImageState.fingerTracked); trackedFingers.Add(finger); } } } private bool hasSimilarFingerInFrame(Finger finger, int frame) { foreach (Finger f in detectedFingers[frame]) { if (finger.isSimilarTo(f)) return true; } return false; } } }