From 1b1b0a45914dcfa5808aeaec23b10744f07dc39d Mon Sep 17 00:00:00 2001 From: cbt24 Date: Tue, 29 Aug 2017 14:38:27 +1200 Subject: [PATCH 01/19] Added floating test cube in title screen initialiser #story[1191] --- .../Controllers/TitleController.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java b/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java index 32e033c8..45ab295d 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/TitleController.java @@ -1,12 +1,18 @@ package visualiser.Controllers; +import javafx.animation.AnimationTimer; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; +import javafx.scene.Group; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.RadioButton; import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.Pane; +import javafx.scene.shape.Box; +import javafx.scene.shape.CullFace; +import javafx.scene.transform.Rotate; import javafx.stage.Modality; import javafx.stage.Stage; import visualiser.app.App; @@ -32,6 +38,8 @@ public class TitleController extends Controller { @FXML RadioButton nightModeRD; + Group group3d; + /** * Method called when the 'host a game' button is pressed. * Opens the next window allowing a user to host their own game. @@ -81,7 +89,31 @@ public class TitleController extends Controller { @Override public void initialize(URL location, ResourceBundle resources) { + System.out.println("Initializing..."); + + Box box = new Box(50,50,50); + box.setTranslateX(100); + box.setTranslateY(100); + box.setCullFace(CullFace.BACK); + + Rotate ry = new Rotate(0, 0,0,0, Rotate.Y_AXIS); + Rotate rx = new Rotate(20, 0, 0, 0, Rotate.X_AXIS); + box.getTransforms().add(ry); + box.getTransforms().add(rx); + + group3d = new Group(box); + + titleWrapper.getChildren().add(0, group3d); + group3d.toFront(); + + AnimationTimer rotation = new AnimationTimer() { + @Override + public void handle(long now) { + ry.setAngle(ry.getAngle() + 0.1); + } + }; + rotation.start(); } /** From c63403d1de6b5c51ff061c3b9798e55acc55e0f7 Mon Sep 17 00:00:00 2001 From: David Wu Date: Tue, 29 Aug 2017 15:11:09 +1200 Subject: [PATCH 02/19] Created new lobby menu. Working on animated background for menu. --- .../Controllers/HostController.java | 39 +++++- .../visualiser/model/SpriteAnimation.java | 53 ++++++++ .../resources/visualiser/scenes/hostgame.fxml | 82 ++++++------ .../resources/visualiser/scenes/main.fxml | 2 +- .../resources/visualiser/scenes/title.fxml | 120 +++++++++--------- 5 files changed, 189 insertions(+), 107 deletions(-) create mode 100644 racevisionGame/src/main/java/visualiser/model/SpriteAnimation.java diff --git a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java index 1609e700..9c994f77 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java @@ -1,8 +1,14 @@ package visualiser.Controllers; +import javafx.animation.Animation; +import javafx.application.Platform; import javafx.fxml.FXML; +import javafx.geometry.Rectangle2D; import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; +import javafx.util.Duration; import mock.app.Event; import org.xml.sax.SAXException; import mock.exceptions.EventConstructionException; @@ -10,6 +16,7 @@ import shared.exceptions.InvalidBoatDataException; import shared.exceptions.InvalidRaceDataException; import shared.exceptions.InvalidRegattaDataException; import shared.exceptions.XMLReaderException; +import visualiser.model.SpriteAnimation; import javax.xml.bind.JAXBException; import javax.xml.parsers.ParserConfigurationException; @@ -25,12 +32,22 @@ import java.util.logging.Logger; */ public class HostController extends Controller { + private static final int COLUMNS = 4; + private static final int COUNT = 10; + private static final int OFFSET_X = 18; + private static final int OFFSET_Y = 25; + private static final int WIDTH = 374; + private static final int HEIGHT = 243; - @FXML - TextField gameNameField; + +// @FXML +// TextField gameNameField; +// +// @FXML +// TextField hostNameField; @FXML - TextField hostNameField; + private ImageView imageView; @FXML AnchorPane hostWrapper; @@ -81,12 +98,20 @@ public class HostController extends Controller { * Hosts a game. */ public void hostGame(){ + + Platform.runLater(() -> { + imageView.setImage(new Image("https://media.tenor.com/images/3059eba221c9537eff1cf84ff4eabffc/tenor.gif")); + imageView.setViewport(new Rectangle2D(OFFSET_X, OFFSET_Y, WIDTH, HEIGHT)); + final Animation animation = new SpriteAnimation(imageView, Duration.millis(250), COUNT, COLUMNS, OFFSET_X, OFFSET_Y, WIDTH, HEIGHT); + animation.setCycleCount(Animation.INDEFINITE); + animation.play(); + }); hostWrapper.setVisible(true); } - public void menuBtnPressed(){ - hostWrapper.setVisible(false); - parent.enterTitle(); - } +// public void menuBtnPressed(){ +// hostWrapper.setVisible(false); +// parent.enterTitle(); +// } } diff --git a/racevisionGame/src/main/java/visualiser/model/SpriteAnimation.java b/racevisionGame/src/main/java/visualiser/model/SpriteAnimation.java new file mode 100644 index 00000000..6714c72a --- /dev/null +++ b/racevisionGame/src/main/java/visualiser/model/SpriteAnimation.java @@ -0,0 +1,53 @@ +package visualiser.model; + +import javafx.animation.Interpolator; +import javafx.animation.Transition; +import javafx.geometry.Rectangle2D; +import javafx.scene.image.ImageView; +import javafx.util.Duration; + + + + +/** + * Created by zwu18 on 29/08/17. + */ +public class SpriteAnimation extends Transition { + + private final ImageView imageView; + private final int count; + private final int columns; + private final int offsetX; + private final int offsetY; + private final int width; + private final int height; + + private int lastIndex; + + public SpriteAnimation( + ImageView imageView, + Duration duration, + int count, int columns, + int offsetX, int offsetY, + int width, int height) { + this.imageView = imageView; + this.count = count; + this.columns = columns; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.width = width; + this.height = height; + setCycleDuration(duration); + setInterpolator(Interpolator.LINEAR); + } + + protected void interpolate(double k) { + final int index = Math.min((int) Math.floor(k * count), count - 1); + if (index != lastIndex) { + final int x = (index % columns) * width + offsetX; + final int y = (index / columns) * height + offsetY; + imageView.setViewport(new Rectangle2D(x, y, width, height)); + lastIndex = index; + } + } +} diff --git a/racevisionGame/src/main/resources/visualiser/scenes/hostgame.fxml b/racevisionGame/src/main/resources/visualiser/scenes/hostgame.fxml index ced36627..ab14abaf 100644 --- a/racevisionGame/src/main/resources/visualiser/scenes/hostgame.fxml +++ b/racevisionGame/src/main/resources/visualiser/scenes/hostgame.fxml @@ -1,40 +1,44 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0621e1bdb125d180b264032b0a1eab47fc0c9529 Mon Sep 17 00:00:00 2001 From: David Wu Date: Tue, 29 Aug 2017 19:02:02 +1200 Subject: [PATCH 03/19] Finished up lobby menu. Set split pane to not change size on resize. Disabled divider on split pane. Added quit button and start button (start only prints to terminal for now). Panes are now wrapped in an anchor pane to fix resizing issues. TODO: Will be working on making a nicer background animation. --- .../Controllers/HostController.java | 67 +++++++++---------- .../src/main/java/visualiser/app/App.java | 6 +- .../visualiser/model/SpriteAnimation.java | 53 --------------- 3 files changed, 36 insertions(+), 90 deletions(-) delete mode 100644 racevisionGame/src/main/java/visualiser/model/SpriteAnimation.java diff --git a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java index 9c994f77..8998a02c 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java @@ -1,28 +1,18 @@ package visualiser.Controllers; -import javafx.animation.Animation; -import javafx.application.Platform; import javafx.fxml.FXML; -import javafx.geometry.Rectangle2D; -import javafx.scene.control.TextField; -import javafx.scene.image.Image; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; +import javafx.scene.control.SplitPane; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; -import javafx.util.Duration; import mock.app.Event; -import org.xml.sax.SAXException; import mock.exceptions.EventConstructionException; -import shared.exceptions.InvalidBoatDataException; -import shared.exceptions.InvalidRaceDataException; -import shared.exceptions.InvalidRegattaDataException; -import shared.exceptions.XMLReaderException; -import visualiser.model.SpriteAnimation; - -import javax.xml.bind.JAXBException; -import javax.xml.parsers.ParserConfigurationException; + import java.io.IOException; import java.net.Socket; import java.net.URL; +import java.util.Optional; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; @@ -32,13 +22,6 @@ import java.util.logging.Logger; */ public class HostController extends Controller { - private static final int COLUMNS = 4; - private static final int COUNT = 10; - private static final int OFFSET_X = 18; - private static final int OFFSET_Y = 25; - private static final int WIDTH = 374; - private static final int HEIGHT = 243; - // @FXML // TextField gameNameField; @@ -52,6 +35,15 @@ public class HostController extends Controller { @FXML AnchorPane hostWrapper; + @FXML + AnchorPane imagePane; + + @FXML + SplitPane splitPane; + + @FXML + AnchorPane specPane; + private Event game; @@ -98,20 +90,27 @@ public class HostController extends Controller { * Hosts a game. */ public void hostGame(){ - - Platform.runLater(() -> { - imageView.setImage(new Image("https://media.tenor.com/images/3059eba221c9537eff1cf84ff4eabffc/tenor.gif")); - imageView.setViewport(new Rectangle2D(OFFSET_X, OFFSET_Y, WIDTH, HEIGHT)); - final Animation animation = new SpriteAnimation(imageView, Duration.millis(250), COUNT, COLUMNS, OFFSET_X, OFFSET_Y, WIDTH, HEIGHT); - animation.setCycleCount(Animation.INDEFINITE); - animation.play(); - }); + splitPane.setResizableWithParent(specPane, false); + splitPane.lookupAll(".split-pane-divider").stream().forEach(div -> div.setMouseTransparent(true)); + imageView.fitWidthProperty().bind(imagePane.widthProperty()); + imageView.fitHeightProperty().bind(imagePane.heightProperty()); hostWrapper.setVisible(true); } -// public void menuBtnPressed(){ -// hostWrapper.setVisible(false); -// parent.enterTitle(); -// } + public void menuBtnPressed(){ + Alert alert = new Alert(Alert.AlertType.CONFIRMATION); + alert.setTitle("Quitting race"); + alert.setContentText("Do you wish to quit the race?"); + alert.setHeaderText("You are about to quit the race"); + Optional result = alert.showAndWait(); + if(result.get() == ButtonType.OK){ + hostWrapper.setVisible(false); + parent.enterTitle(); + } + } + + public void startBtnPressed(){ + System.out.println("Should start the race. This button is only visible for the host"); + } } diff --git a/racevisionGame/src/main/java/visualiser/app/App.java b/racevisionGame/src/main/java/visualiser/app/App.java index eeae5a5d..31dcae24 100644 --- a/racevisionGame/src/main/java/visualiser/app/App.java +++ b/racevisionGame/src/main/java/visualiser/app/App.java @@ -96,15 +96,15 @@ public class App extends Application { ); updateMessage("Preparing ingredients . . ."); - Thread.sleep(1000); + Thread.sleep(200); for (int i = 0; i < burgerFilling.size(); i++) { - Thread.sleep(800); + Thread.sleep(100); updateProgress(i + 1, burgerFilling.size()); String nextFilling = burgerFilling.get(i); addedFilling.add(nextFilling); updateMessage("Adding the " + nextFilling + " . . ."); } - Thread.sleep(400); + Thread.sleep(100); updateMessage("Burger's done!"); return addedFilling; diff --git a/racevisionGame/src/main/java/visualiser/model/SpriteAnimation.java b/racevisionGame/src/main/java/visualiser/model/SpriteAnimation.java deleted file mode 100644 index 6714c72a..00000000 --- a/racevisionGame/src/main/java/visualiser/model/SpriteAnimation.java +++ /dev/null @@ -1,53 +0,0 @@ -package visualiser.model; - -import javafx.animation.Interpolator; -import javafx.animation.Transition; -import javafx.geometry.Rectangle2D; -import javafx.scene.image.ImageView; -import javafx.util.Duration; - - - - -/** - * Created by zwu18 on 29/08/17. - */ -public class SpriteAnimation extends Transition { - - private final ImageView imageView; - private final int count; - private final int columns; - private final int offsetX; - private final int offsetY; - private final int width; - private final int height; - - private int lastIndex; - - public SpriteAnimation( - ImageView imageView, - Duration duration, - int count, int columns, - int offsetX, int offsetY, - int width, int height) { - this.imageView = imageView; - this.count = count; - this.columns = columns; - this.offsetX = offsetX; - this.offsetY = offsetY; - this.width = width; - this.height = height; - setCycleDuration(duration); - setInterpolator(Interpolator.LINEAR); - } - - protected void interpolate(double k) { - final int index = Math.min((int) Math.floor(k * count), count - 1); - if (index != lastIndex) { - final int x = (index % columns) * width + offsetX; - final int y = (index / columns) * height + offsetY; - imageView.setViewport(new Rectangle2D(x, y, width, height)); - lastIndex = index; - } - } -} From 892320db5f8fffeca9e915bc218733cec7fbd014 Mon Sep 17 00:00:00 2001 From: David Wu Date: Tue, 29 Aug 2017 19:03:34 +1200 Subject: [PATCH 04/19] Added javadoc and extra files to push --- .../Controllers/HostController.java | 6 + .../resources/visualiser/images/lobby.gif | Bin 0 -> 18442 bytes .../visualiser/scenes/hostlobby.fxml | 180 ++++++++++++++++++ 3 files changed, 186 insertions(+) create mode 100644 racevisionGame/src/main/resources/visualiser/images/lobby.gif create mode 100644 racevisionGame/src/main/resources/visualiser/scenes/hostlobby.fxml diff --git a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java index 8998a02c..22c76426 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java @@ -97,6 +97,9 @@ public class HostController extends Controller { hostWrapper.setVisible(true); } + /** + * Menu button pressed. Prompt alert then return to menu + */ public void menuBtnPressed(){ Alert alert = new Alert(Alert.AlertType.CONFIRMATION); alert.setTitle("Quitting race"); @@ -109,6 +112,9 @@ public class HostController extends Controller { } } + /** + * Start button pressed. Currently only prints out start + */ public void startBtnPressed(){ System.out.println("Should start the race. This button is only visible for the host"); } diff --git a/racevisionGame/src/main/resources/visualiser/images/lobby.gif b/racevisionGame/src/main/resources/visualiser/images/lobby.gif new file mode 100644 index 0000000000000000000000000000000000000000..c70d8df6b2b68dc25980f28c9348189f8c8f31fa GIT binary patch literal 18442 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 literal 0 HcmV?d00001 diff --git a/racevisionGame/src/main/resources/visualiser/scenes/hostlobby.fxml b/racevisionGame/src/main/resources/visualiser/scenes/hostlobby.fxml new file mode 100644 index 00000000..3576c139 --- /dev/null +++ b/racevisionGame/src/main/resources/visualiser/scenes/hostlobby.fxml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 7df181c759e751f1d3eb3f5c953b2fd5475cf0b7 Mon Sep 17 00:00:00 2001 From: David Wu Date: Tue, 29 Aug 2017 19:08:22 +1200 Subject: [PATCH 05/19] Minor changes to new lobby fxml. #story[1188] --- .../resources/visualiser/scenes/hostlobby.fxml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/racevisionGame/src/main/resources/visualiser/scenes/hostlobby.fxml b/racevisionGame/src/main/resources/visualiser/scenes/hostlobby.fxml index 3576c139..aed6664b 100644 --- a/racevisionGame/src/main/resources/visualiser/scenes/hostlobby.fxml +++ b/racevisionGame/src/main/resources/visualiser/scenes/hostlobby.fxml @@ -55,7 +55,7 @@ -