From 50f1eb2a0de2d5549850c9285ff0d620210b0e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz> Date: Mon, 11 Oct 2021 15:54:55 +0200 Subject: [PATCH] lab05-solution: Monday 14:15 --- src/main/java/lab/App.java | 15 ++++++++------- src/main/java/lab/BulletAnimated.java | 11 +++++------ src/main/java/lab/GameController.java | 18 +++++++++++++++--- src/main/java/lab/World.java | 10 ++++++++++ src/main/resources/lab/GameWindow.fxml | 22 ++++++++++++++++++++++ 5 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 src/main/resources/lab/GameWindow.fxml diff --git a/src/main/java/lab/App.java b/src/main/java/lab/App.java index 7ed50c3..e875a5f 100644 --- a/src/main/java/lab/App.java +++ b/src/main/java/lab/App.java @@ -1,9 +1,12 @@ package lab; import javafx.application.Application; +import javafx.fxml.FXMLLoader; import javafx.scene.Group; +import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; +import javafx.scene.layout.BorderPane; import javafx.stage.Stage; import javafx.stage.WindowEvent; @@ -25,17 +28,15 @@ public class App extends Application { //Construct a main window with a canvas. - Group root = new Group(); - canvas = new Canvas(800, 600); - root.getChildren().add(canvas); - Scene scene = new Scene(root); - + FXMLLoader loader = new FXMLLoader(App.class.getResource("GameWindow.fxml")); + BorderPane root = loader.load(); + Scene scene = new Scene(root); primaryStage.setScene(scene); primaryStage.resizableProperty().set(false); - primaryStage.setTitle("Java 1 - 6th laboratory"); + primaryStage.setTitle("Java 1 - 5th laboratory"); primaryStage.show(); - controller = new GameController(canvas); + controller = loader.getController(); controller.startGame(); //Exit program when main window is closed primaryStage.setOnCloseRequest(this::exitProgram); diff --git a/src/main/java/lab/BulletAnimated.java b/src/main/java/lab/BulletAnimated.java index bfe0a20..9cde911 100644 --- a/src/main/java/lab/BulletAnimated.java +++ b/src/main/java/lab/BulletAnimated.java @@ -15,7 +15,7 @@ public class BulletAnimated implements DrawableSimulable, Collisionable{ private double mass = 2; private double strenghtOfCannon = 2; private double cannonLength = 100; - private boolean accelerate = true; + private boolean accelerate = false; private boolean hitToGround = false; private double crossSectionalArea; @@ -70,9 +70,7 @@ public class BulletAnimated implements DrawableSimulable, Collisionable{ hitToGround = true; position = new Point2D(position.getX(), size / 2); } - } else { - reload(); - } + } } @@ -86,10 +84,11 @@ public class BulletAnimated implements DrawableSimulable, Collisionable{ } public void hitBy(Collisionable other) { - reload(); + reload(strenghtOfCannon); } - public void reload() { + public void reload(double force) { + strenghtOfCannon = force; position = start; speed = initialSpeed; hitToGround = false; diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java index 889d6a1..39d4a14 100644 --- a/src/main/java/lab/GameController.java +++ b/src/main/java/lab/GameController.java @@ -1,16 +1,23 @@ package lab; import javafx.animation.AnimationTimer; +import javafx.fxml.FXML; import javafx.scene.canvas.Canvas; +import javafx.scene.control.Slider; public class GameController { private World world; - private Canvas canvas; + + @FXML + Canvas canvas; + + @FXML + Slider forceSlider; + private AnimationTimer animationTimer; - public GameController(Canvas canvas) { - this.canvas = canvas; + public GameController() { } public void startGame() { @@ -41,6 +48,11 @@ public class GameController { world.draw(canvas); world.simulate(deltaT); } + + public void onFire() { + world.fireBullet(forceSlider.getValue()); + + } } diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java index ead7806..50e4d6c 100644 --- a/src/main/java/lab/World.java +++ b/src/main/java/lab/World.java @@ -89,4 +89,14 @@ public class World { this.height = height; } + public void fireBullet(double force) { + for(DrawableSimulable entity: entities) { + if (entity instanceof BulletAnimated) { + BulletAnimated bullet = (BulletAnimated) entity; + bullet.reload(force); + break; + } + } + } + } diff --git a/src/main/resources/lab/GameWindow.fxml b/src/main/resources/lab/GameWindow.fxml new file mode 100644 index 0000000..d95ba5a --- /dev/null +++ b/src/main/resources/lab/GameWindow.fxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.canvas.Canvas?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.Slider?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.layout.HBox?> + +<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.GameController"> + <center> + <Canvas fx:id="canvas" height="600.0" width="800.0" BorderPane.alignment="CENTER" /> + </center> + <bottom> + <HBox BorderPane.alignment="CENTER"> + <children> + <Slider HBox.hgrow="ALWAYS" /> + <Button mnemonicParsing="false" onAction="#onFire" prefHeight="25.0" text="Fire" HBox.hgrow="ALWAYS" /> + <Slider fx:id="forceSlider" max="5.0" min="1.0" HBox.hgrow="ALWAYS" /> + </children> + </HBox> + </bottom> +</BorderPane> -- GitLab