From d2de426f58ce724e1da02e19b846669ac83cf496 Mon Sep 17 00:00:00 2001 From: David Wu Date: Wed, 29 Mar 2017 11:16:57 +1300 Subject: [PATCH] Fixed so the animation timer will exit when all boats finish the race -Moved listeners for annotation to initialize -Fixed compass arrow not rescaling properly with canvas -Fixed scaling issue with race clock --- src/main/java/seng302/Constants.java | 2 +- .../seng302/Controllers/RaceController.java | 30 +++++++++---------- src/main/java/seng302/Model/Boat.java | 2 +- src/main/java/seng302/Model/Race.java | 19 +++++++----- .../seng302/Model/ResizableRaceCanvas.java | 6 ++-- 5 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/main/java/seng302/Constants.java b/src/main/java/seng302/Constants.java index d1182698..2162147c 100644 --- a/src/main/java/seng302/Constants.java +++ b/src/main/java/seng302/Constants.java @@ -25,7 +25,7 @@ public class Constants { {new BoatInRace("Oracle Team USA", 30.0, Color.BLUEVIOLET, "Oracle"), new BoatInRace("Land Rover BAR", 23.0, Color.BLACK, "BAR"), new BoatInRace("SoftBank Team Japan", 27.0, Color.RED, "JAP"), - new BoatInRace("Groupama Team France", 25.0, Color.ORANGE, "FRN"), + new BoatInRace("Groupama Team France", 25.0, Color.ORANGE, "FRA"), new BoatInRace("Artemis Racing", 22.5, Color.DARKOLIVEGREEN, "ART"), new BoatInRace("Emirates Team New Zealand", 62, Color.LIMEGREEN, "ETNZ")}; diff --git a/src/main/java/seng302/Controllers/RaceController.java b/src/main/java/seng302/Controllers/RaceController.java index 0af31f7c..b9065be2 100644 --- a/src/main/java/seng302/Controllers/RaceController.java +++ b/src/main/java/seng302/Controllers/RaceController.java @@ -52,7 +52,6 @@ public class RaceController extends Controller{ @FXML Label FPS; - @FXML TableView boatInfoTable; @FXML @@ -119,7 +118,17 @@ public class RaceController extends Controller{ @Override public void initialize(URL location, ResourceBundle resources) { - + //listener for fps + showFPS.selectedProperty().addListener(new ChangeListener() { + public void changed(ObservableValue ov, + Boolean old_val, Boolean new_val) { + if (showFPS.isSelected()){ + FPS.setVisible(true); + } else { + FPS.setVisible(false); + } + } + }); } @@ -160,26 +169,15 @@ public class RaceController extends Controller{ ArrayList legs = raceXMLReader.getLegs(); ConstantVelocityRace race = new ConstantVelocityRace(boats, legs, this, scaleFactor); + //start race new Thread((race)).start(); - //listener for fps - showFPS.selectedProperty().addListener(new ChangeListener() { - public void changed(ObservableValue ov, - Boolean old_val, Boolean new_val) { - if (showFPS.isSelected()){ - FPS.setVisible(true); - } else { - FPS.setVisible(false); - } - } - }); - //listener for annotation showAnno.selectedProperty().addListener(new ChangeListener() { public void changed(ObservableValue ov, Boolean old_val, Boolean new_val) { - raceMap.toggleAnno(); - raceMap.drawRaceMap(); + raceMap.toggleAnno(); + raceMap.drawRaceMap(); } }); } diff --git a/src/main/java/seng302/Model/Boat.java b/src/main/java/seng302/Model/Boat.java index 371ba522..58662423 100644 --- a/src/main/java/seng302/Model/Boat.java +++ b/src/main/java/seng302/Model/Boat.java @@ -21,7 +21,7 @@ public class Boat { */ public Boat(String name, double velocity, String abbrev) { this.velocity = velocity; - this.velocityProp = new SimpleStringProperty(String.valueOf(velocity* 1.94384)); + this.velocityProp = new SimpleStringProperty(String.valueOf(velocity)); this.abbrev = abbrev; this.name = new SimpleStringProperty(name); } diff --git a/src/main/java/seng302/Model/Race.java b/src/main/java/seng302/Model/Race.java index a1a8ca83..364ea266 100644 --- a/src/main/java/seng302/Model/Race.java +++ b/src/main/java/seng302/Model/Race.java @@ -27,8 +27,8 @@ public abstract class Race implements Runnable { protected int scaleFactor; private int SLEEP_TIME = 100; //time in milliseconds to pause in a paced loop - protected int PRERACE_TIME = 10000;//Integer.MAX_VALUE; //time in milliseconds to pause during pre-race - private boolean timerEnabled = true; + protected int PRERACE_TIME = 5000; //time in milliseconds to pause during pre-race + private boolean timerEnabled = true; //boolean to determine if timer is ran /** * Initailiser for Race @@ -147,7 +147,7 @@ public abstract class Race implements Runnable { long remainingSeconds; long hours; - currentTimeInSeconds = (totalTimeElapsed / 1000) * scaleFactor; + currentTimeInSeconds = (totalTimeElapsed * scaleFactor)/ 1000; minutes = currentTimeInSeconds / 60; remainingSeconds = currentTimeInSeconds % 60; hours = minutes / 60; @@ -177,13 +177,11 @@ public abstract class Race implements Runnable { */ private void simulateRace() { - System.setProperty("javafx.animation.fullspeed", "true"); - new AnimationTimer() { - long timeRaceStarted = System.currentTimeMillis(); - int fps = 0; - long timeCurrent = System.currentTimeMillis(); + long timeRaceStarted = System.currentTimeMillis(); //start time of loop + int fps = 0; //init fps value + long timeCurrent = System.currentTimeMillis(); //current time @Override public void handle(long arg0) { @@ -205,6 +203,11 @@ public abstract class Race implements Runnable { if (controller != null) controller.updateMap(startingBoats); if (timerEnabled) updateTime(calcTimer()); + } else { + //Exit animation timer + updateTime(calcTimer()); + updateFPS(0); //race ended so fps = 0 + stop(); //exit animation timer } fps++; if ((System.currentTimeMillis()-timeCurrent) > 1000){ diff --git a/src/main/java/seng302/Model/ResizableRaceCanvas.java b/src/main/java/seng302/Model/ResizableRaceCanvas.java index e0554da9..22e4276c 100644 --- a/src/main/java/seng302/Model/ResizableRaceCanvas.java +++ b/src/main/java/seng302/Model/ResizableRaceCanvas.java @@ -2,6 +2,7 @@ package seng302.Model; import javafx.application.Platform; +import javafx.beans.property.StringProperty; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; @@ -17,6 +18,7 @@ import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; /** * This creates a JavaFX Canvas that is fills it's parent. @@ -200,8 +202,8 @@ public class ResizableRaceCanvas extends Canvas { } } - //display wind direction arrow - specify origin point and angle - displayArrow(new GraphCoordinate(500, 20), 100); + //display wind direction arrow - specify origin point and angle - angle now set to random angle + displayArrow(new GraphCoordinate((int)getWidth()-40, 40), 0); } /**