From 131dedb22e761bc2ce2887c51f07a5095dc12d71 Mon Sep 17 00:00:00 2001 From: rxbn_ Date: Sat, 7 Dec 2019 23:58:50 +0100 Subject: [PATCH] Ball - reflectOnPaddle - structuring and comments --- src/break_out/model/Ball.java | 48 ++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/src/break_out/model/Ball.java b/src/break_out/model/Ball.java index a60e79c..c44f4b8 100644 --- a/src/break_out/model/Ball.java +++ b/src/break_out/model/Ball.java @@ -140,29 +140,43 @@ public class Ball implements IBall { /** * Ball got hit by Paddle paddle * @param paddle hitbox mechanism of paddle - * @todo implementation */ - public void reflectOnPaddle(Paddle p) { - // get the Position of the middle of the paddle - Position newOffset = new Position( - p.getPosition().getX() + p.getWidth() / 2.0,//the middle of the x coordinates - p.getPosition().getY() + p.getHeight() / 2.0);//the middle of the y coordinates + public void reflectOnPaddle(Paddle paddle) { + // reflection point / offset point + Position reflectionPoint = new Position( + paddle.getPosition().getX() + (paddle.getWidth() / 2.0), + paddle.getPosition().getY() + (paddle.getHeight() / 2.0) + ); + // new direction vector; assignment not here + Vector2D reflectionVector; + + // no general solution, estimation required + // only two paddles defined in the game design, therefore greater or smaller than middle of screen + //deciding if the paddle is at the top or bottom to adjust if its +or- y direction - if (p.getPosition().getY() == 0) { - newOffset.setY(newOffset.getY() - Constants.REFLECTION_OFFSET);// paddle at the top with negative direction - } else { - newOffset.setY(newOffset.getY() + Constants.REFLECTION_OFFSET); // the paddle at the bottom with positive direction + if (paddle.getPosition().getY() <= Constants.SCREEN_HEIGHT) { + // top paddle + reflectionPoint.setY(reflectionPoint.getY() - Constants.REFLECTION_OFFSET); + } else { + // bottom paddle + reflectionPoint.setY(reflectionPoint.getY() + Constants.REFLECTION_OFFSET); } - // calculating the center of the ball by dividing by zero + // calculating the center of the ball; needed for correct vector calculation Position ballCenter = new Position( - position.getX() + Constants.BALL_DIAMETER/2.0, //the middle of the x coordinates - position.getY() + Constants.BALL_DIAMETER/2.0); //the middle of the y coordinates + position.getX() + (Constants.BALL_DIAMETER/2.0), + position.getY() + (Constants.BALL_DIAMETER/2.0) + ); - // The direction is set to the middle of the offset point and the ball - direction = new Vector2D(newOffset, ballCenter); - // rescaling to adjust the balls speed - direction.rescale(); + // The direction is set to the vector between offset point and the ball's center + reflectionVector = new Vector2D(reflectionPoint, ballCenter); + + // normalize vector + reflectionVector.rescale(); + + // replace direction vector + this.direction.setDx(reflectionVector.getDx()); + this.direction.setDy(reflectionVector.getDy()); } }