From 85899e3fbe25a6240a11d4d45efb8663785fc577 Mon Sep 17 00:00:00 2001 From: Calum Date: Wed, 16 Aug 2017 21:11:34 +1200 Subject: [PATCH] Merged with develop functionality. --- .../java/seng302/gameServer/GameState.java | 16 +++++++------- .../seng302/gameServer/MainServerThread.java | 9 ++++++-- src/main/java/seng302/model/RaceState.java | 14 ++++++++----- .../java/seng302/visualiser/GameClient.java | 7 ------- .../java/seng302/visualiser/GameView.java | 21 +++++++++++++++++-- .../controllers/RaceViewController.java | 1 + 6 files changed, 45 insertions(+), 23 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 9a3aa737..527656ba 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -10,13 +10,15 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import seng302.gameServer.server.messages.BoatAction; -import seng302.gameServer.server.messages.BoatStatus; -import seng302.gameServer.server.messages.MarkRoundingMessage; -import seng302.gameServer.server.messages.MarkType; -import seng302.gameServer.server.messages.Message; -import seng302.gameServer.server.messages.RoundingBoatStatus; -import seng302.gameServer.server.messages.YachtEventCodeMessage; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import seng302.gameServer.messages.BoatAction; +import seng302.gameServer.messages.BoatStatus; +import seng302.gameServer.messages.MarkRoundingMessage; +import seng302.gameServer.messages.MarkType; +import seng302.gameServer.messages.Message; +import seng302.gameServer.messages.RoundingBoatStatus; +import seng302.gameServer.messages.YachtEventCodeMessage; import seng302.model.GeoPoint; import seng302.model.Limit; import seng302.model.Player; diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 51c58b01..95724c98 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -1,6 +1,5 @@ package seng302.gameServer; -import gherkin.lexer.Fi; import java.io.IOException; import java.net.ServerSocket; import java.time.LocalDateTime; @@ -8,7 +7,13 @@ import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; -import seng302.gameServer.server.messages.*; +import seng302.gameServer.messages.BoatSubMessage; +import seng302.gameServer.messages.Message; +import seng302.gameServer.messages.RaceStartNotificationType; +import seng302.gameServer.messages.RaceStartStatusMessage; +import seng302.gameServer.messages.RaceStatus; +import seng302.gameServer.messages.RaceStatusMessage; +import seng302.gameServer.messages.RaceType; import seng302.model.GeoPoint; import seng302.model.Player; import seng302.model.PolarTable; diff --git a/src/main/java/seng302/model/RaceState.java b/src/main/java/seng302/model/RaceState.java index af7b8d9b..303a5d02 100644 --- a/src/main/java/seng302/model/RaceState.java +++ b/src/main/java/seng302/model/RaceState.java @@ -23,8 +23,8 @@ public class RaceState { // private final DateFormat DATE_TIME_FORMAT = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); private final DateFormat DATE_TIME_FORMAT = new SimpleDateFormat("HH:mm:ss"); - private double windSpeed; - private double windDirection; + private ReadOnlyDoubleWrapper windSpeed = new ReadOnlyDoubleWrapper(); + private ReadOnlyDoubleWrapper windDirection = new ReadOnlyDoubleWrapper(); private long serverSystemTime; private long expectedStartTime; private boolean isRaceStarted = false; @@ -36,8 +36,8 @@ public class RaceState { } public void updateState (RaceStatusData data) { - this.windSpeed = data.getWindSpeed(); - this.windDirection = data.getWindDirection(); + this.windSpeed.set(data.getWindSpeed()); + this.windDirection.set(data.getWindDirection()); this.serverSystemTime = data.getCurrentTime(); this.expectedStartTime = data.getExpectedStartTime(); this.isRaceStarted = data.isRaceStarted(); @@ -65,7 +65,11 @@ public class RaceState { } public double getWindSpeed() { - return windSpeed; + return windSpeed.doubleValue(); + } + + public ReadOnlyDoubleProperty windSpeedProperty() { + return windSpeed.getReadOnlyProperty(); } public ReadOnlyDoubleProperty windDirectionProperty() { diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index 634eee26..7839569b 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -369,13 +369,6 @@ public class GameClient { socketThread.sendBoatAction(BoatAction.DOWNWIND); break; case ENTER: // tack/gybe socketThread.sendBoatAction(BoatAction.TACK_GYBE); break; - //TODO Allow a zoom in and zoom out methods - case Z: // zoom in - raceView.getGameView().zoomIn(); - break; - case X: // zoom out - raceView.getGameView().zoomOut(); - break; } } diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java index 5927349c..86748f7e 100644 --- a/src/main/java/seng302/visualiser/GameView.java +++ b/src/main/java/seng302/visualiser/GameView.java @@ -16,6 +16,8 @@ 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.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; @@ -96,7 +98,7 @@ public class GameView extends Pane { double scaleFactor = 1; - public void zoomOut() { + private void zoomOut() { scaleFactor = 0.1; if (this.getScaleX() > 0.5) { this.setScaleX(this.getScaleX() - scaleFactor); @@ -104,7 +106,7 @@ public class GameView extends Pane { } } - public void zoomIn() { + private void zoomIn() { scaleFactor = 0.10; if (this.getScaleX() < 2.5) { this.setScaleX(this.getScaleX() + scaleFactor); @@ -447,6 +449,21 @@ public class GameView extends Pane { raceBorder.getPoints().setAll(boundaryPoints); } + // TODO: 16/08/17 initialize zooming internal to GameView only + /** + * Enables zoom. Has to be called after this is added to a scene. + */ + public void enableZoom () { + if (this.getScene() != null) { + this.getScene().addEventHandler(KeyEvent.KEY_PRESSED, (event) -> { + if (event.getCode() == KeyCode.Z) { + zoomIn(); + } else if (event.getCode() == KeyCode.X) { + zoomOut(); + } + }); + } + } /** * Rescales the race to the size of the window. * diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 9d0003a0..802bde7d 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -123,6 +123,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel gameView.updateCourse( new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence() ); + gameView.enableZoom(); gameView.setBoatAsPlayer(player); gameView.startRace(); raceState.addCollisionListener(gameView::drawCollision);