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>