TouchTracker.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using bbiwarg.Images;
  8. using bbiwarg.Graphics;
  9. namespace bbiwarg.Recognition.TouchRecognition
  10. {
  11. class TouchTracker
  12. {
  13. private OutputImage outputImage;
  14. private List<TouchEvent>[] detectedTouchEvents;
  15. private int framesUntilTracked;
  16. public List<TouchEvent> TrackedTouchEvents;
  17. public TouchTracker()
  18. {
  19. framesUntilTracked = Constants.TouchEventNumFramesUntilTracked;
  20. detectedTouchEvents = new List<TouchEvent>[framesUntilTracked];
  21. for (int i = 0; i < framesUntilTracked; i++)
  22. {
  23. detectedTouchEvents[i] = new List<TouchEvent>();
  24. }
  25. }
  26. public void setDetectedTouchEventsThisFrame(List<TouchEvent> touchEventsThisFrame, OutputImage outputImage)
  27. {
  28. this.outputImage = outputImage;
  29. for (int i = (framesUntilTracked - 1); i > 0; i--)
  30. {
  31. detectedTouchEvents[i] = detectedTouchEvents[i - 1];
  32. }
  33. detectedTouchEvents[0] = touchEventsThisFrame;
  34. findTrackedTouches();
  35. }
  36. private void findTrackedTouches()
  37. {
  38. TrackedTouchEvents = new List<TouchEvent>();
  39. foreach (TouchEvent te in detectedTouchEvents[0])
  40. {
  41. bool tracked = true;
  42. for (int i = 1; i < framesUntilTracked; i++)
  43. {
  44. if (!hasSimilarTouchEventInFrame(te, i)) tracked = false;
  45. }
  46. if (tracked)
  47. {
  48. outputImage.fillCircle(te.Position.IntX, te.Position.IntY, 5, Color.Yellow);
  49. TrackedTouchEvents.Add(te);
  50. }
  51. }
  52. }
  53. private bool hasSimilarTouchEventInFrame(TouchEvent touchEvent, int frame)
  54. {
  55. foreach (TouchEvent te in detectedTouchEvents[frame])
  56. {
  57. if (touchEvent.isSimilarTo(te))
  58. return true;
  59. }
  60. return false;
  61. }
  62. }
  63. }