diff --git a/pom.xml b/pom.xml index 31f71f2f89db024293be17c164419ce3b1564efe..ccf17e28ed1e3cbd9b9ee92decca69465492087d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 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>lab03</artifactId> + <artifactId>lab04</artifactId> <version>0.0.1-SNAPHOST</version> <packaging>jar</packaging> <properties> diff --git a/src/main/java/lab/BulletAnimated.java b/src/main/java/lab/BulletAnimated.java index 0d953f5ccf205688aa2703f71bf97f8b2c11676b..27eae34736d28868aab2184cba9125bf188d4be8 100644 --- a/src/main/java/lab/BulletAnimated.java +++ b/src/main/java/lab/BulletAnimated.java @@ -1,6 +1,7 @@ package lab; import javafx.geometry.Point2D; +import javafx.geometry.Rectangle2D; import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.Image; @@ -76,6 +77,14 @@ public class BulletAnimated { } + public Rectangle2D getBoundingBox() { + return new Rectangle2D(position.getX(), position.getY(), size, size); + } + + public boolean overlaps(Dragon dragon) { + return getBoundingBox().intersects(dragon.getBoundingBox()); + } + public void reload() { position = start; speed = initialSpeed; diff --git a/src/main/java/lab/Dragon.java b/src/main/java/lab/Dragon.java new file mode 100644 index 0000000000000000000000000000000000000000..216628afbd03d95d4896abc8b5175efcb25709c8 --- /dev/null +++ b/src/main/java/lab/Dragon.java @@ -0,0 +1,52 @@ +package lab; + +import javafx.geometry.Point2D; +import javafx.geometry.Rectangle2D; +import javafx.scene.canvas.GraphicsContext; + +public class Dragon { + + private Point2D position; + + private Point2D speed; + + private final World world; + + private final double size = 45; + + public Dragon(World world, Point2D position, Point2D speed) { + super(); + this.world = world; + this.position = position; + this.speed = speed; + } + + + public void draw(GraphicsContext gc) { + Point2D canvasPosition = world.getCanvasPoint(position); + gc.drawImage(Constants.DRAGON_IMAGE, canvasPosition.getX(), canvasPosition.getY(), size, size); + } + + + public void simulate(double timeDelta) { + double timeDeltaS = timeDelta; + double newX = (position.getX() + speed.getX() * timeDeltaS + world.getWidth()) % world.getWidth(); + double newY = (position.getY() + speed.getY() * timeDeltaS + world.getHeight()) % world.getHeight(); + position = new Point2D(newX, newY); + } + + + public Rectangle2D getBoundingBox() { + return new Rectangle2D(position.getX(), position.getY(), size, size); + } + + + public void hit() { + speed = speed.multiply(-1.); + } + + + + + +} diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java index e8c621995c224c22aabe1f6bf6e8f4b86f3d2b85..ce631f92042437d374ab6c311c2778450a88858c 100644 --- a/src/main/java/lab/World.java +++ b/src/main/java/lab/World.java @@ -9,6 +9,7 @@ public class World { private double height; private BulletAnimated bulletAnimatted; private Cannon cannon; + private Dragon[] dragons; public World(double width, double height) { super(); @@ -16,6 +17,9 @@ public class World { this.height = height; cannon = new Cannon(this, new Point2D(50, 50), new Point2D(100, 20)); bulletAnimatted = new BulletAnimated(this, cannon, new Point2D(30, 60), new Point2D(0, 0), 40); + dragons = new Dragon[] { new Dragon(this, new Point2D(50, 200), new Point2D(100, 5)), + new Dragon(this, new Point2D(50, 230), new Point2D(60, 5)), + new Dragon(this, new Point2D(50, 270), new Point2D(-50, 20)) }; } public Point2D getCanvasPoint(Point2D worldPoint) { @@ -27,11 +31,21 @@ public class World { gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight()); cannon.draw(gc); bulletAnimatted.draw(gc); + for(Dragon dragon: dragons) { + dragon.draw(gc); + } } public void simulate(double timeDelta) { bulletAnimatted.simulate(timeDelta); cannon.simulate(timeDelta); + for(Dragon dragon: dragons) { + if (bulletAnimatted.overlaps(dragon)) { + dragon.hit(); + bulletAnimatted.reload(); + } + dragon.simulate(timeDelta); + } } public double getWidth() {