Skip to content
Snippets Groups Projects
Commit 239ce354 authored by bosskkev's avatar bosskkev
Browse files

Modification de la maj des nouvelles directions de la balle en fonction de la...

Modification de la maj des nouvelles directions de la balle en fonction de la racket en une seule méthode.
parent 0a57b4e1
No related branches found
No related tags found
No related merge requests found
Pipeline #25147 passed
......@@ -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
}
}
......
......@@ -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) {
}
}
......@@ -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);
}
......@@ -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);
}
}
}
}
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment