diff --git a/src/main/java/lab/Bullet.java b/src/main/java/lab/Bullet.java new file mode 100644 index 0000000000000000000000000000000000000000..66818f79b9b4c73ca0a9f044ae2bdf78399d62f6 --- /dev/null +++ b/src/main/java/lab/Bullet.java @@ -0,0 +1,34 @@ +package lab; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class Bullet { + + private Point2D position; + + private Point2D speed; + + private Point2D acceleration; + + public Bullet(Point2D position, Point2D speed, Point2D acceleration) { + this.position = position; + this.speed = speed; + this.acceleration = acceleration; + } + + + public void draw(GraphicsContext gc) { + gc.save(); + gc.setFill(Color.SILVER); + gc.fillOval(position.getX(), position.getY(), 10, 10); + gc.restore(); + } + + public void simulate(double deltaT) { + position = position.add(speed.multiply(deltaT)); + speed = speed.add(acceleration.multiply(deltaT)); + } + +} diff --git a/src/main/java/lab/BulletAnimated.java b/src/main/java/lab/BulletAnimated.java new file mode 100644 index 0000000000000000000000000000000000000000..63ab23b155a36ce0a827039ae80f74827292ad84 --- /dev/null +++ b/src/main/java/lab/BulletAnimated.java @@ -0,0 +1,35 @@ +package lab; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.image.Image; + +public class BulletAnimated { + + + private final Image image = new Image(this.getClass().getResourceAsStream("fireball-transparent.gif")); + + + private Point2D position; + + private Point2D speed; + + private Point2D acceleration; + + public BulletAnimated(Point2D position, Point2D speed, Point2D acceleration) { + this.position = position; + this.speed = speed; + this.acceleration = acceleration; + } + + + public void draw(GraphicsContext gc) { + gc.drawImage(image, position.getX(), position.getY(), 40, 40); + + } + + public void simulate(double deltaT) { + position = position.add(speed.multiply(deltaT)); + speed = speed.add(acceleration.multiply(deltaT)); + } +} diff --git a/src/main/java/lab/Cannon.java b/src/main/java/lab/Cannon.java new file mode 100644 index 0000000000000000000000000000000000000000..0b060e34c9497e1f27152ee1738cda4511de5a75 --- /dev/null +++ b/src/main/java/lab/Cannon.java @@ -0,0 +1,31 @@ +package lab; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; +import javafx.scene.transform.Affine; +import javafx.scene.transform.Transform; + +public class Cannon { + private Point2D position; + + private double angle; + + public Cannon(Point2D position, double angle) { + this.position = position; + this.angle = angle; + } + + public void draw(GraphicsContext gc) { + gc.save(); + gc.setFill(Color.LIGHTSTEELBLUE); + gc.transform(new Affine(Transform.rotate(angle, position.getX(), position.getY()))); + gc.fillRect(position.getX(), position.getY(), 60, 20); + gc.restore(); + } + + public void simulate(double deltaT) { + angle += 15*deltaT; + } + +} diff --git a/src/main/java/lab/DrawingThread.java b/src/main/java/lab/DrawingThread.java index f2436cda938c0cee27acd4e925cd42dedd975197..62427594d23a6ee5f8d51bdd1b6dcfdccd21e486 100644 --- a/src/main/java/lab/DrawingThread.java +++ b/src/main/java/lab/DrawingThread.java @@ -7,10 +7,15 @@ import javafx.scene.canvas.GraphicsContext; public class DrawingThread extends AnimationTimer { private final GraphicsContext gc; - private long lastTime; + private final World world; + private final double height; + private long lastTime; + public DrawingThread(Canvas canvas) { this.gc = canvas.getGraphicsContext2D(); + this.world = new World(canvas.getWidth(), canvas.getHeight()); + this.height = canvas.getHeight(); } /** @@ -21,9 +26,15 @@ public class DrawingThread extends AnimationTimer { if (lastTime > 0) { double deltaT = (now - lastTime) / 1e9; // call simulate on world + world.simulate(deltaT); } //call draw on world + gc.save(); + this.gc.scale(1, -1); + this.gc.translate(0, -height); + world.draw(gc); lastTime= now; + gc.restore(); } diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java new file mode 100644 index 0000000000000000000000000000000000000000..2a188f6fc7137d8b7c82eac1313d11020943883f --- /dev/null +++ b/src/main/java/lab/World.java @@ -0,0 +1,42 @@ +package lab; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class World { + + + private final double width; + private final double hight; + private final Bullet bullet; + private final BulletAnimated bullet_2; + private final Cannon cannon; + + public World(double width, double hight) { + this.width = width; + this.hight = hight; + //create bullet and assign to instance variable + this.bullet = new Bullet(new Point2D(0, 0), new Point2D(30, 30), new Point2D(0, -9.81)); + this.bullet_2 = new BulletAnimated(new Point2D(0, 0), new Point2D(40, 70), new Point2D(0, -9.81)); + this.cannon = new Cannon(new Point2D(0, 0), 45.0); + } + + + public void simulate(double deltaT) { + //call simulate on bullet + bullet.simulate(deltaT); + bullet_2.simulate(deltaT); + cannon.simulate(deltaT); + } + + public void draw(GraphicsContext gc) { + gc.setFill(Color.BEIGE); + gc.fillRect(0, 0, width, hight); + //call draw on bullet + bullet.draw(gc); + bullet_2.draw(gc); + cannon.draw(gc); + } + +} \ No newline at end of file