TouchTracker.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using bbiwarg.Images;
  7. namespace bbiwarg.Detectors.Touch
  8. {
  9. class TouchTracker
  10. {
  11. private TouchImage touchImage;
  12. private List<TouchEvent>[] detectedTouchEvents;
  13. private int framesUntilTracked;
  14. public List<TouchEvent> TrackedTouchEvents;
  15. public TouchTracker() {
  16. framesUntilTracked = 2;
  17. detectedTouchEvents = new List<TouchEvent>[framesUntilTracked];
  18. for (int i = 0; i < framesUntilTracked; i++) {
  19. detectedTouchEvents[i] = new List<TouchEvent>();
  20. }
  21. }
  22. public void setDetectedTouchEventsThisFrame(List<TouchEvent> touchEventsThisFrame, TouchImage touchImage) {
  23. this.touchImage = touchImage;
  24. for (int i = (framesUntilTracked-1); i > 0; i--) {
  25. detectedTouchEvents[i] = detectedTouchEvents[i - 1];
  26. }
  27. detectedTouchEvents[0] = touchEventsThisFrame;
  28. findTrackedTouches();
  29. }
  30. private void findTrackedTouches() {
  31. TrackedTouchEvents = new List<TouchEvent>();
  32. foreach (TouchEvent te in detectedTouchEvents[0]) {
  33. bool tracked = true;
  34. for (int i = 1; i < framesUntilTracked; i++) {
  35. if (!hasSimilarTouchEventInFrame(te, i)) tracked = false;
  36. }
  37. if (tracked)
  38. {
  39. touchImage.setStateAt(te.Position, TouchImageState.touchTracked);
  40. TrackedTouchEvents.Add(te);
  41. //Console.WriteLine("touch tracked at x:" + te.getX() + " y:" + te.getY() + " [floodValue:" + te.getFloodValue() + "]");
  42. }
  43. }
  44. }
  45. private bool hasSimilarTouchEventInFrame(TouchEvent touchEvent, int frame) {
  46. foreach (TouchEvent te in detectedTouchEvents[frame]) {
  47. if (touchEvent.isSimilarTo(te))
  48. return true;
  49. }
  50. return false;
  51. }
  52. }
  53. }