Skip to content
Snippets Groups Projects
Commit 50f1eb2a authored by Jan Kožusznik's avatar Jan Kožusznik
Browse files

lab05-solution: Monday 14:15

parent ded001b9
No related merge requests found
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);
......
......@@ -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;
......
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());
}
}
......@@ -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;
}
}
}
}
<?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>
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment