diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 12dfecd9..57e4c6ca 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,11 +1,27 @@ + + + + + + + + + + + + - + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml index efca357c..09c81627 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/src/main/java/seng302/Controllers/RaceController.java b/src/main/java/seng302/Controllers/RaceController.java index 031bdf03..3716e052 100644 --- a/src/main/java/seng302/Controllers/RaceController.java +++ b/src/main/java/seng302/Controllers/RaceController.java @@ -4,6 +4,7 @@ package seng302.Controllers; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.canvas.GraphicsContext; import javafx.scene.control.TableColumn; @@ -47,15 +48,16 @@ public class RaceController extends Controller{ private RaceMap map; - public void updateMap(ArrayList boats) { - raceMap.setBoats(boats); + public void updateMap(ObservableList boats) { + BoatInRace[] boatInRaces = new BoatInRace[boats.size()]; + raceMap.setBoats(boats.toArray(boatInRaces)); raceMap.drawRaceMap(); } public void updateInfoTable(Race race) { boatInfoTable.getItems().clear(); - boatInfoTable.setItems(FXCollections.observableArrayList(race.getStartingBoats())); + boatInfoTable.setItems(race.getStartingBoats()); boatTeamColumn.setCellValueFactory(new PropertyValueFactory("Name")); boatMarkColumn.setCellValueFactory(new PropertyValueFactory("CurrentLeg")); @@ -70,7 +72,7 @@ public class RaceController extends Controller{ @Override public void initialize(URL location, ResourceBundle resources) { - ArrayList boats = generateAC35Competitors(); + BoatInRace[] boats = generateAC35Competitors(); raceMap = new ResizableRaceCanvas(); raceMap.widthProperty().bind(canvasBase.widthProperty()); @@ -98,18 +100,21 @@ public class RaceController extends Controller{ return legs; } - private ArrayList generateAC35Competitors() { - ArrayList boats = new ArrayList<>(); + private BoatInRace[] generateAC35Competitors() { - BoatInRace nz = new BoatInRace("NZ", 50); - nz.setColour(Color.DARKVIOLET); - nz.setCurrentPosition(new GPSCoordinate(0, 0)); - boats.add(nz); + BoatInRace boat1 = new BoatInRace("NZ", 500); + boat1.setColour(Color.DARKVIOLET); + boat1.setCurrentPosition(new GPSCoordinate(0, 0)); - //do the rest + BoatInRace boat2 = new BoatInRace("TEST", 400); + boat2.setColour(Color.DARKRED); + boat2.setCurrentPosition(new GPSCoordinate(0, 0)); + BoatInRace boat3 = new BoatInRace("TEST2", 350); + boat3.setColour(Color.FUCHSIA); + boat3.setCurrentPosition(new GPSCoordinate(0, 0)); + return new BoatInRace[] {boat1, boat2, boat3}; - return boats; } diff --git a/src/main/java/seng302/Model/ConstantVelocityRace.java b/src/main/java/seng302/Model/ConstantVelocityRace.java index d5a7ddf6..fe196bb6 100644 --- a/src/main/java/seng302/Model/ConstantVelocityRace.java +++ b/src/main/java/seng302/Model/ConstantVelocityRace.java @@ -2,8 +2,6 @@ package seng302.Model; import seng302.Constants; import seng302.Controllers.RaceController; - - import java.awt.geom.Point2D; import org.geotools.referencing.GeodeticCalculator; @@ -23,11 +21,11 @@ public class ConstantVelocityRace extends Race { * @see Leg */ - public ConstantVelocityRace(ArrayList startingBoats, ArrayList marks, RaceController controller) { + public ConstantVelocityRace(BoatInRace[] startingBoats, ArrayList marks, RaceController controller) { super(startingBoats, marks, controller); } - public ConstantVelocityRace(ArrayList startingBoats, ArrayList 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 ae1d39c5..11e50ca1 100644 --- a/src/main/java/seng302/Model/Race.java +++ b/src/main/java/seng302/Model/Race.java @@ -1,6 +1,9 @@ package seng302.Model; +import javafx.collections.FXCollections; +import javafx.collections.ObservableArray; +import javafx.collections.ObservableList; import seng302.Controllers.RaceController; import seng302.GPSCoordinate; @@ -11,7 +14,8 @@ import java.util.*; * Created by fwy13 on 3/03/17. */ public abstract class Race implements Runnable { - protected ArrayList startingBoats; + //protected BoatInRace[] startingBoats; + protected ObservableList startingBoats; protected ArrayList legs; protected RaceController controller; protected int boatsFinished = 0; @@ -24,14 +28,14 @@ public abstract class Race implements Runnable { * @param boats Takes in an array of boats that are participating in the race. * @param legs Number of marks in order that the boats pass in order to complete the race. */ - public Race(ArrayList boats, ArrayList legs, RaceController controller) { - this.startingBoats = boats; + public Race(BoatInRace[] boats, ArrayList legs, RaceController controller) { + this.startingBoats = FXCollections.observableArrayList(boats); this.legs = legs; this.legs.add(new Leg("Finish")); this.controller = controller; } - public Race(ArrayList boats, ArrayList marks) { + public Race(BoatInRace[] boats, ArrayList marks) { this(boats, marks, null); } @@ -46,9 +50,10 @@ public abstract class Race implements Runnable { System.out.println("Boats Participating:"); System.out.println("===================="); for (int i = 0; i < startingBoats.size(); i++) { - System.out.println(i + 1 + ". " + startingBoats.get(i).getName() + ", Speed: " + - Math.round(startingBoats.get(i).getVelocity()) + "kn"); - startingBoats.get(i).setCurrentLeg(legs.get(0)); + if (startingBoats.get(i) != null) { + System.out.println(i + 1 + ". " + startingBoats.get(i).getName() + ", Speed: " + Math.round(startingBoats.get(i).getVelocity() * 1.94384) + "kn"); + startingBoats.get(i).setCurrentLeg(legs.get(0)); + } } } @@ -79,8 +84,10 @@ public abstract class Race implements Runnable { System.out.println(minutes + ":" + remainingSeconds); for (BoatInRace boat : startingBoats) { - updatePosition(boat, SLEEP_TIME); - checkPosition(boat, totalTimeElapsed); + if (boat != null) { + updatePosition(boat, SLEEP_TIME); + checkPosition(boat, totalTimeElapsed); + } } controller.updateMap(startingBoats); @@ -96,7 +103,6 @@ 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().getName().equals("Finish")) { //boat has finished @@ -116,7 +122,7 @@ public abstract class Race implements Runnable { } - public ArrayList getStartingBoats() { + public ObservableList getStartingBoats() { return startingBoats; } diff --git a/src/main/java/seng302/Model/ResizableRaceCanvas.java b/src/main/java/seng302/Model/ResizableRaceCanvas.java index 517ab6f9..26f665dc 100644 --- a/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -20,9 +20,9 @@ import java.util.Random; public class ResizableRaceCanvas extends Canvas { GraphicsContext gc; RaceMap map; - private ArrayList boats = new ArrayList<>(); + private BoatInRace[] boats; - public void setBoats(ArrayList boats) { + public void setBoats(BoatInRace[] boats) { this.boats = boats; } @@ -112,8 +112,10 @@ public class ResizableRaceCanvas extends Canvas { if (boats != null) { for (BoatInRace boat : boats) { - System.out.print("Drawing Boat At: " + boat.getCurrentPosition()); - displayMark(this.map.convertGPS(boat.getCurrentPosition()), boat.getColour()); + if (boat != null) { + System.out.print("Drawing Boat At: " + boat.getCurrentPosition()); + displayMark(this.map.convertGPS(boat.getCurrentPosition()), boat.getColour()); + } } } diff --git a/src/test/java/seng302/Model/RaceTest.java b/src/test/java/seng302/Model/RaceTest.java index 58ebc957..0ead45f7 100644 --- a/src/test/java/seng302/Model/RaceTest.java +++ b/src/test/java/seng302/Model/RaceTest.java @@ -17,18 +17,18 @@ import static org.junit.Assert.assertTrue; public class RaceTest { - @Ignore - @Test - public void singleBoatRaceRunsAndFinishes(){ - - BoatInRace boat = new BoatInRace("NZ", 240); - ArrayList boats = new ArrayList<>(); - boats.add(boat); - ArrayList legs = new ArrayList<>(); - legs.add(new Leg("Start", new GPSCoordinate(0,0), new GPSCoordinate(1,1), 0)); - ConstantVelocityRace race = new ConstantVelocityRace(boats, legs); - race.run(); - } +// @Ignore +// @Test +// public void singleBoatRaceRunsAndFinishes(){ +// +// BoatInRace boat = new BoatInRace("NZ", 240); +// ArrayList boats = new ArrayList<>(); +// boats.add(boat); +// ArrayList legs = new ArrayList<>(); +// legs.add(new Leg("Start", new GPSCoordinate(0,0), new GPSCoordinate(1,1), 0)); +// ConstantVelocityRace race = new ConstantVelocityRace(boats, legs); +// race.run(); +// } // // @Test // public void fasterBoatFinishesFirst() {