Skip to content
Snippets Groups Projects
Commit 88cad769 authored by koz01's avatar koz01
Browse files

solution-2022_Wed_7-15

parent 59ec9366
No related merge requests found
......@@ -5,9 +5,8 @@ import javafx.geometry.Rectangle2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
public class BulletAnimated implements DrawableSimulable, Collisionable {
public class BulletAnimated extends WorldEntity implements Collisionable {
private Point2D position;
private Point2D start;
private Point2D speed;
private Point2D initialSpeed;
......@@ -22,7 +21,6 @@ public class BulletAnimated implements DrawableSimulable, Collisionable {
private double dragCoefficient = 0.47;
private Image image;
private World world;
private Cannon cannon;
public BulletAnimated(World world, Cannon cannon) {
......@@ -30,25 +28,17 @@ public class BulletAnimated implements DrawableSimulable, Collisionable {
}
public BulletAnimated(World world, Cannon cannon, Point2D start, Point2D speed, double size) {
super(world, start);
this.start = start;
this.position = this.start;
this.initialSpeed = speed;
this.speed = speed;
this.size = size;
this.world = world;
this.cannon = cannon;
image = new Image(getClass().getResourceAsStream("fireball-transparent.gif"), size, size,
true, true);
}
@Override
public void draw(GraphicsContext gc) {
gc.save();
Point2D canvasPosition = world.getCanvasPoint(position);
gc.drawImage(image, canvasPosition.getX(), canvasPosition.getY());
gc.restore();
}
@Override
public void simulate(double deltaT) {
if (accelerate && start.distance(position) < cannonLength) {
......@@ -81,10 +71,6 @@ public class BulletAnimated implements DrawableSimulable, Collisionable {
return getBoundingBox();
}
@Override
public boolean isInCollisionWith(Collisionable other) {
return getBB().intersects(other.getBB());
}
@Override
public void hitBy(Collisionable other) {
......@@ -98,6 +84,12 @@ public class BulletAnimated implements DrawableSimulable, Collisionable {
return new Rectangle2D(position.getX(), position.getY(), size, size);
}
@Override
protected void drawInternal(GraphicsContext gc) {
Point2D canvasPosition = world.getCanvasPoint(position);
gc.drawImage(image, canvasPosition.getX(), canvasPosition.getY());
}
public boolean overlaps(Dragon dragon) {
return getBoundingBox().intersects(dragon.getBoundingBox());
}
......
......@@ -5,21 +5,17 @@ import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.transform.Affine;
public class Cannon implements DrawableSimulable {
public class Cannon extends WorldEntity {
private int direction=-1;
private double angle = 0;
private Point2D position;
private Point2D size;
private World world;
public Cannon(World world, Point2D position, Point2D size) {
super();
this.world = world;
this.position = position;
super(world, position);
this.size = size;
}
......@@ -32,8 +28,7 @@ public class Cannon implements DrawableSimulable {
}
@Override
public void draw(GraphicsContext gc) {
gc.save();
protected void drawInternal(GraphicsContext gc) {
Point2D worldPosition = world.getCanvasPoint(position);
gc.setFill(Color.BROWN);
gc.fillRect(worldPosition.getX()-10, worldPosition.getY()+size.getY(), size.getX()+20, size.getY()/2);
......@@ -42,7 +37,6 @@ public class Cannon implements DrawableSimulable {
gc.setTransform(new Affine(Affine.rotate(angle, worldPosition.getX(), worldPosition.getY()+size.getY()/2)));
gc.setFill(Color.BLACK);
gc.fillRect(worldPosition.getX(), worldPosition.getY(), size.getX(), size.getY());
gc.restore();
}
public double getAngle() {
......
......@@ -6,7 +6,9 @@ public interface Collisionable {
Rectangle2D getBB();
boolean isInCollisionWith(Collisionable other);
default boolean isInCollisionWith(Collisionable other) {
return getBB().intersects(other.getBB());
}
void hitBy(Collisionable other);
}
......@@ -4,29 +4,18 @@ import javafx.geometry.Point2D;
import javafx.geometry.Rectangle2D;
import javafx.scene.canvas.GraphicsContext;
public class Dragon implements DrawableSimulable, Collisionable{
private Point2D position;
public class Dragon extends WorldEntity implements Collisionable{
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;
super(world, position);
this.speed = speed;
}
@Override
public void draw(GraphicsContext gc) {
Point2D canvasPosition = world.getCanvasPoint(position);
gc.drawImage(Constants.DRAGON_IMAGE, canvasPosition.getX(), canvasPosition.getY(), size, size);
}
@Override
public void simulate(double timeDelta) {
double timeDeltaS = timeDelta;
......@@ -41,11 +30,6 @@ public class Dragon implements DrawableSimulable, Collisionable{
return getBoundingBox();
}
@Override
public boolean isInCollisionWith(Collisionable other) {
return getBB().intersects(other.getBB());
}
@Override
public void hitBy(Collisionable other) {
if (other instanceof BulletAnimated) {
......@@ -53,6 +37,11 @@ public class Dragon implements DrawableSimulable, Collisionable{
}
}
@Override
protected void drawInternal(GraphicsContext gc) {
Point2D canvasPosition = world.getCanvasPoint(position);
gc.drawImage(Constants.DRAGON_IMAGE, canvasPosition.getX(), canvasPosition.getY(), size, size);
}
public Rectangle2D getBoundingBox() {
return new Rectangle2D(position.getX(), position.getY(), size, size);
......
package lab;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
public abstract class WorldEntity implements DrawableSimulable{
final protected World world;
protected Point2D position;
public WorldEntity(World world, Point2D position) {
this.world = world;
this.position = position;
}
@Override
public void draw(GraphicsContext gc) {
gc.save();
drawInternal(gc);
gc.restore();
}
protected abstract void drawInternal(GraphicsContext gc);
}
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