diff --git a/src/main/java/engine/physic/PhysicEngine.java b/src/main/java/engine/physic/PhysicEngine.java index 2341227beab1c1a8852017fa385672ae6e6dcc7b..72ccd4632b358bc44c412958b0858bd733cb2eb3 100644 --- a/src/main/java/engine/physic/PhysicEngine.java +++ b/src/main/java/engine/physic/PhysicEngine.java @@ -17,13 +17,11 @@ public class PhysicEngine implements Engine { restart(); } @Override - public void update(){ + public void update(){ //TODO: we cannot have the mention of "Ball" here so we need to find a way to do it without mentioning "Ball" for (PongObject pongObject: Kernel.gameObjects) { Coordinates2D previousPosition = pongObjectEntityHashMap.get(pongObject).getPosition(); pongObjectEntityHashMap.get(pongObject).updatePosition();// Updating of the associated movable position if(pongObject.getName().equals("Ball")){ - //System.out.println("Ball position: " + pongObjectEntityHashMap.get(pongObject).getPosition().getX() + " ; " + pongObjectEntityHashMap.get(pongObject).getPosition().getY()); - //System.out.println("Ball init position: " + pongObjectEntityHashMap.get(pongObject).getInitPosition()); for (PongObject po2: pongObjectEntityHashMap.keySet() ) { if(!po2.getName().equals("Ball")){ @@ -34,12 +32,16 @@ public class PhysicEngine implements Engine { Kernel.isCollision = true; System.out.println("Collision " + i); pongObjectEntityHashMap.get(pongObject).setPosition(previousPosition); + //TODO: add a method to Entity to increment the speed if(i % 10 == 0){ pongObjectEntityHashMap.get(pongObject).getSpeed().mul(2); } - pongObject.setSpeed(pongObjectEntityHashMap.get(pongObject).getSpeed()); - //pongObjectEntityHashMap.get(pongObject).getSpeed().mul(-1); - pongObject.updateSpeed(po2.doItHitHalf(pongObject.getPosition()), po2.isLeftRacket()); + pongObject.setSpeed(pongObjectEntityHashMap.get(pongObject).getSpeed()); // Updating of the pong object speed with the latest speed of the entity + + //po2 a racket will process the collision with the ball + po2.processCollision(pongObject); + + //Updating the Entity speed with the new speed of the pong object Ball pongObjectEntityHashMap.get(pongObject).setSpeed(pongObject.getSpeed()); pongObjectEntityHashMap.get(pongObject).updatePosition(); @@ -47,7 +49,6 @@ public class PhysicEngine implements Engine { } } } - //checkCollision(); pongObject.setPosition(pongObjectEntityHashMap.get(pongObject).getPosition()); // Updating of the pong object position } } diff --git a/src/main/java/pong/PongBall.java b/src/main/java/pong/PongBall.java index fd7bcbe0369bfe345440ccaef2597cef4a00838e..e0a2639b404561eaf550dabd7c232c187be31071 100644 --- a/src/main/java/pong/PongBall.java +++ b/src/main/java/pong/PongBall.java @@ -65,44 +65,7 @@ public class PongBall implements PongObject { this.speed = speed; } - /** - * Update the speed of the ball when it hits a paddle. - * If the ball hits the upper half of the paddle, the ball will go up - * If the ball hits the lower half of the paddle, the ball will go down - * @param isUpperHalf - */ - @Override - public void updateSpeed(boolean isUpperHalf, boolean isLeftRacket){ - System.out.println("updateSpeed"); - if(!isLeftRacket){ - System.out.println("isLeftRacket"); - if(isUpperHalf){ - if(this.speed.getY() > 0){ - this.speed.setY(this.speed.getY() * -1); - } - }else{ - if (this.speed.getY() < 0){ - this.speed.setY(this.speed.getY() * -1); - } - } - if (this.speed.getX() > 0){ - this.speed.setX(this.speed.getX() * -1); - } - } else { - if(isUpperHalf){ - if(this.speed.getY() > 0){ - this.speed.setY(this.speed.getY() * -1); - } - }else{ - if (this.speed.getY() < 0){ - this.speed.setY(this.speed.getY() * -1); - } - } - if (this.speed.getX() < 0){ - this.speed.setX(this.speed.getX() * -1); - } - } - } + @Override public String getName() { @@ -114,13 +77,15 @@ public class PongBall implements PongObject { return this.initPosition; } + + @Override - public boolean doItHitHalf(Coordinates2D ballPosition) { + public boolean isLeftRacket() { return false; } @Override - public boolean isLeftRacket() { - return false; + public void processCollision(PongObject po2) { + } } diff --git a/src/main/java/pong/PongObject.java b/src/main/java/pong/PongObject.java index 77a7fac81c358b1fbe828abff552c320380508ca..a927fd9140be5cccd3729469692f68c3a74a5772 100644 --- a/src/main/java/pong/PongObject.java +++ b/src/main/java/pong/PongObject.java @@ -16,15 +16,12 @@ public interface PongObject { public void setSpeed(Coordinates2D speed); - void updateSpeed(boolean isUpperHalf, boolean isLeftRacket); - public String getName(); Coordinates2D getInitPosition(); - boolean doItHitHalf(Coordinates2D ballPosition); - boolean isLeftRacket(); + void processCollision(PongObject po); } diff --git a/src/main/java/pong/PongRacket.java b/src/main/java/pong/PongRacket.java index 3d94fdb3607195d451dbdf1a1c746d335ff7bb40..d8d5329632b24b674104401202d22c2bf73b5a01 100644 --- a/src/main/java/pong/PongRacket.java +++ b/src/main/java/pong/PongRacket.java @@ -66,10 +66,6 @@ public class PongRacket implements PongObject { this.speed = speed; } - @Override - public void updateSpeed(boolean isUpperHalf, boolean isLeftRacket) { - - } @Override public String getName() { @@ -81,17 +77,48 @@ public class PongRacket implements PongObject { return initPosition; } - /** - * @param ballPosition - * @return true if the ball hit the upper half of the racket - */ @Override - public boolean doItHitHalf(Coordinates2D ballPosition) { - return ballPosition.getY() < this.position.getY() + this.height / 2; + public boolean isLeftRacket() { + return isLeftRacket; } + + /** + * Update the speed of the ball when it hits a paddle. + * If the ball hits the upper half of the paddle, the ball will go up + * If the ball hits the lower half of the paddle, the ball will go down + * + */ @Override - public boolean isLeftRacket() { - return isLeftRacket; + public void processCollision(PongObject po2) { + boolean isUpperHalf = po2.getPosition().getY() < this.position.getY() + this.height / 2; + if(!isLeftRacket){ + System.out.println("isLeftRacket"); + if(isUpperHalf){ + if(po2.getSpeed().getY() > 0){ + po2.getSpeed().setY(po2.getSpeed().getY() * -1); + } + }else{ + if (po2.getSpeed().getY() < 0){ + po2.getSpeed().setY(po2.getSpeed().getY() * -1); + } + } + if (po2.getSpeed().getX() > 0){ + po2.getSpeed().setX(po2.getSpeed().getX() * -1); + } + } else { + if(isUpperHalf){ + if(po2.getSpeed().getY() > 0){ + po2.getSpeed().setY(po2.getSpeed().getY() * -1); + } + }else{ + if (po2.getSpeed().getY() < 0){ + po2.getSpeed().setY(po2.getSpeed().getY() * -1); + } + } + if (po2.getSpeed().getX() < 0){ + po2.getSpeed().setX(po2.getSpeed().getX() * -1); + } + } } } diff --git a/src/test/java/pong/PongBallTest.java b/src/test/java/pong/PongBallTest.java index 805ca0b9764807cf9a3c4f54a05d7740170d4152..bd204bcb074478dadd01b7c09404581753c5a27b 100644 --- a/src/test/java/pong/PongBallTest.java +++ b/src/test/java/pong/PongBallTest.java @@ -13,15 +13,6 @@ class PongBallTest { */ @Test void testUpdateSpeedUpperHalfHit() { - PongBall pongBall = new PongBall("ball", "src/main/resources/ball.png", new Coordinates2D(0, 0), 10, 10); - pongBall.setSpeed(new Coordinates2D(1, 1)); - pongBall.updateSpeed(true, true); - assertEquals(-1, pongBall.getSpeed().getY()); - assertEquals(-1 , pongBall.getSpeed().getX()); - pongBall.setSpeed(new Coordinates2D(1, -1)); - pongBall.updateSpeed(false, true); - assertEquals(-1, pongBall.getSpeed().getX()); - assertEquals(1 , pongBall.getSpeed().getY()); } } \ No newline at end of file