diff --git a/src/main/java/seng302/controllers/RaceController.java b/src/main/java/seng302/controllers/RaceController.java new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/seng302/controllers/RaceViewController.java b/src/main/java/seng302/controllers/RaceViewController.java index e9a3d423..03b51cfa 100644 --- a/src/main/java/seng302/controllers/RaceViewController.java +++ b/src/main/java/seng302/controllers/RaceViewController.java @@ -35,6 +35,7 @@ import seng302.models.stream.StreamParser; import java.io.IOException; import java.util.*; +import seng302.models.stream.XMLParser.RaceXMLObject.Participant; import java.util.stream.Collectors; /** @@ -100,6 +101,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel /** * The important annotations have been changed, update this view + * * @param importantAnnotationsState The current state of the selected annotations */ public void importantAnnotationsChanged(ImportantAnnotationsState importantAnnotationsState) { @@ -325,21 +327,42 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel positionVbox.getChildren().removeAll(); positionVbox.getStylesheets().add(getClass().getResource("/css/master.css").toString()); - for (Yacht boat : StreamParser.getBoatsPos().values()) { - if (boat.getBoatStatus() == 3) { // 3 is finish status - Text textToAdd = new Text(boat.getPosition() + ". " + - boat.getShortName() + " (Finished)"); - textToAdd.setFill(Paint.valueOf("#d3d3d3")); - positionVbox.getChildren().add(textToAdd); + // list of racing boat id + ArrayList participants = StreamParser.getXmlObject().getRaceXML() + .getParticipants(); + ArrayList participantIDs = new ArrayList<>(); + for (Participant p : participants) { + participantIDs.add(p.getsourceID()); + } - } else { - Text textToAdd = new Text(boat.getPosition() + ". " + - boat.getShortName() + " "); - textToAdd.setFill(Paint.valueOf("#d3d3d3")); - textToAdd.setStyle(""); - positionVbox.getChildren().add(textToAdd); + if (StreamParser.isRaceStarted()) { + for (Yacht boat : StreamParser.getBoatsPos().values()) { + if (participantIDs.contains(boat.getSourceID())) { // check if the boat is racing + if (boat.getBoatStatus() == 3) { // 3 is finish status + Text textToAdd = new Text(boat.getPosition() + ". " + + boat.getShortName() + " (Finished)"); + textToAdd.setFill(Paint.valueOf("#d3d3d3")); + positionVbox.getChildren().add(textToAdd); + + } else { + Text textToAdd = new Text(boat.getPosition() + ". " + + boat.getShortName() + " "); + textToAdd.setFill(Paint.valueOf("#d3d3d3")); + textToAdd.setStyle(""); + positionVbox.getChildren().add(textToAdd); + } + } + } + } else { + for (Yacht boat : StreamParser.getBoats().values()) { + if (participantIDs.contains(boat.getSourceID())) { // check if the boat is racing + Text textToAdd = new Text(boat.getPosition() + ". " + + boat.getShortName() + " "); + textToAdd.setFill(Paint.valueOf("#d3d3d3")); + textToAdd.setStyle(""); + positionVbox.getChildren().add(textToAdd); + } } - } } @@ -420,6 +443,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel /** * Display the important annotations for a specific BoatGroup + * * @param bg The boat group to set the annotations for */ private void setBoatGroupImportantAnnotations(BoatGroup bg) { @@ -475,7 +499,9 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel break; // Important Annotations case 1: - includedCanvasController.getBoatGroups().forEach(this::setBoatGroupImportantAnnotations); + for (BoatGroup bg : includedCanvasController.getBoatGroups()) { + setBoatGroupImportantAnnotations(bg); + } break; // All Annotations case 2: diff --git a/src/main/java/seng302/controllers/StartScreenController.java b/src/main/java/seng302/controllers/StartScreenController.java index debeb371..22e5dd1b 100644 --- a/src/main/java/seng302/controllers/StartScreenController.java +++ b/src/main/java/seng302/controllers/StartScreenController.java @@ -2,6 +2,7 @@ package seng302.controllers; import java.io.IOException; import java.net.URL; +import java.util.ArrayList; import java.util.ResourceBundle; import java.util.Timer; import java.util.TimerTask; @@ -23,8 +24,10 @@ import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import seng302.models.Yacht; import seng302.models.stream.StreamParser; +import seng302.models.stream.XMLParser.RaceXMLObject.Participant; public class StartScreenController implements Initializable { + @FXML private GridPane gridPane; @FXML @@ -48,19 +51,18 @@ public class StartScreenController implements Initializable { private boolean switchedToRaceView = false; - private void setContentPane(String jfxUrl){ - try{ + private void setContentPane(String jfxUrl) { + try { // get the main controller anchor pane (MainView.fxml) AnchorPane contentPane = (AnchorPane) gridPane.getParent(); contentPane.getChildren().removeAll(); contentPane.getChildren().clear(); contentPane.getStylesheets().add(getClass().getResource("/css/master.css").toString()); - contentPane.getChildren().addAll((Pane) FXMLLoader.load(getClass().getResource(jfxUrl))); - } - catch(javafx.fxml.LoadException e){ + contentPane.getChildren() + .addAll((Pane) FXMLLoader.load(getClass().getResource(jfxUrl))); + } catch (javafx.fxml.LoadException e) { e.printStackTrace(); - } - catch(IOException e){ + } catch (IOException e) { e.printStackTrace(); } } @@ -72,7 +74,8 @@ public class StartScreenController implements Initializable { } /** - * Running a timer to update the livestream status on welcome screen. Update interval is 1 second. + * Running a timer to update the livestream status on welcome screen. Update interval is 1 + * second. */ public void startStream() { if (StreamParser.isStreamStatus()) { @@ -102,8 +105,10 @@ public class StartScreenController implements Initializable { updateTeamList(); timeTillLive.setTextFill(Color.RED); switchToRaceViewButton.setDisable(false); - String timerMinute = Long.toString(StreamParser.getTimeSinceStart() / 60); - String timerSecond = Long.toString(StreamParser.getTimeSinceStart() % 60); + String timerMinute = Long + .toString(StreamParser.getTimeSinceStart() / 60); + String timerSecond = Long + .toString(StreamParser.getTimeSinceStart() % 60); if (timerSecond.length() == 1) { timerSecond = "0" + timerSecond; } @@ -114,8 +119,10 @@ public class StartScreenController implements Initializable { updateTeamList(); timeTillLive.setTextFill(Color.BLACK); switchToRaceViewButton.setDisable(false); - String timerMinute = Long.toString(-1 * StreamParser.getTimeSinceStart() / 60); - String timerSecond = Long.toString(-1 * StreamParser.getTimeSinceStart() % 60); + String timerMinute = Long + .toString(-1 * StreamParser.getTimeSinceStart() / 60); + String timerSecond = Long + .toString(-1 * StreamParser.getTimeSinceStart() % 60); if (timerSecond.length() == 1) { timerSecond = "0" + timerSecond; } @@ -143,19 +150,40 @@ public class StartScreenController implements Initializable { teamList.setItems(data); boatNameCol.setCellValueFactory( - new PropertyValueFactory<>("boatName") + new PropertyValueFactory<>("boatName") ); shortNameCol.setCellValueFactory( - new PropertyValueFactory<>("shortName") + new PropertyValueFactory<>("shortName") ); countryCol.setCellValueFactory( - new PropertyValueFactory<>("country") + new PropertyValueFactory<>("country") ); posCol.setCellValueFactory( - new PropertyValueFactory<>("position") + new PropertyValueFactory<>("position") ); - data.addAll(StreamParser.getBoatsPos().values()); + // check if the boat is racing + ArrayList participants = StreamParser.getXmlObject().getRaceXML() + .getParticipants(); + ArrayList participantIDs = new ArrayList<>(); + for (Participant p : participants) { + participantIDs.add(p.getsourceID()); + } + + // add boats to the start screen list + if (StreamParser.isRaceStarted()) { // if race is started, use StreamParser.getBoatsPos() + for (Yacht boat : StreamParser.getBoatsPos().values()) { + if (participantIDs.contains(boat.getSourceID())) { + data.add(boat); + } + } + } else { // else use StreamParser.getBoats() + for (Yacht boat : StreamParser.getBoats().values()) { + if (participantIDs.contains(boat.getSourceID())) { + data.add(boat); + } + } + } teamList.refresh(); } } diff --git a/src/main/java/seng302/models/Yacht.java b/src/main/java/seng302/models/Yacht.java index b55379df..6358003d 100644 --- a/src/main/java/seng302/models/Yacht.java +++ b/src/main/java/seng302/models/Yacht.java @@ -13,9 +13,10 @@ import java.text.SimpleDateFormat; * Yacht class for the racing boat. * * Class created to store more variables (eg. boat statuses) compared to the XMLParser boat class, - * also done outside Boat class because some old variables are not used anymore. + * also done outside Boat class because some old variables are not used anymore. */ public class Yacht { + // Used in boat group private Color colour; private double velocity; @@ -45,51 +46,55 @@ public class Yacht { * * @param boatName Create a yacht object with name. */ - public Yacht (String boatName) { + public Yacht(String boatName) { this.boatName = boatName; } /** * Used in BoatGroupTest. * - * @param boatName The name of the team sailing the boat + * @param boatName The name of the team sailing the boat * @param boatVelocity The speed of the boat in meters/second - * @param shortName A shorter version of the teams name + * @param shortName A shorter version of the teams name */ public Yacht(String boatName, double boatVelocity, String shortName, int id) { this.boatName = boatName; this.velocity = boatVelocity; this.shortName = shortName; this.sourceID = id; - index = 0; - } - public Yacht(String boatType, Integer sourceID, String hullID, String shortName, String boatName, String country) { + public Yacht(String boatType, Integer sourceID, String hullID, String shortName, + String boatName, String country) { this.boatType = boatType; this.sourceID = sourceID; this.hullID = hullID; this.shortName = shortName; this.boatName = boatName; this.country = country; - index = 0; + this.position = "-"; } public String getBoatType() { return boatType; } + public Integer getSourceID() { return sourceID; } + public String getHullID() { return hullID; } + public String getShortName() { return shortName; } + public String getBoatName() { return boatName; } + public String getCountry() { return country; } @@ -111,7 +116,6 @@ public class Yacht { RaceViewController.updateYachtPositionSparkline(this, legNumber); } this.legNumber = legNumber; - } public Integer getPenaltiesAwarded() {