Revision 776
Code cleanup and documentation
Colonet.java | ||
---|---|---|
492 | 492 |
|
493 | 493 |
RobotIcon r = robotIcons.get(botNum); |
494 | 494 |
if (r != null) { |
495 |
r.battery = batteryIcon.convert(level); // set contextual battery meter
|
|
495 |
r.setBattery(batteryIcon.convert(level)); // set contextual battery meter
|
|
496 | 496 |
batteryIcon.setLevel(level); // set solo battery meter |
497 | 497 |
} |
498 | 498 |
super.repaint(); |
... | ... | |
514 | 514 |
// Save previous robot information |
515 | 515 |
RobotIcon oldIcon = robotIcons.get(id); |
516 | 516 |
if (oldIcon != null) { |
517 |
newIcon.battery = oldIcon.battery; |
|
518 |
newIcon.destx = oldIcon.destx; |
|
519 |
newIcon.desty = oldIcon.desty; |
|
517 |
newIcon.setBattery(oldIcon.getBattery()); |
|
518 |
newIcon.setDestination(oldIcon.getDestination()); |
|
520 | 519 |
} |
521 |
if (newIcon.id >= 0) {
|
|
522 |
newIcon.color = Color.GREEN;
|
|
520 |
if (newIcon.getID() >= 0) {
|
|
521 |
newIcon.setColor(Color.GREEN);
|
|
523 | 522 |
} |
524 | 523 |
newList.put(id, newIcon); |
525 | 524 |
} |
... | ... | |
534 | 533 |
System.out.println("Got move update: " + line); |
535 | 534 |
String [] str = line.split(" "); |
536 | 535 |
int id = Integer.parseInt(str[1]); |
537 |
robotIcons.cancelMoveTo(id);
|
|
536 |
robotIcons.get(id).clearDestination();
|
|
538 | 537 |
} |
539 | 538 |
|
540 | 539 |
/** |
... | ... | |
620 | 619 |
|
621 | 620 |
RobotIcon r = robotIcons.get(selectedBot); |
622 | 621 |
if (r != null) { |
623 |
r.destx = pt.x; |
|
624 |
r.desty = pt.y; |
|
622 |
r.setDestination(pt); |
|
625 | 623 |
if (csi != null) { |
626 |
csi.sendAbsoluteMove(r.id, r.destx, r.desty);
|
|
624 |
csi.sendAbsoluteMove(r.getID(), pt.x, pt.y);
|
|
627 | 625 |
} |
628 | 626 |
} |
629 | 627 |
return; |
... | ... | |
633 | 631 |
if ((e.getButton() == MouseEvent.BUTTON2 || e.getButton() == MouseEvent.BUTTON3) |
634 | 632 |
&& e.getID() == MouseEvent.MOUSE_PRESSED |
635 | 633 |
&& station != null && station.contains(e.getX(), e.getY())) { |
636 |
if (selectedBot >= 0) |
|
634 |
if (selectedBot >= 0) { |
|
635 |
RobotIcon r = robotIcons.get(selectedBot); |
|
636 |
if (r != null) { |
|
637 |
Point p = panelWebcam.convertPoint(station.getX(), station.getY()); |
|
638 |
r.setDestination(p); |
|
639 |
} |
|
637 | 640 |
csi.sendRecharge(selectedBot); |
641 |
} |
|
638 | 642 |
return; |
639 | 643 |
} |
640 | 644 |
|
... | ... | |
648 | 652 |
if (selectedBot < 0) { |
649 | 653 |
return; |
650 | 654 |
} |
651 |
|
|
652 | 655 |
RobotIcon r = robotIcons.get(selectedBot); |
653 | 656 |
if (r != null) { |
654 |
r.destx = pt.x; |
|
655 |
r.desty = pt.y; |
|
657 |
r.setDestination(pt); |
|
656 | 658 |
if (csi != null) { |
657 |
csi.sendAbsoluteMove(r.id, r.destx, r.desty);
|
|
659 |
csi.sendAbsoluteMove(r.getID(), pt.x, pt.y);
|
|
658 | 660 |
} |
659 | 661 |
} |
660 | 662 |
return; |
... | ... | |
670 | 672 |
panelWebcam.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
671 | 673 |
for (Map.Entry<Integer,RobotIcon> entry : robotIcons.entrySet()) { |
672 | 674 |
RobotIcon r = entry.getValue(); |
673 |
r.destx = pt.x;
|
|
674 |
r.desty = pt.y;
|
|
675 |
r.setDestination(pt);
|
|
676 |
//TODO: send absolute move commands
|
|
675 | 677 |
} |
676 | 678 |
return; |
677 | 679 |
} |
... | ... | |
711 | 713 |
// Otherwise, we are selecting a bot, or doing nothing |
712 | 714 |
RobotIcon r = robotIcons.getBoundingIcon(pt); |
713 | 715 |
if (r != null) |
714 |
selectedBot = r.id;
|
|
716 |
selectedBot = r.getID();
|
|
715 | 717 |
} |
716 | 718 |
} |
717 | 719 |
|
... | ... | |
793 | 795 |
} else if (source == btnF) { // Robot Movement Controls |
794 | 796 |
vectorController.setMaxForward(); |
795 | 797 |
vectorController.sendToServer(); |
796 |
robotIcons.cancelMoveTo(selectedBot);
|
|
798 |
robotIcons.get(selectedBot).clearDestination();
|
|
797 | 799 |
} else if (source == btnB) { |
798 | 800 |
vectorController.setMaxReverse(); |
799 | 801 |
vectorController.sendToServer(); |
800 |
robotIcons.cancelMoveTo(selectedBot);
|
|
802 |
robotIcons.get(selectedBot).clearDestination();
|
|
801 | 803 |
} else if (source == btnL) { |
802 | 804 |
vectorController.setMaxLeft(); |
803 | 805 |
vectorController.sendToServer(); |
804 |
robotIcons.cancelMoveTo(selectedBot);
|
|
806 |
robotIcons.get(selectedBot).clearDestination();
|
|
805 | 807 |
} else if (source == btnR) { |
806 | 808 |
vectorController.setMaxRight(); |
807 | 809 |
vectorController.sendToServer(); |
808 |
robotIcons.cancelMoveTo(selectedBot);
|
|
810 |
robotIcons.get(selectedBot).clearDestination();
|
|
809 | 811 |
} else if (source == btnActivate) { |
810 | 812 |
vectorController.setZero(); |
811 | 813 |
vectorController.sendToServer(); |
812 |
robotIcons.cancelMoveTo(selectedBot);
|
|
814 |
robotIcons.get(selectedBot).clearDestination();
|
|
813 | 815 |
} else if (source == btnSetBounds) { |
814 | 816 |
boundary.set = true; |
815 | 817 |
panelWebcam.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); |
... | ... | |
842 | 844 |
else |
843 | 845 |
csi.sendRecharge(2); |
844 | 846 |
} else if (source == btnCommand_StopCharging) { |
845 |
if (selectedBot >= 0) |
|
847 |
if (selectedBot >= 0) { |
|
848 |
robotIcons.get(selectedBot).clearDestination(); |
|
846 | 849 |
csi.sendRechargeStop(selectedBot); |
847 |
else |
|
850 |
} else { |
|
851 |
robotIcons.get(2).clearDestination(); |
|
848 | 852 |
csi.sendRechargeStop(2); |
853 |
} |
|
849 | 854 |
} else if (source == btnAddTask) { // Queue Management |
850 | 855 |
taskAddWindow.prompt(); |
851 | 856 |
} else if (source == btnRemoveTask) { |
... | ... | |
896 | 901 |
if (count % 30 == 0) { |
897 | 902 |
for (Map.Entry<Integer,RobotIcon> entry : robotIcons.entrySet()) { |
898 | 903 |
RobotIcon r = entry.getValue(); |
899 |
int id = r.id;
|
|
904 |
int id = r.getID();
|
|
900 | 905 |
if (id >= 0) { |
901 | 906 |
csi.sendBatteryRequest(id); |
902 | 907 |
} |
... | ... | |
999 | 1004 |
bufferedGraphics.setStroke(new BasicStroke(2)); |
1000 | 1005 |
for (Map.Entry<Integer,RobotIcon> entry : robotIcons.entrySet()) { |
1001 | 1006 |
RobotIcon r = entry.getValue(); |
1002 |
bufferedGraphics.setColor(r.color);
|
|
1007 |
bufferedGraphics.setColor(r.getColor());
|
|
1003 | 1008 |
// Identifier circle |
1004 |
int px = (int) (x + r.x * scale); |
|
1005 |
int py = (int) (y + r.y * scale); |
|
1009 |
int px = (int) (x + r.getLocation().x * scale);
|
|
1010 |
int py = (int) (y + r.getLocation().y * scale);
|
|
1006 | 1011 |
int radius = ColonetConstants.ROBOT_RADIUS; |
1007 | 1012 |
bufferedGraphics.drawOval(px-radius, py-radius, 2*radius, 2*radius); |
1008 | 1013 |
// ID, if applicable |
1009 |
if (r.id > 0) {
|
|
1014 |
if (r.getID() > 0) {
|
|
1010 | 1015 |
bufferedGraphics.setFont(new Font("arial", Font.PLAIN, 36)); |
1011 |
bufferedGraphics.drawString("" + r.id, px-10, py+10);
|
|
1016 |
bufferedGraphics.drawString("" + r.getID(), px-10, py+10);
|
|
1012 | 1017 |
} |
1013 | 1018 |
// Battery |
1014 |
if (r.battery >= 0) {
|
|
1015 |
int pixels = r.battery * ColonetConstants.BATTERY_WIDTH / 100;
|
|
1016 |
if (r.battery > 50)
|
|
1019 |
if (r.getBattery() >= 0) {
|
|
1020 |
int pixels = r.getBattery() * ColonetConstants.BATTERY_WIDTH / 100;
|
|
1021 |
if (r.getBattery() > 50)
|
|
1017 | 1022 |
bufferedGraphics.setColor(Color.GREEN); |
1018 |
else if (r.battery > 25)
|
|
1023 |
else if (r.getBattery() > 25)
|
|
1019 | 1024 |
bufferedGraphics.setColor(Color.YELLOW); |
1020 | 1025 |
else |
1021 | 1026 |
bufferedGraphics.setColor(Color.RED); |
... | ... | |
1024 | 1029 |
bufferedGraphics.drawRect(px+20, py+20, ColonetConstants.BATTERY_WIDTH, ColonetConstants.BATTERY_HEIGHT); |
1025 | 1030 |
} |
1026 | 1031 |
// If the robot has a destination, draw the vector |
1027 |
if (r.destx >= 0) {
|
|
1028 |
bufferedGraphics.drawLine(px, py, (int)(x + r.destx * scale), (int)(y + r.desty * scale));
|
|
1032 |
if (r.hasDestination()) {
|
|
1033 |
bufferedGraphics.drawLine(px, py, (int)(x + r.getDestination().x * scale), (int)(y + r.getDestination().y * scale));
|
|
1029 | 1034 |
} |
1030 | 1035 |
} |
1031 | 1036 |
} |
... | ... | |
1033 | 1038 |
// Identify currently-selected robot |
1034 | 1039 |
RobotIcon r = robotIcons.get(selectedBot); |
1035 | 1040 |
if (r != null) { |
1036 |
int px = (int) (x + r.x * scale); |
|
1037 |
int py = (int) (y + r.y * scale); |
|
1041 |
int px = (int) (x + r.getLocation().x * scale);
|
|
1042 |
int py = (int) (y + r.getLocation().y * scale);
|
|
1038 | 1043 |
int radius = ColonetConstants.ROBOT_RADIUS; |
1039 | 1044 |
bufferedGraphics.setColor(Color.BLACK); |
1040 | 1045 |
bufferedGraphics.drawOval(px-radius-6, py-radius-6, 2*radius+12, 2*radius+12); |
... | ... | |
1052 | 1057 |
if (img == null) { |
1053 | 1058 |
return new Point(e.getX(), e.getY()); |
1054 | 1059 |
} |
1060 |
return convertPoint(e.getX(), e.getY()); |
|
1061 |
} |
|
1062 |
|
|
1063 |
/** |
|
1064 |
* Convert a point on the webcam panel to a coordinate that is consistent with the |
|
1065 |
* original size of the image that the panel contains. |
|
1066 |
*/ |
|
1067 |
public Point convertPoint (int panelx, int panely) { |
|
1055 | 1068 |
|
1056 | 1069 |
// Calculate scaling |
1057 | 1070 |
int border = ColonetConstants.WEBCAM_BORDER; |
1058 |
int clickx = e.getX();
|
|
1059 |
int clicky = e.getY();
|
|
1071 |
int clickx = panelx;
|
|
1072 |
int clicky = panely;
|
|
1060 | 1073 |
int maxWidth = getWidth() - 2*border; |
1061 | 1074 |
int maxHeight = getHeight() - 2*border; |
1062 | 1075 |
double widthRatio = 1.0 * maxWidth / img.getWidth(); |
Also available in: Unified diff