22
33import org .emrick .project .effect .Effect ;
44import org .emrick .project .effect .EffectManager ;
5+ import org .emrick .project .effect .RFTrigger ;
56
67import javax .swing .*;
78import javax .swing .event .MouseInputListener ;
89import java .awt .*;
910import java .awt .event .MouseEvent ;
1011import java .awt .geom .Point2D ;
1112import java .awt .image .BufferedImage ;
13+ import java .util .ArrayList ;
14+ import java .util .Comparator ;
1215import java .util .HashMap ;
16+ import java .util .Iterator ;
1317
1418public class FootballFieldPanel extends JPanel implements RepaintListener {
1519 public Drill drill ;
@@ -34,19 +38,19 @@ public class FootballFieldPanel extends JPanel implements RepaintListener {
3438 public long currentMS = 0 ;
3539 private int currentCount = 0 ;
3640 private int currentSetStartCount = 0 ;
37- private SerialTransmitter serialTransmitter ;
3841
3942 // Effects utility
4043 private final FootballFieldListener footballFieldListener ;
4144 private EffectManager effectManager ;
4245 private int effectTransparency = 255 ;
4346 private boolean useFps ;
47+ private HashMap <Integer , RFTrigger > count2RFTrigger ;
4448
4549 public void setUseFps (boolean useFps ) {
4650 this .useFps = useFps ;
4751 }
4852
49- public FootballFieldPanel (FootballFieldListener footballFieldListener ) {
53+ public FootballFieldPanel (FootballFieldListener footballFieldListener , HashMap < Integer , RFTrigger > count2RFTrigger ) {
5054// setPreferredSize(new Dimension(fieldWidth + 2*margin, fieldHeight + 2*margin)); // Set preferred size for the drawing area
5155 setMinimumSize (new Dimension (1042 , 548 ));
5256 drill = new Drill ();
@@ -55,10 +59,11 @@ public FootballFieldPanel(FootballFieldListener footballFieldListener) {
5559 this .addMouseListener (new MouseInput (this ));
5660 colorChosen = Color .BLACK ;
5761 this .footballFieldListener = footballFieldListener ;
62+ this .count2RFTrigger = count2RFTrigger ;
5863 }
5964
6065 public FootballFieldPanel (Color colorChosen , FootballFieldListener footballFieldListener ) {
61- this ( footballFieldListener ) ;
66+ this . footballFieldListener = footballFieldListener ;
6267 this .colorChosen = colorChosen ;
6368 }
6469
@@ -75,12 +80,17 @@ public void setEffectTransparency(int effectTransparency) {
7580 this .effectTransparency = effectTransparency ;
7681 }
7782
83+ public HashMap <Integer , RFTrigger > getCount2RFTrigger () {
84+ return count2RFTrigger ;
85+ }
86+
87+ public void setCount2RFTrigger (HashMap <Integer , RFTrigger > count2RFTrigger ) {
88+ this .count2RFTrigger = count2RFTrigger ;
89+ }
90+
7891 public void addSetToField (Set set ) {
7992 currentSet = set ;
8093 if (!set .equals ("0" )) {
81- if (serialTransmitter != null ) {
82- serialTransmitter .writeSet (set .index );
83- }
8494 for (Performer p : drill .performers ) {
8595 for (Coordinate c : p .getCoordinates ()) {
8696 if (c .set .equals (set )) {
@@ -97,14 +107,6 @@ public void addSetToField(Set set) {
97107 repaint ();
98108 }
99109
100- public SerialTransmitter getSerialTransmitter () {
101- return serialTransmitter ;
102- }
103-
104- public void setSerialTransmitter (SerialTransmitter serialTransmitter ) {
105- this .serialTransmitter = serialTransmitter ;
106- }
107-
108110 public int getCurrentCount () {
109111 return currentCount ;
110112 }
@@ -232,6 +234,23 @@ protected void paintComponent(Graphics g) {
232234 }
233235 // Case: User is not using FPS playback mode
234236 if (!useFps ) currentSetRatio = 1 ;
237+ if (count2RFTrigger != null ) {
238+ Iterator <RFTrigger > iterator = count2RFTrigger .values ().iterator ();
239+ ArrayList <RFTrigger > triggers = new ArrayList <>();
240+ while (iterator .hasNext ()) {
241+ triggers .add (iterator .next ());
242+ }
243+ triggers .sort (Comparator .comparingInt (RFTrigger ::getCount ));
244+ for (int i = 0 ; i < triggers .size (); i ++) {
245+ RFTrigger trigger = triggers .get (i );
246+ long start = trigger .getTimestampMillis ();
247+ long nextFrameMS = start + (long ) (1.0 / footballFieldListener .getFrameRate () * 1000 );
248+ if (currMS >= start && currMS < nextFrameMS ) {
249+ footballFieldListener .onRFSignal (i );
250+ break ;
251+ }
252+ }
253+ }
235254
236255 // Draw performers with their colors
237256 for (Performer p : drill .performers ) {
0 commit comments