Skip to content

Commit

Permalink
early commit of collision detection for fastJ physics
Browse files Browse the repository at this point in the history
  • Loading branch information
Anastasisargi12 committed Jan 12, 2025
1 parent e31abe5 commit 78e5838
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,6 @@
exports tech.fastj.animation.sprite.event;
exports tech.fastj.gameloop;
exports tech.fastj.gameloop.event;

exports tech.fastj.physics;
}
5 changes: 5 additions & 0 deletions src/main/java/tech/fastj/physics/Collider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package tech.fastj.physics;

public abstract class Collider {
public abstract boolean checkCollision(Collider other);
}
25 changes: 25 additions & 0 deletions src/main/java/tech/fastj/physics/CollisionManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package tech.fastj.physics;

import java.util.ArrayList;
import java.util.List;

public class CollisionManager {
private List<Collider> 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;
}
}
23 changes: 23 additions & 0 deletions src/main/java/tech/fastj/physics/RectangleCollider.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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(); // Δεν πρέπει να εμφανίσει μήνυμα σύγκρουσης
}
}

0 comments on commit 78e5838

Please sign in to comment.