diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java index 8b82d55b..9465aae6 100644 --- a/src/main/java/seng302/visualiser/GameView.java +++ b/src/main/java/seng302/visualiser/GameView.java @@ -11,6 +11,8 @@ import javafx.animation.KeyFrame; import javafx.animation.KeyValue; import javafx.animation.Timeline; import javafx.application.Platform; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; import javafx.collections.ObservableList; import javafx.geometry.Point2D; import javafx.scene.Group; @@ -25,6 +27,7 @@ import javafx.scene.paint.Paint; import javafx.scene.shape.Circle; import javafx.scene.shape.Polygon; import javafx.scene.text.Text; +import javafx.scene.transform.Scale; import javafx.util.Duration; import seng302.gameServer.messages.RoundingSide; import seng302.model.ClientYacht; @@ -51,7 +54,7 @@ import seng302.visualiser.map.CanvasMap; public class GameView extends Pane { private double bufferSize = 50; - private double panelWidth = 1260; // it should be 1280 but, minors 40 to cancel the bias. + private double panelWidth = 1280; private double panelHeight = 960; private double canvasWidth = 1100; private double canvasHeight = 920; @@ -63,7 +66,6 @@ public class GameView extends Pane { private double referencePointX, referencePointY; private double metersPerPixelX, metersPerPixelY; - final double SCALE_DELTA = 1.1; private boolean isZoom = false; private Text fpsDisplay = new Text(); @@ -110,7 +112,7 @@ public class GameView extends Pane { } private void zoomIn() { - scaleFactor = 0.10; + scaleFactor = 0.1; if (this.isZoom && this.getScaleX() < 2.5) { this.setScaleX(this.getScaleX() + scaleFactor); this.setScaleY(this.getScaleY() + scaleFactor); @@ -152,6 +154,40 @@ public class GameView extends Pane { disableZoom(); } })); + + this.widthProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Number oldValue, + Number newValue) { + scaleFactor = getWidth() / panelWidth; + + if (panelHeight * scaleFactor < getHeight()) { + Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0); + getTransforms().remove(0, getTransforms().size()); + getTransforms().add(scale); + + setPrefWidth(getWidth() / scaleFactor); + setPrefHeight(getHeight() / scaleFactor); + } + } + }); + + this.heightProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Number oldValue, + Number newValue) { + scaleFactor = getHeight() / panelHeight; + + if (panelWidth * scaleFactor < getWidth()) { + Scale scale = new Scale(scaleFactor, scaleFactor, 0, 0); + getTransforms().remove(0, getTransforms().size()); + getTransforms().add(scale); + + setPrefWidth(getWidth() / scaleFactor); + setPrefHeight(getHeight() / scaleFactor); + } + } + }); } private void initializeTimer() { diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 5c33ba09..48a91eee 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -27,7 +27,7 @@ import javafx.scene.control.CheckBox; import javafx.scene.control.ComboBox; import javafx.scene.control.Slider; import javafx.scene.control.TextField; -import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; @@ -43,7 +43,6 @@ import seng302.model.RaceState; import seng302.model.mark.CompoundMark; import seng302.model.mark.Mark; import seng302.model.stream.xml.parser.RaceXMLData; -import seng302.model.token.Token; import seng302.utilities.Sounds; import seng302.visualiser.GameView; import seng302.visualiser.controllers.annotations.Annotation; @@ -79,7 +78,7 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel @FXML private Text timerLabel; @FXML - private AnchorPane contentAnchorPane; + private GridPane contentGridPane; @FXML private Text windArrowText, windDirectionText; @FXML @@ -115,9 +114,9 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel importantAnnotations = new ImportantAnnotationsState(); //Formatting the y axis of the sparkline - raceSparkLine.getYAxis().setRotate(180); - raceSparkLine.getYAxis().setTickLabelRotation(180); - raceSparkLine.getYAxis().setTranslateX(-5); +// raceSparkLine.getYAxis().setRotate(180); +// raceSparkLine.getYAxis().setTickLabelRotation(180); +// raceSparkLine.getYAxis().setTranslateX(-5); raceSparkLine.visibleProperty().setValue(false); raceSparkLine.getYAxis().setAutoRanging(false); sparklineYAxis.setTickMarkVisible(false); @@ -142,8 +141,8 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel // chatHistory.textProperty().addListener((obs, oldValue, newValue) -> { // chatHistory.setScrollTop(Double.MAX_VALUE); // }); - contentAnchorPane.setOnMouseClicked((event) -> - contentAnchorPane.requestFocus() + contentGridPane.setOnMouseClicked((event) -> + contentGridPane.requestFocus() ); } @@ -168,12 +167,12 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel updateOrder(raceState.getPlayerPositions()); gameView = new GameView(); gameView.setFrameRateFXText(fpsDisplay); - Platform.runLater(() -> contentAnchorPane.getChildren().add(0, gameView)); - gameView.setBoats(new ArrayList<>(participants.values())); - gameView.updateBorder(raceData.getCourseLimit()); - gameView.updateTokens(raceData.getTokens()); - gameView.updateCourse( - new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence() + Platform.runLater(() -> contentGridPane.getChildren().add(0, gameView)); + gameView.setBoats(new ArrayList<>(participants.values())); + gameView.updateBorder(raceData.getCourseLimit()); + gameView.updateTokens(raceData.getTokens()); + gameView.updateCourse( + new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence() ); gameView.setBoatAsPlayer(player); gameView.startRace(); @@ -590,9 +589,9 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/FinishView.fxml")); try { - contentAnchorPane.getChildren().removeAll(); - contentAnchorPane.getChildren().clear(); - contentAnchorPane.getChildren().addAll((Pane) loader.load()); + contentGridPane.getChildren().removeAll(); + contentGridPane.getChildren().clear(); + contentGridPane.getChildren().addAll((Pane) loader.load()); } catch (javafx.fxml.LoadException e) { System.err.println(e.getCause().toString()); diff --git a/src/main/resources/views/RaceView.fxml b/src/main/resources/views/RaceView.fxml index 9acfb887..b04311c0 100644 --- a/src/main/resources/views/RaceView.fxml +++ b/src/main/resources/views/RaceView.fxml @@ -1,97 +1,186 @@ + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - -