diff --git a/src/main/java/core/general/Master.java b/src/main/java/core/general/Master.java index 7c7ecf8..8141b56 100644 --- a/src/main/java/core/general/Master.java +++ b/src/main/java/core/general/Master.java @@ -206,8 +206,7 @@ public class Master extends JPanel { * @return True if it collides with something, false if it doesn't - Should return a Collision */ public Collision doesCollide(Collidable collidable) { - long time = System.nanoTime(); - Collision collides = null; + Collision collision = null; for (Collidable other : collidables) { @@ -217,13 +216,17 @@ public class Master extends JPanel { if (other != collidable && (distance < other.getHitbox().getSize() + collidable.getHitbox().getSize())) { if (other.getHitbox().collidesWith(collidable.getHitbox())) { - collides = new Collision(collidable, other); - collidable.onCollision(); + collision = new Collision(collidable, other); + if(collision.isTrigger()){ + collidable.onTrigger(); + } else { + collidable.onCollision(); + } } } } } - return collides; + return collision; } public int getW() { diff --git a/src/main/java/core/math/Coordinates.java b/src/main/java/core/math/Coordinates.java index 62297d1..a935958 100644 --- a/src/main/java/core/math/Coordinates.java +++ b/src/main/java/core/math/Coordinates.java @@ -6,7 +6,7 @@ import core.objects.core.GameObject; /** * This class provides everything about the local coordinate system the game uses - *

In this system, the screen is always 100 high and 100 * the screen ration wide. + *

In this system, the screen is always 100 high and 100 * the screen ratio wide. * This class is the used to convert these coordinates into the true Java 2D coordinates for the drawing

*/ public class Coordinates { diff --git a/src/main/java/core/objects/core/CollGameObject.java b/src/main/java/core/objects/core/CollGameObject.java index 3213694..b345994 100644 --- a/src/main/java/core/objects/core/CollGameObject.java +++ b/src/main/java/core/objects/core/CollGameObject.java @@ -3,6 +3,7 @@ package core.objects.core; import core.math.Vector2D; import core.objects.core.GameObject; import core.physics.Collidable; +import core.physics.Collision; import core.physics.hitboxes.Hitbox; import java.util.ArrayList; @@ -38,7 +39,8 @@ public abstract class CollGameObject extends GameObject implements Collidable { this.position = target; ((Collidable) this).getHitbox().moveTo(position, size); - if (master.doesCollide(this) != null) { + Collision coll = master.doesCollide(this); + if (coll != null && !coll.isTrigger()) { this.position = oldPos; ((Collidable) this).getHitbox().moveTo(oldPos, size); } @@ -63,6 +65,10 @@ public abstract class CollGameObject extends GameObject implements Collidable { public void onCollision() { } + @Override + public void onTrigger() { + } + @Override public ArrayList> getIgnores() { return ignores; diff --git a/src/main/java/core/physics/Collidable.java b/src/main/java/core/physics/Collidable.java index 1091f6e..6dc2073 100644 --- a/src/main/java/core/physics/Collidable.java +++ b/src/main/java/core/physics/Collidable.java @@ -11,6 +11,7 @@ public interface Collidable { Vector2D getCenterPos(); Vector2D getSize(); void onCollision(); + void onTrigger(); ArrayList> getIgnores(); boolean isTrigger(); } diff --git a/src/main/java/core/physics/Collision.java b/src/main/java/core/physics/Collision.java index 7e9a286..1ce2161 100644 --- a/src/main/java/core/physics/Collision.java +++ b/src/main/java/core/physics/Collision.java @@ -8,9 +8,21 @@ public class Collision { private final Collidable a; private final Collidable b; + private final boolean isTrigger; + public Collision(Collidable a, Collidable b) { this.a = a; this.b = b; + + this.isTrigger = a.isTrigger() || b.isTrigger(); + } + + /** + * Whether the collision is a trigger and shouldn't impact movement + * @return True if it's a trigger, false when it isn't + */ + public boolean isTrigger() { + return isTrigger; } /** diff --git a/src/main/java/objects/Init.java b/src/main/java/objects/Init.java index 2220fed..55548e8 100644 --- a/src/main/java/objects/Init.java +++ b/src/main/java/objects/Init.java @@ -16,7 +16,7 @@ import java.awt.*; */ public class Init { - public static final boolean DEBUG_MODE = true; + public static final boolean DEBUG_MODE = false; /** * Create a new GameObject diff --git a/src/main/java/objects/ships/Shell.java b/src/main/java/objects/ships/Shell.java index 7203827..4ca44f7 100644 --- a/src/main/java/objects/ships/Shell.java +++ b/src/main/java/objects/ships/Shell.java @@ -32,8 +32,7 @@ public class Shell extends CollGameObject { } @Override - public void onCollision() { + public void onTrigger() { destroy(); - //master.debugPos(position); } }