From b25389f212fe76b1aebf9c1fce63b8de3d702983 Mon Sep 17 00:00:00 2001 From: cbt24 Date: Fri, 17 Mar 2017 13:29:33 +1300 Subject: [PATCH] Implemented list of boats in order of last feature passed. - Update controller every time boats pass a mark - Cleared info table to force update #story [15] --- .../seng302/Controllers/RaceController.java | 10 +++--- .../seng302/Model/ConstantVelocityRace.java | 5 +-- src/main/java/seng302/Model/Race.java | 35 ++++++++++--------- src/test/java/seng302/RaceTest.java | 6 ++-- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/main/java/seng302/Controllers/RaceController.java b/src/main/java/seng302/Controllers/RaceController.java index bfa52c03..d9929fc1 100644 --- a/src/main/java/seng302/Controllers/RaceController.java +++ b/src/main/java/seng302/Controllers/RaceController.java @@ -50,7 +50,8 @@ public class RaceController extends Controller{ private RaceMap map; public void updateInfoTable(Race race) { - boatInfoTable.setItems(FXCollections.observableArrayList(race.getFinishingBoats())); + boatInfoTable.getItems().clear(); + boatInfoTable.setItems(FXCollections.observableArrayList(race.getStartingBoats())); boatTeamColumn.setCellValueFactory(new PropertyValueFactory("Name")); boatMarkColumn.setCellValueFactory(new PropertyValueFactory("CurrentLeg")); @@ -70,10 +71,11 @@ public class RaceController extends Controller{ raceMap.draw(); canvasBase.getChildren().add(raceMap); - BoatInRace boat = new BoatInRace("NZ", 10000); + BoatInRace boat = new BoatInRace("NZ", 1000); BoatInRace[] boats = new BoatInRace[] {boat}; - Leg leg1 = new Leg("first leg", 1, new GPSCoordinate(0, 0), new GPSCoordinate(1, 1), 0); - Leg[] legs = new Leg[] {leg1}; + ArrayList legs = new ArrayList<>(); + legs.add(new Leg("Start", 1, new GPSCoordinate(0,0), new GPSCoordinate(1,1), 0)); + legs.add(new Leg("Mark", 1, new GPSCoordinate(0,0), new GPSCoordinate(1,1), 1)); ConstantVelocityRace race = new ConstantVelocityRace(boats, legs, this); diff --git a/src/main/java/seng302/Model/ConstantVelocityRace.java b/src/main/java/seng302/Model/ConstantVelocityRace.java index c5526fc2..6c94677a 100644 --- a/src/main/java/seng302/Model/ConstantVelocityRace.java +++ b/src/main/java/seng302/Model/ConstantVelocityRace.java @@ -4,6 +4,7 @@ import seng302.Controllers.RaceController; import seng302.GPSCoordinate; import seng302.GraphCoordinate; +import java.util.ArrayList; import java.util.concurrent.TimeUnit; /** @@ -18,11 +19,11 @@ public class ConstantVelocityRace extends Race { * @see Leg */ - public ConstantVelocityRace(BoatInRace[] startingBoats, Leg[] marks, RaceController controller) { + public ConstantVelocityRace(BoatInRace[] startingBoats, ArrayList marks, RaceController controller) { super(startingBoats, marks, controller); } - public ConstantVelocityRace(BoatInRace[] startingBoats, Leg[] marks) { + public ConstantVelocityRace(BoatInRace[] startingBoats, ArrayList marks) { super(startingBoats, marks); } diff --git a/src/main/java/seng302/Model/Race.java b/src/main/java/seng302/Model/Race.java index 8d8342a3..d8bd57dd 100644 --- a/src/main/java/seng302/Model/Race.java +++ b/src/main/java/seng302/Model/Race.java @@ -12,9 +12,9 @@ import java.util.*; */ public abstract class Race implements Runnable { protected BoatInRace[] startingBoats; - protected ArrayList finishingBoats = new ArrayList<>(); - protected Leg[] legs; + protected ArrayList legs; protected RaceController controller; + protected int boatsFinished = 0; private int SLEEP_TIME = 1000; //time in milliseconds to pause in a paced loop @@ -23,22 +23,21 @@ public abstract class Race implements Runnable { * @param boats Takes in an array of boats that are participating in the race. * @param marks Number of marks in order that the boats pass in order to complete the race. */ - public Race(BoatInRace[] boats, Leg[] marks, RaceController controller) { + public Race(BoatInRace[] boats, ArrayList marks, RaceController controller) { this.startingBoats = boats; this.legs = marks; + this.legs.add(new Leg("Finish")); this.controller = controller; } - public Race(BoatInRace[] boats, Leg[] marks) { - this.startingBoats = boats; - this.legs = marks; + public Race(BoatInRace[] boats, ArrayList marks) { + this(boats, marks, null); } public void run() { - long time = System.currentTimeMillis(); + updateController(); preRace(); simulateRace(); - if(controller != null) controller.updateInfoTable(this); } private void preRace() { @@ -47,7 +46,7 @@ public abstract class Race implements Runnable { System.out.println("===================="); for (int i = 0; i < startingBoats.length; i++) { System.out.println(i + 1 + ". " + startingBoats[i].getName() + ", Speed: " + Math.round(startingBoats[i].getVelocity() * 1.94384) + "kn"); - startingBoats[i].setCurrentLeg(legs[0]); + startingBoats[i].setCurrentLeg(legs.get(0)); } } @@ -64,7 +63,7 @@ public abstract class Race implements Runnable { long timeLoopStarted; long timeLoopEnded; - while (finishingBoats.size() < startingBoats.length) { + while (boatsFinished < startingBoats.length) { timeLoopStarted = System.currentTimeMillis(); totalTimeElapsed = System.currentTimeMillis() - timeRaceStarted; for (BoatInRace boat : startingBoats) { @@ -83,27 +82,29 @@ public abstract class Race implements Runnable { protected void checkPosition(BoatInRace boat, long timeElapsed) { - if (boat.getDistanceTravelledInLeg() > boat.getCurrentLeg().getDistance()){ + updateController(); //boat has passed onto new leg - if (boat.getCurrentLeg().getLegNumber() == legs.length - 1) { + if (boat.getCurrentLeg().getName().equals("Finish")) { //boat has finished boat.setTimeFinished(timeElapsed); - boat.setCurrentLeg(new Leg("Finish")); - finishingBoats.add(boat); + boatsFinished++; } else { boat.setDistanceTravelledInLeg(boat.getDistanceTravelledInLeg() - boat.getCurrentLeg().getDistance()); - Leg nextLeg = legs[boat.getCurrentLeg().getLegNumber() + 1]; + Leg nextLeg = legs.get(boat.getCurrentLeg().getLegNumber() + 1); boat.setCurrentLeg(nextLeg); boat.setDistanceTravelledInLeg(boat.getDistanceTravelledInLeg()); } } + } + protected void updateController() { + if(controller != null) controller.updateInfoTable(this); } - public ArrayList getFinishingBoats() { - return finishingBoats; + public BoatInRace[] getStartingBoats() { + return startingBoats; } /** diff --git a/src/test/java/seng302/RaceTest.java b/src/test/java/seng302/RaceTest.java index fefba045..542c2ea8 100644 --- a/src/test/java/seng302/RaceTest.java +++ b/src/test/java/seng302/RaceTest.java @@ -5,6 +5,8 @@ import seng302.Model.BoatInRace; import seng302.Model.ConstantVelocityRace; import seng302.Model.Leg; +import java.util.ArrayList; + /** * Created by esa46 on 15/03/17. */ @@ -16,8 +18,8 @@ public class RaceTest { BoatInRace boat = new BoatInRace("NZ", 240); BoatInRace[] boats = new BoatInRace[] {boat}; - Leg leg1 = new Leg("first leg", 1, new GPSCoordinate(0, 0), new GPSCoordinate(3, 4), 0); - Leg[] legs = new Leg[] {leg1}; + ArrayList legs = new ArrayList<>(); + legs.add(new Leg("Start", 1, new GPSCoordinate(0,0), new GPSCoordinate(1,1), 0)); ConstantVelocityRace race = new ConstantVelocityRace(boats, legs); race.run(); }