From da3613fe360500619a701192cd24a496c9f8f658 Mon Sep 17 00:00:00 2001 From: Calum Date: Tue, 12 Sep 2017 14:48:30 +1200 Subject: [PATCH] Split off marker classes. --- .../java/seng302/visualiser/GameView.java | 15 ++++++----- .../controllers/cells/PlayerCell.java | 27 ------------------- .../Marker.java => assets_3D/Marker3D.java} | 15 +++++------ .../fxObjects/assets_3D/ModelFactory.java | 26 +++++++++++++++--- 4 files changed, 37 insertions(+), 46 deletions(-) rename src/main/java/seng302/visualiser/fxObjects/{assets_2D/Marker.java => assets_3D/Marker3D.java} (88%) diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java index eb42c8e7..a866976d 100644 --- a/src/main/java/seng302/visualiser/GameView.java +++ b/src/main/java/seng302/visualiser/GameView.java @@ -28,6 +28,7 @@ import seng302.model.token.Token; import seng302.utilities.GeoUtility; import seng302.utilities.Sounds; import seng302.visualiser.fxObjects.assets_2D.*; +import seng302.visualiser.fxObjects.assets_3D.Marker3D; import seng302.visualiser.fxObjects.assets_3D.ModelFactory; import seng302.visualiser.fxObjects.assets_3D.ModelType; import seng302.visualiser.map.Boundary; @@ -63,7 +64,7 @@ public class GameView extends Pane { /* Note that if either of these is null then values for it have not been added and the other should be used as the limits of the map. */ private List borderPoints; - private Map markerObjects; + private Map markerObjects; private Map boatObjects = new HashMap<>(); private Map annotations = new HashMap<>(); @@ -342,10 +343,10 @@ public class GameView extends Pane { rescaleRace(new ArrayList<>(markerObjects.keySet())); } //Move the Markers to initial position. - markerObjects.forEach(((mark, marker) -> { + markerObjects.forEach(((mark, marker3D) -> { Point2D p2d = findScaledXY(mark.getLat(), mark.getLng()); - marker.setLayoutX(p2d.getX()); - marker.setLayoutY(p2d.getY()); + marker3D.setLayoutX(p2d.getX()); + marker3D.setLayoutY(p2d.getY()); })); Platform.runLater(() -> { markers.getChildren().clear(); @@ -435,9 +436,9 @@ public class GameView extends Pane { * @param colour The desired colour of the mark */ private void makeAndBindMarker(Mark observableMark, Paint colour) { - Marker marker = new Marker(colour); + Marker3D marker3D = new Marker3D(colour); // marker.addArrows(MarkArrowFactory.RoundingSide.PORT, ThreadLocalRandom.current().nextDouble(91, 180), ThreadLocalRandom.current().nextDouble(1, 90)); - markerObjects.put(observableMark, marker); + markerObjects.put(observableMark, marker3D); observableMark.addPositionListener((mark, lat, lon) -> { Point2D p2d = findScaledXY(lat, lon); markerObjects.get(mark).setLayoutX(p2d.getX()); @@ -453,7 +454,7 @@ public class GameView extends Pane { * @param colour The desired colour of the gate. * @return the new gate. */ - private Gate makeAndBindGate(Marker m1, Marker m2, Paint colour) { + private Gate makeAndBindGate(Marker3D m1, Marker3D m2, Paint colour) { Gate gate = new Gate(colour); gate.startXProperty().bind( m1.layoutXProperty() diff --git a/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java b/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java index db8e1cd4..c960afa9 100644 --- a/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java +++ b/src/main/java/seng302/visualiser/controllers/cells/PlayerCell.java @@ -1,17 +1,12 @@ package seng302.visualiser.controllers.cells; -import javafx.animation.AnimationTimer; import javafx.fxml.FXML; -import javafx.geometry.Point3D; import javafx.scene.Group; import javafx.scene.control.Label; import javafx.scene.input.MouseEvent; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; -import javafx.scene.transform.Rotate; -import javafx.scene.transform.Scale; -import javafx.scene.transform.Translate; import seng302.utilities.Sounds; import seng302.visualiser.fxObjects.assets_3D.BoatMeshType; import seng302.visualiser.fxObjects.assets_3D.BoatModel; @@ -29,7 +24,6 @@ public class PlayerCell { //---------FXML END---------// private String name; - private Integer boatAngle; private Color boatColor; private Integer playerId; @@ -37,34 +31,13 @@ public class PlayerCell { this.playerId = playerId; this.name = playerName; this.boatColor = color; - this.boatAngle = -45; } public void initialize() { playerName.setText(name); - Group group = new Group(); boatPane.getChildren().add(group); - BoatModel bo = ModelFactory.boatIconView(BoatMeshType.DINGHY, this.boatColor); - bo.showSail(); - bo.rotateSail(45); - bo.getAssets().getTransforms().setAll( - new Scale(4, 4, 4), - new Translate(12, 14, 0), - new Rotate(270, new Point3D(1, 0, 0)), - new Rotate(-45, new Point3D(0, 0, 1)) - ); - - bo.setAnimation(new AnimationTimer() { - Group group = bo.getAssets(); - - @Override - public void handle(long now) { - ((Rotate) group.getTransforms().get(3)).setAngle(boatAngle++); - } - }); - group.getChildren().add(bo.getAssets()); } diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_2D/Marker.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/Marker3D.java similarity index 88% rename from src/main/java/seng302/visualiser/fxObjects/assets_2D/Marker.java rename to src/main/java/seng302/visualiser/fxObjects/assets_3D/Marker3D.java index 2a055d61..b19b9e73 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_2D/Marker.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/Marker3D.java @@ -1,4 +1,4 @@ -package seng302.visualiser.fxObjects.assets_2D; +package seng302.visualiser.fxObjects.assets_3D; import java.util.ArrayList; import java.util.List; @@ -6,15 +6,14 @@ import javafx.application.Platform; import javafx.scene.Group; import javafx.scene.paint.Color; import javafx.scene.paint.Paint; -import javafx.scene.shape.Circle; import javafx.scene.transform.Scale; -import seng302.visualiser.fxObjects.assets_3D.ModelFactory; -import seng302.visualiser.fxObjects.assets_3D.ModelType; +import seng302.visualiser.fxObjects.assets_2D.MarkArrowFactory; +import seng302.visualiser.fxObjects.assets_2D.MarkArrowFactory.RoundingSide; /** * Visual object for a mark. Contains a coloured circle and any specified arrows. */ -public class Marker extends Group { +public class Marker3D extends Group { private Group mark = ModelFactory.importModel(ModelType.PLAIN_MARKER).getAssets(); private Paint colour = Color.BLACK; @@ -26,7 +25,7 @@ public class Marker extends Group { /** * Creates a new Marker containing only a circle. The default colour is black. */ - public Marker() { + public Marker3D() { // mark.setRadius(5); // mark.setCenterX(0); // mark.setCenterY(0); @@ -40,7 +39,7 @@ public class Marker extends Group { * Creates a new Marker containing only a circle of the given colour. * @param colour the desired colour for the marker. */ - public Marker(Paint colour) { + public Marker3D(Paint colour) { this(); this.colour = colour; // mark.setFill(colour); @@ -53,7 +52,7 @@ public class Marker extends Group { * @param entryAngle The angle the arrow will point towards a marker * @param exitAngle The angle the arrow wil point from the marker. */ - public void addArrows(MarkArrowFactory.RoundingSide roundingSide, double entryAngle, + public void addArrows(RoundingSide roundingSide, double entryAngle, double exitAngle) { //Change Color.GRAY to this.colour to revert all gray arrows. enterArrows.add( diff --git a/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java b/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java index 7ae2ca7a..a95d458f 100644 --- a/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java +++ b/src/main/java/seng302/visualiser/fxObjects/assets_3D/ModelFactory.java @@ -2,6 +2,7 @@ package seng302.visualiser.fxObjects.assets_3D; import com.interactivemesh.jfx.importer.col.ColModelImporter; import com.interactivemesh.jfx.importer.stl.StlMeshImporter; +import java.util.Random; import javafx.animation.AnimationTimer; import javafx.geometry.Point3D; import javafx.scene.AmbientLight; @@ -22,12 +23,29 @@ public class ModelFactory { public static BoatModel boatIconView(BoatMeshType boatType, Color primaryColour) { Group boatAssets = getUnmodifiedBoatModel(boatType, primaryColour); boatAssets.getTransforms().addAll( - new Scale(20, 20, 20), - new Rotate(90, new Point3D(0,0,1)), - new Rotate(90, new Point3D(0, 1, 0)) + new Scale(10, 10, 10), + new Rotate(45, new Point3D(0,0,1)), + new Rotate(90, new Point3D(0, 1, 0)), + new Rotate(270, new Point3D(1, 0, 0)), + new Translate(12, 14, 0) ); + + BoatModel bo = new BoatModel(boatAssets, null, boatType); + bo.showSail(); + bo.rotateSail(45); + bo.setAnimation(new AnimationTimer() { + Group group = bo.getAssets(); + double boatAngle = 0; + int id = new Random().nextInt(); + + @Override + public void handle(long now) { + ((Rotate) group.getTransforms().get(3)).setAngle(boatAngle++); + System.out.println("animating a thingy " + id); + } + }); boatAssets.getChildren().add(new AmbientLight(new Color(1, 1, 1, 0.01))); - return new BoatModel(boatAssets, null, boatType); + return bo; } public static BoatModel boatRotatingView(BoatMeshType boatType, Color primaryColour) {