diff --git a/src/main/java/core/Master.java b/src/main/java/core/Master.java index 516228c..9210a39 100644 --- a/src/main/java/core/Master.java +++ b/src/main/java/core/Master.java @@ -2,6 +2,7 @@ package core; import core.math.Vector2D; import core.physics.Collidable; +import core.physics.Collision; import objects.DebugPos; import objects.ships.BattleShip; import objects.GameObject; @@ -217,21 +218,19 @@ public class Master extends JPanel { /** * Check whether a collidables collide with another one * - * @param col The collidable to be checked + * @param collidable The collidable to be checked * @return True if it collides with something, false if it doesn't - Should return a Collision */ - @Deprecated - //TODO make it return a Collision - public boolean doesCollide(Collidable col) { - boolean collides = false; + public Collision doesCollide(Collidable collidable) { + Collision collides = null; - for (Collidable c : collidables) { - double distance = Vector2D.distance(c.getCenterPos(), col.getCenterPos()); + for (Collidable other : collidables) { + double distance = Vector2D.distance(other.getCenterPos(), collidable.getCenterPos()); - if (c != col && (distance < c.getHitbox().getSize() + col.getHitbox().getSize())) { + if (other != collidable && (distance < other.getHitbox().getSize() + collidable.getHitbox().getSize())) { - if (c.collidesWith(col)) { - collides = true; + if (other.getHitbox().collidesWith(collidable.getHitbox())) { + collides = new Collision(collidable, other); } } } diff --git a/src/main/java/core/physics/Collidable.java b/src/main/java/core/physics/Collidable.java index e1e173c..91f153c 100644 --- a/src/main/java/core/physics/Collidable.java +++ b/src/main/java/core/physics/Collidable.java @@ -5,7 +5,6 @@ import core.physics.hitboxes.Hitbox; public interface Collidable { - boolean collidesWith(Collidable o); Hitbox getHitbox(); Vector2D getCenterPos(); Vector2D getSize(); diff --git a/src/main/java/core/physics/Collision.java b/src/main/java/core/physics/Collision.java index 491755d..7e9a286 100644 --- a/src/main/java/core/physics/Collision.java +++ b/src/main/java/core/physics/Collision.java @@ -5,15 +5,12 @@ package core.physics; */ public class Collision { - Collidable a; - Collidable b; + private final Collidable a; + private final Collidable b; - boolean haveCollided; - - public Collision(Collidable a, Collidable b, boolean haveCollided) { + public Collision(Collidable a, Collidable b) { this.a = a; this.b = b; - this.haveCollided = haveCollided; } /** @@ -31,8 +28,4 @@ public class Collision { public Collidable getB() { return b; } - - public boolean isHaveCollided() { - return haveCollided; - } } diff --git a/src/main/java/core/physics/hitboxes/Hitbox.java b/src/main/java/core/physics/hitboxes/Hitbox.java index 14f6028..00eb65f 100644 --- a/src/main/java/core/physics/hitboxes/Hitbox.java +++ b/src/main/java/core/physics/hitboxes/Hitbox.java @@ -2,6 +2,7 @@ package core.physics.hitboxes; import core.Drawable; import core.math.Vector2D; +import core.physics.Collision; public abstract class Hitbox implements Drawable { @@ -15,6 +16,8 @@ public abstract class Hitbox implements Drawable { public abstract double getSize(); + public abstract boolean collidesWith(Hitbox other); + @Override public String toString() { return super.toString(); diff --git a/src/main/java/objects/GameObject.java b/src/main/java/objects/GameObject.java index 1d3320b..bddab07 100644 --- a/src/main/java/objects/GameObject.java +++ b/src/main/java/objects/GameObject.java @@ -58,7 +58,7 @@ public abstract class GameObject implements Drawable { if (this instanceof Collidable) { ((Collidable) this).getHitbox().moveTo(position, size); - if (master.doesCollide((Collidable) this)) { + if (master.doesCollide((Collidable) this) != null) { this.position = oldPos; ((Collidable) this).getHitbox().moveTo(oldPos, size); } diff --git a/src/main/java/objects/ships/Submarine.java b/src/main/java/objects/ships/Submarine.java index 57178a8..1bd26ff 100644 --- a/src/main/java/objects/ships/Submarine.java +++ b/src/main/java/objects/ships/Submarine.java @@ -33,11 +33,6 @@ public class Submarine extends GameObject implements Collidable { moveTo(centerRelPos); } - @Override - public boolean collidesWith(Collidable o) { - return hitbox.collidesWith(o.getHitbox()); - } - @Override public Hitbox getHitbox() { return hitbox; diff --git a/src/main/java/objects/world/Wall.java b/src/main/java/objects/world/Wall.java index c42ea97..77162ad 100644 --- a/src/main/java/objects/world/Wall.java +++ b/src/main/java/objects/world/Wall.java @@ -26,11 +26,6 @@ public class Wall extends GameObject implements Collidable { public void update() { } - @Override - public boolean collidesWith(Collidable o) { - return this.hitbox.collidesWith(o.getHitbox()); - } - @Override public Hitbox getHitbox() { return hitbox; diff --git a/target/classes/core/Master.class b/target/classes/core/Master.class index 6f26be7..b8ddd11 100644 Binary files a/target/classes/core/Master.class and b/target/classes/core/Master.class differ