From 78e58389747a545d6dd6b0469c0b242d26b55ded Mon Sep 17 00:00:00 2001 From: Anastasios Date: Sun, 12 Jan 2025 03:01:05 +0200 Subject: [PATCH 1/5] early commit of collision detection for fastJ physics --- src/main/java/module-info.java | 2 + .../java/tech/fastj/physics/Collider.java | 5 +++ .../tech/fastj/physics/CollisionManager.java | 25 ++++++++++++ .../tech/fastj/physics/RectangleCollider.java | 23 +++++++++++ .../physics/CollisionManagerTests.java | 39 +++++++++++++++++++ 5 files changed, 94 insertions(+) create mode 100644 src/main/java/tech/fastj/physics/Collider.java create mode 100644 src/main/java/tech/fastj/physics/CollisionManager.java create mode 100644 src/main/java/tech/fastj/physics/RectangleCollider.java create mode 100644 src/test/java/unittest/testcases/physics/CollisionManagerTests.java diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index e6652be4..e27fa0b6 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -114,4 +114,6 @@ exports tech.fastj.animation.sprite.event; exports tech.fastj.gameloop; exports tech.fastj.gameloop.event; + + exports tech.fastj.physics; } diff --git a/src/main/java/tech/fastj/physics/Collider.java b/src/main/java/tech/fastj/physics/Collider.java new file mode 100644 index 00000000..c115ae90 --- /dev/null +++ b/src/main/java/tech/fastj/physics/Collider.java @@ -0,0 +1,5 @@ +package tech.fastj.physics; + +public abstract class Collider { + public abstract boolean checkCollision(Collider other); +} diff --git a/src/main/java/tech/fastj/physics/CollisionManager.java b/src/main/java/tech/fastj/physics/CollisionManager.java new file mode 100644 index 00000000..34a427ad --- /dev/null +++ b/src/main/java/tech/fastj/physics/CollisionManager.java @@ -0,0 +1,25 @@ +package tech.fastj.physics; + +import java.util.ArrayList; +import java.util.List; + +public class CollisionManager { + private List colliders = new ArrayList<>(); + + public void addCollider(Collider collider) { + colliders.add(collider); + } + + public boolean checkCollisions() { + // Ελέγχουμε για σύγκρουση μεταξύ όλων των colliders + for (int i = 0; i < colliders.size(); i++) { + for (int j = i + 1; j < colliders.size(); j++) { + if (colliders.get(i).checkCollision(colliders.get(j))) { + System.out.println("Collision detected between collider " + i + " and collider " + j); + return true; + } + } + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/tech/fastj/physics/RectangleCollider.java b/src/main/java/tech/fastj/physics/RectangleCollider.java new file mode 100644 index 00000000..1b34e9b2 --- /dev/null +++ b/src/main/java/tech/fastj/physics/RectangleCollider.java @@ -0,0 +1,23 @@ +package tech.fastj.physics; + +import java.awt.geom.Rectangle2D; + + +public class RectangleCollider extends Collider { + private final Rectangle2D shape; + + public RectangleCollider(Rectangle2D shape) { + this.shape = shape; + } + + @Override + public boolean checkCollision(Collider other) { + if (other instanceof RectangleCollider) { + RectangleCollider otherRectangle = (RectangleCollider) other; + + // Έλεγχος αν τα δύο ορθογώνια επικαλύπτονται + return shape.intersects(otherRectangle.shape); + } + return false; + } +} diff --git a/src/test/java/unittest/testcases/physics/CollisionManagerTests.java b/src/test/java/unittest/testcases/physics/CollisionManagerTests.java new file mode 100644 index 00000000..3fbf7ebd --- /dev/null +++ b/src/test/java/unittest/testcases/physics/CollisionManagerTests.java @@ -0,0 +1,39 @@ +package unittest.testcases.physics; + +import org.junit.jupiter.api.Test; +import java.awt.geom.Rectangle2D; +import tech.fastj.physics.RectangleCollider; +import tech.fastj.physics.CollisionManager; + +public class CollisionManagerTests { + + @Test + void testCollisionDetection() { + // Δημιουργία 2 colliders με επικαλυπτόμενα rectangles + RectangleCollider collider1 = new RectangleCollider(new Rectangle2D.Double(0, 0, 50, 50)); + RectangleCollider collider2 = new RectangleCollider(new Rectangle2D.Double(25, 25, 50, 50)); + + // Δημιουργία CollisionManager + CollisionManager collisionManager = new CollisionManager(); + collisionManager.addCollider(collider1); + collisionManager.addCollider(collider2); + + // Έλεγχος αν υπάρχει σύγκρουση + collisionManager.checkCollisions(); // Αναμένεται να εμφανίσει μήνυμα για σύγκρουση + } + + @Test + void testNoCollision() { + // Δημιουργία 2 colliders χωρίς επικαλυπτόμενα rectangles + RectangleCollider collider1 = new RectangleCollider(new Rectangle2D.Double(0, 0, 50, 50)); + RectangleCollider collider2 = new RectangleCollider(new Rectangle2D.Double(100, 100, 50, 50)); + + // Δημιουργία CollisionManager + CollisionManager collisionManager = new CollisionManager(); + collisionManager.addCollider(collider1); + collisionManager.addCollider(collider2); + + // Έλεγχος αν δεν υπάρχει σύγκρουση + collisionManager.checkCollisions(); // Δεν πρέπει να εμφανίσει μήνυμα σύγκρουσης + } +} \ No newline at end of file From 6449b6bacde8fefd4c0d1b141898cabe63872fd8 Mon Sep 17 00:00:00 2001 From: Anastasisargi12 <146873018+Anastasisargi12@users.noreply.github.com> Date: Sun, 12 Jan 2025 04:20:43 +0200 Subject: [PATCH 2/5] CollisionManagerTests.java --- .../testcases/physics/CollisionManagerTests.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/java/unittest/testcases/physics/CollisionManagerTests.java b/src/test/java/unittest/testcases/physics/CollisionManagerTests.java index 3fbf7ebd..af6d367e 100644 --- a/src/test/java/unittest/testcases/physics/CollisionManagerTests.java +++ b/src/test/java/unittest/testcases/physics/CollisionManagerTests.java @@ -9,31 +9,31 @@ public class CollisionManagerTests { @Test void testCollisionDetection() { - // Δημιουργία 2 colliders με επικαλυπτόμενα rectangles + RectangleCollider collider1 = new RectangleCollider(new Rectangle2D.Double(0, 0, 50, 50)); RectangleCollider collider2 = new RectangleCollider(new Rectangle2D.Double(25, 25, 50, 50)); - // Δημιουργία CollisionManager + CollisionManager collisionManager = new CollisionManager(); collisionManager.addCollider(collider1); collisionManager.addCollider(collider2); - // Έλεγχος αν υπάρχει σύγκρουση + collisionManager.checkCollisions(); // Αναμένεται να εμφανίσει μήνυμα για σύγκρουση } @Test void testNoCollision() { - // Δημιουργία 2 colliders χωρίς επικαλυπτόμενα rectangles + RectangleCollider collider1 = new RectangleCollider(new Rectangle2D.Double(0, 0, 50, 50)); RectangleCollider collider2 = new RectangleCollider(new Rectangle2D.Double(100, 100, 50, 50)); - // Δημιουργία CollisionManager + CollisionManager collisionManager = new CollisionManager(); collisionManager.addCollider(collider1); collisionManager.addCollider(collider2); - // Έλεγχος αν δεν υπάρχει σύγκρουση + collisionManager.checkCollisions(); // Δεν πρέπει να εμφανίσει μήνυμα σύγκρουσης } -} \ No newline at end of file +} From 742d8e9e7b7bf3390b4d171ad0e66928b6bfdaa0 Mon Sep 17 00:00:00 2001 From: Anastasisargi12 <146873018+Anastasisargi12@users.noreply.github.com> Date: Sun, 12 Jan 2025 04:21:07 +0200 Subject: [PATCH 3/5] Update CollisionManagerTests.java --- .../unittest/testcases/physics/CollisionManagerTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/unittest/testcases/physics/CollisionManagerTests.java b/src/test/java/unittest/testcases/physics/CollisionManagerTests.java index af6d367e..bc4fb167 100644 --- a/src/test/java/unittest/testcases/physics/CollisionManagerTests.java +++ b/src/test/java/unittest/testcases/physics/CollisionManagerTests.java @@ -19,7 +19,7 @@ void testCollisionDetection() { collisionManager.addCollider(collider2); - collisionManager.checkCollisions(); // Αναμένεται να εμφανίσει μήνυμα για σύγκρουση + collisionManager.checkCollisions(); } @Test @@ -34,6 +34,6 @@ void testNoCollision() { collisionManager.addCollider(collider2); - collisionManager.checkCollisions(); // Δεν πρέπει να εμφανίσει μήνυμα σύγκρουσης + collisionManager.checkCollisions(); } } From 918b0bcb6b44b293b8275591f69515e0522ef4ea Mon Sep 17 00:00:00 2001 From: Anastasisargi12 <146873018+Anastasisargi12@users.noreply.github.com> Date: Sun, 12 Jan 2025 04:21:45 +0200 Subject: [PATCH 4/5] Update RectangleCollider.java --- src/main/java/tech/fastj/physics/RectangleCollider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tech/fastj/physics/RectangleCollider.java b/src/main/java/tech/fastj/physics/RectangleCollider.java index 1b34e9b2..08fb5353 100644 --- a/src/main/java/tech/fastj/physics/RectangleCollider.java +++ b/src/main/java/tech/fastj/physics/RectangleCollider.java @@ -15,7 +15,7 @@ public boolean checkCollision(Collider other) { if (other instanceof RectangleCollider) { RectangleCollider otherRectangle = (RectangleCollider) other; - // Έλεγχος αν τα δύο ορθογώνια επικαλύπτονται + return shape.intersects(otherRectangle.shape); } return false; From dd90f4b6fc6ec0db0ba5cd03ff8581b8f1fe66b1 Mon Sep 17 00:00:00 2001 From: Anastasisargi12 <146873018+Anastasisargi12@users.noreply.github.com> Date: Sun, 12 Jan 2025 04:23:14 +0200 Subject: [PATCH 5/5] CollisionManager.java --- src/main/java/tech/fastj/physics/CollisionManager.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/tech/fastj/physics/CollisionManager.java b/src/main/java/tech/fastj/physics/CollisionManager.java index 34a427ad..a2014c32 100644 --- a/src/main/java/tech/fastj/physics/CollisionManager.java +++ b/src/main/java/tech/fastj/physics/CollisionManager.java @@ -11,7 +11,6 @@ public void addCollider(Collider collider) { } public boolean checkCollisions() { - // Ελέγχουμε για σύγκρουση μεταξύ όλων των colliders for (int i = 0; i < colliders.size(); i++) { for (int j = i + 1; j < colliders.size(); j++) { if (colliders.get(i).checkCollision(colliders.get(j))) { @@ -22,4 +21,4 @@ public boolean checkCollisions() { } return false; } -} \ No newline at end of file +}