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

lab05-solution-wednesday-900

parent ded001b9
No related merge requests found
package lab; package lab;
import javafx.application.Application; import javafx.application.Application;
import javafx.scene.Group; import javafx.fxml.FXMLLoader;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.canvas.Canvas; import javafx.scene.layout.BorderPane;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.WindowEvent; import javafx.stage.WindowEvent;
...@@ -17,17 +17,16 @@ public class App extends Application { ...@@ -17,17 +17,16 @@ public class App extends Application {
launch(args); launch(args);
} }
private Canvas canvas;
private GameController controller; private GameController controller;
@Override @Override
public void start(Stage primaryStage) { public void start(Stage primaryStage) {
try { try {
//Construct a main window with a canvas. //Construct a main window with a canvas.
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("GameView.fxml"));
BorderPane root = loader.load();
Group root = new Group();
canvas = new Canvas(800, 600);
root.getChildren().add(canvas);
Scene scene = new Scene(root); Scene scene = new Scene(root);
...@@ -35,7 +34,7 @@ public class App extends Application { ...@@ -35,7 +34,7 @@ public class App extends Application {
primaryStage.resizableProperty().set(false); primaryStage.resizableProperty().set(false);
primaryStage.setTitle("Java 1 - 6th laboratory"); primaryStage.setTitle("Java 1 - 6th laboratory");
primaryStage.show(); primaryStage.show();
controller = new GameController(canvas); controller = loader.getController();
controller.startGame(); controller.startGame();
//Exit program when main window is closed //Exit program when main window is closed
primaryStage.setOnCloseRequest(this::exitProgram); primaryStage.setOnCloseRequest(this::exitProgram);
......
...@@ -7,7 +7,6 @@ import javafx.scene.transform.Affine; ...@@ -7,7 +7,6 @@ import javafx.scene.transform.Affine;
public class Cannon implements DrawableSimulable { public class Cannon implements DrawableSimulable {
private int direction=-1;
private double angle = 0; private double angle = 0;
private Point2D position; private Point2D position;
private Point2D size; private Point2D size;
...@@ -24,10 +23,11 @@ public class Cannon implements DrawableSimulable { ...@@ -24,10 +23,11 @@ public class Cannon implements DrawableSimulable {
} }
public void simulate(double timeStep) { public void simulate(double timeStep) {
angle = angle + direction*0.8; /*angle = angle + direction*0.8;
if(angle <=-90 || angle >= 0) { if(angle <=-90 || angle >= 0) {
direction*=-1; direction*=-1;
} }
{*/
} }
public void draw(GraphicsContext gc) { public void draw(GraphicsContext gc) {
...@@ -46,4 +46,8 @@ public class Cannon implements DrawableSimulable { ...@@ -46,4 +46,8 @@ public class Cannon implements DrawableSimulable {
public double getAngle() { public double getAngle() {
return (angle * -1) / 180 * Math.PI; return (angle * -1) / 180 * Math.PI;
} }
public void setAngle(double doubleValue) {
angle = doubleValue;
}
} }
package lab; package lab;
import javafx.animation.AnimationTimer; import javafx.animation.AnimationTimer;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.scene.canvas.Canvas; import javafx.scene.canvas.Canvas;
import javafx.scene.control.Slider;
public class GameController { public class GameController {
private World world; private World world;
@FXML
private Slider angleSlider;
@FXML
private Canvas canvas; private Canvas canvas;
private AnimationTimer animationTimer; private AnimationTimer animationTimer;
public GameController(Canvas canvas) { public GameController() {
this.canvas = canvas;
} }
public void startGame() { public void startGame() {
...@@ -29,6 +37,8 @@ public class GameController { ...@@ -29,6 +37,8 @@ public class GameController {
} }
} }
}; };
angleSlider.valueProperty().addListener(this::angleChanged);
world.setCannonAngle(angleSlider.getValue());
animationTimer.start(); animationTimer.start();
} }
...@@ -41,6 +51,17 @@ public class GameController { ...@@ -41,6 +51,17 @@ public class GameController {
world.draw(canvas); world.draw(canvas);
world.simulate(deltaT); world.simulate(deltaT);
} }
@FXML
private void firePressed() {
System.out.println("Fire");
}
private void angleChanged(ObservableValue<? extends Number> observable
, Number oldValue, Number newValue) {
world.setCannonAngle(newValue.doubleValue());
}
} }
...@@ -89,4 +89,14 @@ public class World { ...@@ -89,4 +89,14 @@ public class World {
this.height = height; this.height = height;
} }
public void setCannonAngle(double doubleValue) {
for (DrawableSimulable d: entities) {
if (d instanceof Cannon) {
Cannon cannon = (Cannon) d;
cannon.setAngle(doubleValue);
}
}
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?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="400.0" width="600.0" BorderPane.alignment="CENTER" />
</center>
<bottom>
<HBox alignment="CENTER" BorderPane.alignment="CENTER_LEFT">
<children>
<Slider fx:id="angleSlider" max="0.0" min="-90.0" showTickLabels="true" showTickMarks="true" value="-45.0" HBox.hgrow="ALWAYS" />
<Button mnemonicParsing="false" onAction="#firePressed" text="Fire" HBox.hgrow="ALWAYS">
<HBox.margin>
<Insets bottom="11.0" left="14.0" right="11.0" top="12.0" />
</HBox.margin></Button>
<Slider 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