diff --git a/src/main/java/lab/App.java b/src/main/java/lab/App.java index 7ed50c35fc919c24ce2a4005b8b102bb62547418..e875a5fe564e7e9a52db4c122809ba7841d8ca59 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 bfe0a20c81daf4414b2022c10de4cf95efa40b9b..9cde911ed56f1ac7f87a6775dc99ca39f7dafcbc 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 889d6a1525bf0e419a03681359103201ee90e569..39d4a147860a32c8f161fc6762475cdeb96239e1 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 ead7806d7311180d84ebdb855ce31a51a0da13ed..50e4d6c73fd890720281646860300034843f6ab3 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 0000000000000000000000000000000000000000..d95ba5ac08f46042c59ac24af57ae95c497ca719 --- /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>