diff --git a/pom.xml b/pom.xml index 8bdcd5d2f15bc0347ce8212d6bcdea6aa01c6009..6bd5f9946ef2b3a7ffee8f8f073582471b9caa25 100644 --- a/pom.xml +++ b/pom.xml @@ -3,24 +3,24 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>vsb-cs-java1</groupId> - <artifactId>lab06</artifactId> + <artifactId>lab08</artifactId> <version>0.0.1-SNAPHOST</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <maven.compiler.source>11</maven.compiler.source> - <maven.compiler.target>11</maven.compiler.target> + <maven.compiler.source>17</maven.compiler.source> + <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> - <version>11</version> + <version>17.0.2</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> - <version>11</version> + <version>17.0.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --> <dependency> diff --git a/src/main/java/lab/DrawingThread.java b/src/main/java/lab/DrawingThread.java new file mode 100755 index 0000000000000000000000000000000000000000..5d6c0f0bf74b14fc4a6cc67a046bec0a0df363a9 --- /dev/null +++ b/src/main/java/lab/DrawingThread.java @@ -0,0 +1,37 @@ +package lab; + +import javafx.animation.AnimationTimer; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; + +public class DrawingThread extends AnimationTimer { + + private final Canvas canvas; + + private final GraphicsContext gc; + + private final World world; + + private long lasttime = -1; + + public DrawingThread(Canvas canvas, World world) { + this.canvas = canvas; + this.gc = canvas.getGraphicsContext2D(); + this.world = world; + } + + /** + * Draws objects into the canvas. Put you code here. + */ + @Override + public void handle(long now) { + gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight()); + world.draw(gc); + if (lasttime > 0) { + //time are in nanoseconds and method simulate expects seconds + world.simulate((now - lasttime) / 1e9); + } + lasttime = now; + } + +} diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java index 001db374a86150c5e2fe2773be6b0e01e32c4e0e..1b2763c1b5575cc672e6ac3c3b91f471f4121c94 100644 --- a/src/main/java/lab/GameController.java +++ b/src/main/java/lab/GameController.java @@ -60,7 +60,7 @@ public class GameController { this.world = new World(canvas.getWidth(), canvas.getHeight()); this.world.setGameListener(new GameListenerImpl()); //Draw scene on a separate thread to avoid blocking UI. - animationTimer = new AnimationTimerImpl(); + animationTimer = new DrawingThread(canvas, world); angleSlider.valueProperty().addListener(this::angleChanged); world.setCannonAngle(angleSlider.getValue()); @@ -74,10 +74,6 @@ public class GameController { animationTimer.stop(); } - private void drawScene(double deltaT) { - world.draw(canvas); - world.simulate(deltaT); - } @FXML private void firePressed() { @@ -139,20 +135,6 @@ public class GameController { scoreList.setItems(FXCollections.observableList(highScores)); } - private final class AnimationTimerImpl extends AnimationTimer { - private Long previous; - - @Override - public void handle(long now) { - if (previous == null) { - previous = now; - } else { - drawScene((now - previous)/1e9); - previous = now; - } - } - } - private class GameListenerImpl implements GameListener { @Override diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java index 9fb2e23b138fc91bc73455181e5080449975d01f..65dc08fdc44503487e64cf12d36ad10e48d21286 100644 --- a/src/main/java/lab/World.java +++ b/src/main/java/lab/World.java @@ -3,7 +3,6 @@ package lab; import java.util.Random; import javafx.geometry.Point2D; -import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; public class World { @@ -45,9 +44,8 @@ public class World { return new Point2D(worldPoint.getX(), height - worldPoint.getY()); } - public void draw(Canvas canvas) { - GraphicsContext gc = canvas.getGraphicsContext2D(); - gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight()); + public void draw(GraphicsContext gc) { + gc.clearRect(0, 0, getWidth(), getHeight()); for(DrawableSimulable entity: entities) { entity.draw(gc); }