1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace bbiwarg.Detectors.Touch
- {
- class TouchTracker
- {
- private List<TouchEvent>[] detectedTouchEvents;
- private List<TouchEvent> trackedTouchEvents;
- private int framesUntilTracked;
- public TouchTracker() {
- framesUntilTracked = 3;
- detectedTouchEvents = new List<TouchEvent>[framesUntilTracked];
- for (int i = 0; i < framesUntilTracked; i++) {
- detectedTouchEvents[i] = new List<TouchEvent>();
- }
- }
- public void setDetectedTouchEventsThisFrame(List<TouchEvent> touchEventsThisFrame) {
- for (int i = (framesUntilTracked-1); i > 0; i--) {
- detectedTouchEvents[i] = detectedTouchEvents[i - 1];
- }
- detectedTouchEvents[0] = touchEventsThisFrame;
- findTrackedTouches();
- }
- private void findTrackedTouches() {
- trackedTouchEvents = new List<TouchEvent>();
- foreach (TouchEvent te in detectedTouchEvents[0]) {
- bool tracked = true;
- for (int i = 1; i < framesUntilTracked; i++) {
- if (!hasSimilarTouchEventInFrame(te, i)) tracked = false;
- }
- if (tracked)
- {
- trackedTouchEvents.Add(te);
- Console.WriteLine("touch tracked at x:" + te.getX() + " y:" + te.getY() + " [touchValue:" + te.getTouchValue() + "]");
- }
- }
- }
- private bool hasSimilarTouchEventInFrame(TouchEvent touchEvent, int frame) {
- float maxDistance = 20;
- foreach (TouchEvent te in detectedTouchEvents[frame]) {
- float distance = touchEvent.getDistanceTo(te);
- if (distance < maxDistance)
- return true;
- }
- return false;
- }
- }
- }
|