diff --git a/src/main/java/seng302/Model/Leg.java b/src/main/java/seng302/Model/Leg.java index 0d1f5649..84ee1529 100644 --- a/src/main/java/seng302/Model/Leg.java +++ b/src/main/java/seng302/Model/Leg.java @@ -34,8 +34,9 @@ public class Leg { * Construction Method * @param name Name of the Leg */ - public Leg(String name) { + public Leg(String name, int number) { this.name = name; + this.legNumber = number; } /** diff --git a/src/main/java/seng302/Model/Race.java b/src/main/java/seng302/Model/Race.java index 589edff0..97c675f5 100644 --- a/src/main/java/seng302/Model/Race.java +++ b/src/main/java/seng302/Model/Race.java @@ -26,6 +26,7 @@ public abstract class Race implements Runnable { private int SLEEP_TIME = 50; //time in milliseconds to pause in a paced loop private int PRERACE_TIME = 10000;//Integer.MAX_VALUE; //time in milliseconds to pause during pre-race + private boolean timerEnabled = true; /** * Initailiser for Race @@ -35,7 +36,7 @@ public abstract class Race implements Runnable { public Race(BoatInRace[] boats, ArrayList legs, RaceController controller) { this.startingBoats = FXCollections.observableArrayList(boats); this.legs = legs; - this.legs.add(new Leg("Finish")); + this.legs.add(new Leg("Finish", this.legs.size())); this.controller = controller; } @@ -54,10 +55,14 @@ public abstract class Race implements Runnable { public void run() { setControllerListeners(); preRace(); - countdownTimer(); + if(timerEnabled) countdownTimer(); simulateRace(); } + public void disableTimer() { + timerEnabled = false; + } + /** * Set up the state in waiting for the race starts. */ @@ -146,8 +151,8 @@ public abstract class Race implements Runnable { } } - controller.updateMap(startingBoats); - updateTime(calcTimer()); + if(controller != null) controller.updateMap(startingBoats); + if(timerEnabled) updateTime(calcTimer()); try { timeLoopEnded = System.currentTimeMillis(); Thread.sleep(SLEEP_TIME - (timeLoopEnded - timeLoopStarted)); diff --git a/src/test/java/seng302/Model/RaceTest.java b/src/test/java/seng302/Model/RaceTest.java index 0ead45f7..f448d092 100644 --- a/src/test/java/seng302/Model/RaceTest.java +++ b/src/test/java/seng302/Model/RaceTest.java @@ -1,5 +1,8 @@ package seng302.Model; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.paint.Color; import org.junit.Ignore; import org.junit.Test; import seng302.GPSCoordinate; @@ -8,6 +11,8 @@ import seng302.Model.ConstantVelocityRace; import seng302.Model.Leg; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Observable; import static org.junit.Assert.assertTrue; @@ -41,4 +46,24 @@ public class RaceTest { // ConstantVelocityRace race = new ConstantVelocityRace(boats, legs); // race.run(); // } + + @Test + public void finishOrderDeterminedByVelocity() { + BoatInRace[] boats = { + new BoatInRace("NZ", 2000, Color.BEIGE, "NZ"), + new BoatInRace("AU", 2800, Color.BEIGE, "AU") + }; + ArrayList legs = new ArrayList<>(); + legs.add(new Leg("Start", new GPSCoordinate(32.296577, -64.854304),new GPSCoordinate(32.293039, -64.843983),0)); + legs.add(new Leg("Start", new GPSCoordinate(32.293039, -64.843983),new GPSCoordinate(32.284680, -64.850045),1)); + Race race = new ConstantVelocityRace(boats, legs); + race.disableTimer(); + + // Boats should finish in an order determined by their velocity + Arrays.sort(boats, (a,b) -> (int)(b.getVelocity()-a.getVelocity())); + race.run(); + + for(int i = 0; i < boats.length; i++) + assertTrue(boats[i].equals(race.getStartingBoats().get(i))); + } }