From 2c5fddb695205b6ba4283d6d41edce40ea8732e8 Mon Sep 17 00:00:00 2001 From: Calum Date: Wed, 9 Aug 2017 16:56:46 +1200 Subject: [PATCH 01/27] Implemented zooming and clipping of race border. Implementation is still hackish. #pair[ptg19, cir27] #story[1121] --- .../java/seng302/visualiser/GameView.java | 59 +------------- .../controllers/RaceViewController.java | 10 +-- .../visualiser/fxObjects/AnnotationBox.java | 4 +- .../visualiser/fxObjects/BoatObject.java | 3 +- src/main/resources/views/RaceView.fxml | 80 +++++++++---------- 5 files changed, 50 insertions(+), 106 deletions(-) diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java index 95e1aed0..1f0a6ceb 100644 --- a/src/main/java/seng302/visualiser/GameView.java +++ b/src/main/java/seng302/visualiser/GameView.java @@ -9,14 +9,10 @@ import java.util.Map; import javafx.animation.AnimationTimer; import javafx.application.Platform; import javafx.collections.ObservableList; -import javafx.event.EventHandler; import javafx.geometry.Point2D; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.image.ImageView; -import javafx.scene.input.KeyCode; -import javafx.scene.input.KeyEvent; -import javafx.scene.input.ScrollEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; @@ -93,18 +89,14 @@ public class GameView extends Pane { public void zoomOut() { scaleFactor = 0.95; - for (Node child : getChildren()) { - child.setScaleX(child.getScaleX() * scaleFactor); - child.setScaleY(child.getScaleY() * scaleFactor); - } + this.setScaleX(this.getScaleX() * scaleFactor); + this.setScaleY(this.getScaleY() * scaleFactor); } public void zoomIn() { scaleFactor = 1.05; - for (Node child : getChildren()) { - child.setScaleX(child.getScaleX() * scaleFactor); - child.setScaleY(child.getScaleY() * scaleFactor); - } + this.setScaleX(this.getScaleX() * scaleFactor); + this.setScaleY(this.getScaleY() * scaleFactor); } private enum ScaleDirection { @@ -122,45 +114,6 @@ public class GameView extends Pane { gameObjects.add(fpsDisplay); gameObjects.add(raceBorder); gameObjects.add(markers); -// -// this.setOnKeyPressed(new EventHandler() { -// @Override public void handle(KeyEvent event) { -// event.consume(); -// switch (event.getCode()) { -// case Z: -// scaleFactor = scaleFactor * 1.2; -// break; -// case X: -// scaleFactor = scaleFactor * 0.8; -// break; -// } -// if (event.getCode() == KeyCode.Z || event.getCode() == KeyCode.X) { -// for (Node child : getChildren()) { -// child.setScaleX(child.getScaleX() * scaleFactor); -// child.setScaleY(child.getScaleY() * scaleFactor); -// } -// } -// } -// }); -// -// this.setOnScroll(new EventHandler() { -// @Override public void handle(ScrollEvent event) { -// event.consume(); -// if (event.getDeltaY() == 0) { -// return; -// } -// -// double scaleFactor = -// (event.getDeltaY() > 0) -// ? SCALE_DELTA -// : 1/SCALE_DELTA; -// for (Node child : getChildren()) { -// child.setScaleX(child.getScaleX() * scaleFactor); -// child.setScaleY(child.getScaleY() * scaleFactor); -// } -// } -// }); - initializeTimer(); } @@ -393,9 +346,6 @@ public class GameView extends Pane { BoatObject bo = boatObjects.get(boat); Point2D p2d = findScaledXY(lat, lon); bo.moveTo(p2d.getX(), p2d.getY(), heading, velocity, sailIn, windDir); -// annotations.get(boat).setLayoutX(p2d.getX()); -// annotations.get(boat).setLayoutY(p2d.getY()); -// annotations.get(boat).setLocation(100d, 100d); annotations.get(boat).setLocation(p2d.getX(), p2d.getY()); bo.setTrajectory( heading, @@ -410,7 +360,6 @@ public class GameView extends Pane { gameObjects.addAll(wakes); gameObjects.addAll(annotationsGroup); gameObjects.addAll(boatObjectGroup); - }); } diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 63ce668a..4130f536 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -115,11 +115,11 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel initialiseSparkLine(); gameView = new GameView(); - Platform.runLater(() -> contentAnchorPane.getChildren().add(gameView)); - gameView.setBoats(new ArrayList<>(participants.values())); - gameView.updateBorder(raceData.getCourseLimit()); - gameView.updateCourse( - new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence() + Platform.runLater(() -> contentAnchorPane.getChildren().add(0, gameView)); + gameView.setBoats(new ArrayList<>(participants.values())); + gameView.updateBorder(raceData.getCourseLimit()); + gameView.updateCourse( + new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence() ); gameView.setBoatAsPlayer(player); gameView.startRace(); diff --git a/src/main/java/seng302/visualiser/fxObjects/AnnotationBox.java b/src/main/java/seng302/visualiser/fxObjects/AnnotationBox.java index cdaf329e..69c9e836 100644 --- a/src/main/java/seng302/visualiser/fxObjects/AnnotationBox.java +++ b/src/main/java/seng302/visualiser/fxObjects/AnnotationBox.java @@ -95,7 +95,7 @@ public class AnnotationBox extends Group { background.setStroke(theme); background.setStrokeWidth(2); background.setCache(true); - background.setCacheHint(CacheHint.SPEED); + background.setCacheHint(CacheHint.SCALE); this.getChildren().add(background); } @@ -213,7 +213,7 @@ public class AnnotationBox extends Group { Text text = new Text(); text.setFill(theme); text.setStrokeWidth(2); - text.setCacheHint(CacheHint.SPEED); +// text.setCacheHint(CacheHint.QUALITY); text.setCache(true); return text; } diff --git a/src/main/java/seng302/visualiser/fxObjects/BoatObject.java b/src/main/java/seng302/visualiser/fxObjects/BoatObject.java index 76180bf8..bb2c2775 100644 --- a/src/main/java/seng302/visualiser/fxObjects/BoatObject.java +++ b/src/main/java/seng302/visualiser/fxObjects/BoatObject.java @@ -3,7 +3,6 @@ package seng302.visualiser.fxObjects; import java.util.ArrayList; import javafx.application.Platform; import javafx.geometry.Point2D; -import javafx.scene.CacheHint; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.paint.Color; @@ -85,7 +84,7 @@ public class BoatObject extends Group { }); boatPoly.setOnMouseClicked(event -> setIsSelected(!isSelected)); boatPoly.setCache(true); - boatPoly.setCacheHint(CacheHint.SPEED); +// boatPoly.setCacheHint(CacheHint.SPEED); // annotationBox = new AnnotationBox(); // annotationBox.setFill(colour); diff --git a/src/main/resources/views/RaceView.fxml b/src/main/resources/views/RaceView.fxml index e13853d1..0d004b90 100644 --- a/src/main/resources/views/RaceView.fxml +++ b/src/main/resources/views/RaceView.fxml @@ -1,5 +1,11 @@ + + + + + + @@ -17,40 +23,33 @@ - - - - - - - - - - - - - - + + + + From d2fd9ebaea5f4ab7bd14b2c4d0fea0ea076836cd Mon Sep 17 00:00:00 2001 From: Michael Rausch Date: Fri, 11 Aug 2017 19:03:57 +1200 Subject: [PATCH 02/27] Started work on start screen - Server now sends out race start status messages during lobby & pre-start stages - Added timer in lobby Tags: #story[1109] --- .../java/seng302/gameServer/GameState.java | 8 ++-- .../seng302/gameServer/MainServerThread.java | 1 - .../gameServer/ServerToClientThread.java | 11 +++++- src/main/java/seng302/model/RaceState.java | 9 +++-- .../model/stream/xml/generator/Regatta.java | 4 +- .../java/seng302/visualiser/GameClient.java | 18 +++++++-- .../controllers/LobbyController.java | 35 ++++++++++++++--- src/main/resources/views/LobbyView.fxml | 38 ++++++++++++++++--- 8 files changed, 97 insertions(+), 27 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 1bb968d1..2d70aecd 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -62,6 +62,8 @@ public class GameState implements Runnable { yachts = new HashMap<>(); markOrder = new MarkOrder(); //This could be instantiated at some point with a select map? + startTime = System.currentTimeMillis() + 20000; + new Thread(this).start(); //Run the auto updates on the game state } @@ -101,10 +103,6 @@ public class GameState implements Runnable { } public static void setCurrentStage(GameStages currentStage) { - if (currentStage == GameStages.RACING){ - startTime = System.currentTimeMillis(); - } - GameState.currentStage = currentStage; } @@ -195,7 +193,7 @@ public class GameState implements Runnable { } catch (InterruptedException e) { System.out.println("[GameState] interrupted exception"); } - if (currentStage == GameStages.PRE_RACE) { + if (currentStage == GameStages.PRE_RACE || currentStage == GameStages.LOBBYING) { update(); } diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 6e827d95..1b586a17 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -135,7 +135,6 @@ public class MainServerThread extends Observable implements Runnable, ClientConn t.schedule(new TimerTask() { @Override public void run() { - for (ServerToClientThread serverToClientThread : serverToClientThreads) { serverToClientThread.sendRaceStatusMessage(); } diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index 20001fc1..b9aeddfe 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -228,7 +228,7 @@ public class ServerToClientThread implements Runnable, Observer { } //@TODO calculate lat/lng values - xml.setRegatta(new Regatta("RaceVision Test Game", 57.6679590, 11.8503233)); + xml.setRegatta(new Regatta("Party Parrot Test Server", "Bermuda Test Course", 57.6679590, 11.8503233)); xml.setRace(race); XMLMessage xmlMessage; @@ -246,6 +246,7 @@ public class ServerToClientThread implements Runnable, Observer { } public void updateClient() { + sendRaceStatusMessage(); sendBoatLocationPackets(); updateClient = true; } @@ -376,6 +377,14 @@ public class ServerToClientThread implements Runnable, Observer { sendMessage(new RaceStatusMessage(1, raceStatus, GameState.getStartTime(), GameState.getWindDirection(), GameState.getWindSpeedMMS().longValue(), GameState.getPlayers().size(), RaceType.MATCH_RACE, 1, boatSubMessages)); + + if (GameState.getCurrentStage() == GameStages.PRE_RACE || GameState.getCurrentStage() == GameStages.LOBBYING){ + Long raceStartTime = GameState.getStartTime(); + + sendMessage(new RaceStartStatusMessage(1, raceStartTime , + 1, RaceStartNotificationType.SET_RACE_START_TIME)); + } + } public Socket getSocket() { diff --git a/src/main/java/seng302/model/RaceState.java b/src/main/java/seng302/model/RaceState.java index e426dc09..a602a36b 100644 --- a/src/main/java/seng302/model/RaceState.java +++ b/src/main/java/seng302/model/RaceState.java @@ -20,7 +20,7 @@ public class RaceState { private long raceTime; private long expectedStartTime; private boolean isRaceStarted = false; -// long timeTillStart; + long timeTillStart; public RaceState() { } @@ -38,8 +38,7 @@ public class RaceState { } public void updateState (RaceStartData data) { -// this.timeTillStart = data.getRaceStartTime(); - System.out.println(data.getRaceStartTime()); + this.timeTillStart = data.getRaceStartTime(); } public String getRaceTimeStr () { @@ -50,6 +49,10 @@ public class RaceState { return (expectedStartTime - raceTime) / 1000; } + public String getTimeTillStartStr () { + return DATE_TIME_FORMAT.format(getTimeTillStart() * 1000); + } + public double getWindSpeed() { return windSpeed; } diff --git a/src/main/java/seng302/model/stream/xml/generator/Regatta.java b/src/main/java/seng302/model/stream/xml/generator/Regatta.java index 4a90368a..fa802e01 100644 --- a/src/main/java/seng302/model/stream/xml/generator/Regatta.java +++ b/src/main/java/seng302/model/stream/xml/generator/Regatta.java @@ -18,10 +18,10 @@ public class Regatta { private Integer utcOffset; private Double magneticVariation; - public Regatta(String name, Double latitude, Double longitude) { + public Regatta(String name, String courseName, Double latitude, Double longitude) { this.name = name; this.id = DEFAULT_REGATTA_ID; - this.courseName = name; + this.courseName = courseName; this.latitude = latitude; this.longitude = longitude; diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index c74a99ef..2689135d 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -45,6 +45,7 @@ public class GameClient { private RegattaXMLData regattaData; private RaceXMLData courseData; private RaceState raceState = new RaceState(); + private LobbyController lobbyController; private ObservableList clientLobbyList = FXCollections.observableArrayList(); @@ -67,8 +68,10 @@ public class GameClient { LobbyController lobbyController = loadLobby(); lobbyController.setPlayerListSource(clientLobbyList); lobbyController.disableReadyButton(); - lobbyController.setTitle("Connected to host - IP : " + ipAddress + " Port : " + portNumber); + lobbyController.setTitle(regattaData.getRegattaName()); + lobbyController.setCourseName(regattaData.getCourseName()); lobbyController.addCloseListener((exitCause) -> this.loadStartScreen()); + this.lobbyController = lobbyController; } public void runAsHost(String ipAddress, Integer portNumber) { @@ -82,7 +85,8 @@ public class GameClient { socketThread.addStreamObserver(this::parsePackets); LobbyController lobbyController = loadLobby(); lobbyController.setPlayerListSource(clientLobbyList); - lobbyController.setTitle("Hosting Lobby - IP : " + ipAddress + " Port : " + portNumber); + lobbyController.setTitle("Hosting: " + regattaData.getRegattaName()); + lobbyController.setCourseName(regattaData.getCourseName()); lobbyController.addCloseListener(exitCause -> { if (exitCause == CloseStatus.READY) { server.startGame(); @@ -90,6 +94,8 @@ public class GameClient { loadStartScreen(); } }); + + this.lobbyController = lobbyController; } private void loadStartScreen() { @@ -151,13 +157,18 @@ public class GameClient { switch (packet.getType()) { case RACE_STATUS: processRaceStatusUpdate(StreamParser.extractRaceStatus(packet)); - startRaceIfAllDataReceived(); + + if (raceState.getTimeTillStart() <= 5){ + startRaceIfAllDataReceived(); + } + break; case REGATTA_XML: regattaData = XMLParser.parseRegatta( StreamParser.extractXmlMessage(packet) ); + raceState.setTimeZone( TimeZone.getTimeZone( ZoneId.ofOffset("UTC", ZoneOffset.ofHours(regattaData.getUtcOffset())) @@ -189,6 +200,7 @@ public class GameClient { case RACE_START_STATUS: raceState.updateState(StreamParser.extractRaceStartStatus(packet)); + if (lobbyController != null) lobbyController.updateRaceState(raceState); break; case BOAT_LOCATION: diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java index 1a8b13e3..5f6af424 100644 --- a/src/main/java/seng302/visualiser/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java @@ -1,8 +1,7 @@ package seng302.visualiser.controllers; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; + import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; @@ -16,6 +15,8 @@ import javafx.scene.layout.GridPane; import javafx.scene.text.Text; import seng302.gameServer.GameStages; import seng302.gameServer.GameState; +import seng302.model.RaceState; +import seng302.visualiser.GameClient; /** * A class describing the actions of the lobby screen @@ -72,6 +73,12 @@ public class LobbyController { @FXML private ImageView eighthImageView; + @FXML + private Text timeUntilStart; + + @FXML + private Text courseNameText; + private List> competitors = new ArrayList<>(); private ObservableList firstCompetitor = FXCollections.observableArrayList(); private ObservableList secondCompetitor = FXCollections.observableArrayList(); @@ -84,6 +91,7 @@ public class LobbyController { private List imageViews = new ArrayList<>(); private List listViews; + private RaceState raceState; private int MAX_NUM_PLAYERS = 8; @@ -103,6 +111,8 @@ public class LobbyController { fourthCompetitor, fifthCompetitor, sixthCompetitor, seventhCompetitor, eighthCompetitor); initialiseImageView(); + + timeUntilStart.setText(""); } private void initialiseListView() { @@ -149,9 +159,12 @@ public class LobbyController { @FXML public void readyButtonPressed() { - GameState.setCurrentStage(GameStages.RACING); - for (LobbyCloseListener readyListener : lobbyListeners) - readyListener.notify(CloseStatus.READY); + GameState.setCurrentStage(GameStages.PRE_RACE); + return; + // Do countdown logic here + + //for (LobbyCloseListener readyListener : lobbyListeners) + // readyListener.notify(CloseStatus.READY); } @@ -184,6 +197,10 @@ public class LobbyController { lobbyIpText.setText(title); } + public void setCourseName(String courseName){ + courseNameText.setText(courseName); + } + public void addCloseListener(LobbyCloseListener listener) { lobbyListeners.add(listener); } @@ -196,6 +213,12 @@ public class LobbyController { Platform.runLater(this::initialiseListView); } + public void updateRaceState(RaceState raceState){ + System.out.println(raceState.getTimeTillStart()); + this.raceState = raceState; + timeUntilStart.setText(raceState.getTimeTillStartStr()); + } + public void disableReadyButton () { readyButton.setDisable(true); } diff --git a/src/main/resources/views/LobbyView.fxml b/src/main/resources/views/LobbyView.fxml index 96a71574..c6f10528 100644 --- a/src/main/resources/views/LobbyView.fxml +++ b/src/main/resources/views/LobbyView.fxml @@ -1,6 +1,11 @@ - + + + + + + @@ -11,6 +16,7 @@ + @@ -21,11 +27,6 @@ - - - - - @@ -130,5 +131,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + From 8ec649062727bd7882183f14f31fa1caf4c7b9e0 Mon Sep 17 00:00:00 2001 From: Kusal Ekanayake Date: Sun, 13 Aug 2017 17:02:35 +1200 Subject: [PATCH 03/27] Started trying to get the zoomed in gave view to follow the boat. Can easily make the boat stay put at the origin. can make it perfectly center, also weary of the weird jittery effect that is present when tracking. Tracking is active when the zoom scale is greater than 1. #story[1121] --- .../java/seng302/visualiser/GameClient.java | 3 +- .../java/seng302/visualiser/GameView.java | 31 +++++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index cf4590ca..6246eef3 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -215,6 +215,7 @@ public class GameClient { * Updates the position of a boat. Boat and position are given in the provided data. */ private void updatePosition(PositionUpdateData positionData) { + raceView.getGameView().trackBoat(); if (positionData.getType() == DeviceType.YACHT_TYPE) { if (allXMLReceived() && allBoatsMap.containsKey(positionData.getDeviceId())) { Yacht yacht = allBoatsMap.get(positionData.getDeviceId()); @@ -306,11 +307,9 @@ public class GameClient { //TODO Allow a zoom in and zoom out methods case Z: // zoom in raceView.getGameView().zoomIn(); - System.out.println("Zoom in"); break; case X: // zoom out raceView.getGameView().zoomOut(); - System.out.println("Zoom out"); break; } } diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java index 1f0a6ceb..f984186a 100644 --- a/src/main/java/seng302/visualiser/GameView.java +++ b/src/main/java/seng302/visualiser/GameView.java @@ -88,15 +88,15 @@ public class GameView extends Pane { double scaleFactor = 1; public void zoomOut() { - scaleFactor = 0.95; - this.setScaleX(this.getScaleX() * scaleFactor); - this.setScaleY(this.getScaleY() * scaleFactor); + scaleFactor = 0.05; + this.setScaleX(this.getScaleX() - scaleFactor); + this.setScaleY(this.getScaleY() - scaleFactor); } public void zoomIn() { - scaleFactor = 1.05; - this.setScaleX(this.getScaleX() * scaleFactor); - this.setScaleY(this.getScaleY() * scaleFactor); + scaleFactor = 0.05; + this.setScaleX(this.getScaleX() + scaleFactor); + this.setScaleY(this.getScaleY() + scaleFactor); } private enum ScaleDirection { @@ -104,6 +104,25 @@ public class GameView extends Pane { VERTICAL } + public void trackBoat() { + if (this.getScaleX() > 1) { + double x = boatObjects.get(playerYacht).getBoatLayoutX(); + double y = boatObjects.get(playerYacht).getBoatLayoutY(); +// System.out.println("x = " + x); +// System.out.println("y = " + y); +// this.setRotate(-playerYacht.getHeading()); + Point2D displacementX = findScaledXY(maxLonPoint); + Point2D displacementY = findScaledXY(maxLatPoint); + this.setLayoutX(-x + 250 + canvasWidth/2); + this.setLayoutY(-y + canvasHeight/2); + } else { + this.setLayoutX(0); + this.setLayoutY(0); + } + System.out.println("boatObjects = " + boatObjects.get(playerYacht).getBoatLayoutX()); + System.out.println("boatObjects = " + boatObjects.get(playerYacht).getBoatLayoutY()); + } + public GameView () { gameObjects = this.getChildren(); // create image view for map, bind panel size to image From 0b978593d49b5806488ec274c459895232aa7ef8 Mon Sep 17 00:00:00 2001 From: Zhi You Tan Date: Sun, 13 Aug 2017 18:52:42 +1200 Subject: [PATCH 04/27] Solved the fps counter zoom together with canvas problem. Workaround used was changing fps counter on game view to race view. #story[1117] #pair[ptg19, zyt10] --- .../java/seng302/visualiser/GameClient.java | 1 - .../java/seng302/visualiser/GameView.java | 13 +++++---- .../controllers/RaceViewController.java | 3 ++ src/main/resources/views/RaceView.fxml | 29 ++++++++++++++++++- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index 6246eef3..67a18a4b 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -174,7 +174,6 @@ public class GameClient { break; case BOAT_XML: - System.out.println("GOT SUM BOATS YAY :)"); allBoatsMap = XMLParser.parseBoats( StreamParser.extractXmlMessage(packet) ); diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java index f984186a..920939c2 100644 --- a/src/main/java/seng302/visualiser/GameView.java +++ b/src/main/java/seng302/visualiser/GameView.java @@ -119,18 +119,14 @@ public class GameView extends Pane { this.setLayoutX(0); this.setLayoutY(0); } - System.out.println("boatObjects = " + boatObjects.get(playerYacht).getBoatLayoutX()); - System.out.println("boatObjects = " + boatObjects.get(playerYacht).getBoatLayoutY()); +// System.out.println("boatObjects = " + boatObjects.get(playerYacht).getBoatLayoutX()); +// System.out.println("boatObjects = " + boatObjects.get(playerYacht).getBoatLayoutY()); } public GameView () { gameObjects = this.getChildren(); // create image view for map, bind panel size to image gameObjects.add(mapImage); - fpsDisplay.setLayoutX(5); - fpsDisplay.setLayoutY(20); - fpsDisplay.setStrokeWidth(2); - gameObjects.add(fpsDisplay); gameObjects.add(raceBorder); gameObjects.add(markers); initializeTimer(); @@ -631,4 +627,9 @@ public class GameView extends Pane { }); } + + public void setFrameRateFXText(Text fpsDisplay) { + this.fpsDisplay = null; + this.fpsDisplay = fpsDisplay; + } } diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 4130f536..1a3f572c 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -71,6 +71,8 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel private Button selectAnnotationBtn; @FXML private ComboBox yachtSelectionComboBox; + @FXML + private Text fpsDisplay; //Race Data private Map participants; @@ -115,6 +117,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel initialiseSparkLine(); gameView = new GameView(); + gameView.setFrameRateFXText(fpsDisplay); Platform.runLater(() -> contentAnchorPane.getChildren().add(0, gameView)); gameView.setBoats(new ArrayList<>(participants.values())); gameView.updateBorder(raceData.getCourseLimit()); diff --git a/src/main/resources/views/RaceView.fxml b/src/main/resources/views/RaceView.fxml index 0d004b90..d00f0099 100644 --- a/src/main/resources/views/RaceView.fxml +++ b/src/main/resources/views/RaceView.fxml @@ -26,7 +26,34 @@ - + + + + + + + + + + + + + + + + + +