Added scaler variable to mulitply the race clock and the boats' velocities by

- Races take roughly 15 mins realtime with a slowest boat of ~20 knots. Therefore scale by 3 for a 5 min race, and 15 for a 1 min race

#story[16] #implement
main
Erika Savell 9 years ago
parent caf99ae891
commit 4c7295998b

@ -25,12 +25,12 @@ public class Constants {
public static final GPSCoordinate finishLineMarker2 = new GPSCoordinate(32.317257, -64.836260); public static final GPSCoordinate finishLineMarker2 = new GPSCoordinate(32.317257, -64.836260);
public static final BoatInRace[] OFFICIAL_AC35_COMPETITORS = new BoatInRace[] public static final BoatInRace[] OFFICIAL_AC35_COMPETITORS = new BoatInRace[]
{new BoatInRace("Oracle Team USA", 300.0, Color.BLUEVIOLET, "USA"), {new BoatInRace("Oracle Team USA", 30.0, Color.BLUEVIOLET, "USA"),
new BoatInRace("Land Rover BAR", 500.0, Color.BLACK, "BAR"), new BoatInRace("Land Rover BAR", 23.0, Color.BLACK, "BAR"),
new BoatInRace("SoftBank Team Japan", 400.0, Color.RED, "JAP"), new BoatInRace("SoftBank Team Japan", 27.0, Color.RED, "JAP"),
new BoatInRace("Groupama Team France", 350.0, Color.ORANGE, "FRN"), new BoatInRace("Groupama Team France", 25.0, Color.ORANGE, "FRN"),
new BoatInRace("Artemis Racing", 440.0, Color.DARKOLIVEGREEN, "ART"), new BoatInRace("Artemis Racing", 22.5, Color.DARKOLIVEGREEN, "ART"),
new BoatInRace("Emirates Team New Zealand", 620, Color.LIMEGREEN, "ENZ")}; new BoatInRace("Emirates Team New Zealand", 62, Color.LIMEGREEN, "ENZ")};
//public static final Leg bermudaCourseStartToMark1 = new Leg(0, , new ) //public static final Leg bermudaCourseStartToMark1 = new Leg(0, , new )
} }

@ -12,7 +12,9 @@ import java.util.ArrayList;
*/ */
public class Boat { public class Boat {
private StringProperty name; private StringProperty name;
private double velocity; private double velocity;
private double scaledVelocity;
private StringProperty velocityProp; private StringProperty velocityProp;
private String abbrev; private String abbrev;
@ -48,6 +50,15 @@ public class Boat {
return velocity; return velocity;
} }
public double getScaledVelocity() {
return scaledVelocity;
}
public void setScaledVelocity(double velocity) {
this.scaledVelocity = velocity;
}
/** /**
* *
* @return The Name of the boat. * @return The Name of the boat.

@ -33,7 +33,7 @@ public class ConstantVelocityRace extends Race {
protected void updatePosition(BoatInRace boat, int millisecondsElapsed) { protected void updatePosition(BoatInRace boat, int millisecondsElapsed) {
//distanceTravelled = velocity (nm p hr) * time taken to update loop //distanceTravelled = velocity (nm p hr) * time taken to update loop
double distanceTravelled = boat.getVelocity() * millisecondsElapsed/3600000; double distanceTravelled = boat.getScaledVelocity() * millisecondsElapsed/3600000;
double totalDistanceTravelled = distanceTravelled + boat.getDistanceTravelledInLeg(); double totalDistanceTravelled = distanceTravelled + boat.getDistanceTravelledInLeg();
boolean finish = boat.getCurrentLeg().getName().equals("Finish"); boolean finish = boat.getCurrentLeg().getName().equals("Finish");

@ -28,6 +28,7 @@ public class Leg {
this.endGPSCoordinate = end; this.endGPSCoordinate = end;
this.legNumber = number; this.legNumber = number;
this.distance = calculateDistance(); this.distance = calculateDistance();
System.out.println("Distance of leg " + name + " is " + Double.toString(distance));
} }
/** /**

@ -22,6 +22,7 @@ public abstract class Race implements Runnable {
protected RaceController controller; protected RaceController controller;
protected int boatsFinished = 0; protected int boatsFinished = 0;
protected long totalTimeElapsed; protected long totalTimeElapsed;
protected int scale_factor = 15;
private int SLEEP_TIME = 100; //time in milliseconds to pause in a paced loop private int SLEEP_TIME = 100; //time in milliseconds to pause in a paced loop
@ -34,6 +35,10 @@ public abstract class Race implements Runnable {
* @param legs Number of marks in order that the boats pass in order to complete the race. * @param legs Number of marks in order that the boats pass in order to complete the race.
*/ */
public Race(BoatInRace[] boats, ArrayList<Leg> legs, RaceController controller) { public Race(BoatInRace[] boats, ArrayList<Leg> legs, RaceController controller) {
for (BoatInRace boat : boats) {
boat.setScaledVelocity(boat.getVelocity() * scale_factor);
}
this.startingBoats = FXCollections.observableArrayList(boats); this.startingBoats = FXCollections.observableArrayList(boats);
this.legs = legs; this.legs = legs;
this.legs.add(new Leg("Finish", this.legs.size())); this.legs.add(new Leg("Finish", this.legs.size()));
@ -117,8 +122,9 @@ public abstract class Race implements Runnable {
long hours; long hours;
currentTimeInSeconds = totalTimeElapsed / 1000; currentTimeInSeconds = totalTimeElapsed / 1000;
minutes = currentTimeInSeconds / 60; long scaledTimeInSeconds = currentTimeInSeconds * scale_factor;
remainingSeconds = currentTimeInSeconds % 60; minutes = scaledTimeInSeconds / 60;
remainingSeconds = scaledTimeInSeconds % 60;
hours = minutes / 60; hours = minutes / 60;
minutes = minutes % 60; minutes = minutes % 60;
return String.format("Race clock: %02d:%02d:%02d", hours, minutes, remainingSeconds); return String.format("Race clock: %02d:%02d:%02d", hours, minutes, remainingSeconds);

Loading…
Cancel
Save