diff --git a/src/de/bricked/game/Game.java b/src/de/bricked/game/Game.java index 204ee6ae718a7b571fed8b29ca1719cd2fa751c4..70be5b0257aef876cc49343938462da2224593cb 100644 --- a/src/de/bricked/game/Game.java +++ b/src/de/bricked/game/Game.java @@ -216,16 +216,16 @@ public class Game } } - public Point2D reflectOnPaddle(Point2D direction, double factor) + public Point2D reflectOnPaddle(Point2D direction, double factor, double gameHeight) { double influenceX = 0.75; double totalSpeed = Math.sqrt(direction.getX() * direction.getX() + direction.getY() * direction.getY()); totalSpeed = totalSpeed * speedIncreasePerPaddleHitFactor; - if(totalSpeed > ball.getType().getMaxTotalSpeed()) + if(totalSpeed > (gameHeight * ball.getType().getMaxTotalSpeed())) { - totalSpeed = ball.getType().getMaxTotalSpeed(); + totalSpeed = (gameHeight * ball.getType().getMaxTotalSpeed()); } double newXSpeed = totalSpeed * factor * influenceX; double newYSpeed = Math.sqrt(totalSpeed * totalSpeed - newXSpeed * newXSpeed); diff --git a/src/de/bricked/game/balls/Ball.java b/src/de/bricked/game/balls/Ball.java index 1ee76bf320fa81db752c6f541418baab1ef91a48..ccd841baf6618eb2262b80fcd448b4f4f71422e0 100644 --- a/src/de/bricked/game/balls/Ball.java +++ b/src/de/bricked/game/balls/Ball.java @@ -1,29 +1,33 @@ package de.bricked.game.balls; import javafx.geometry.Point2D; +import logger.LogLevel; +import logger.Logger; public class Ball { private BallType type; + private double gameHeight; private double ballRadius; private Point2D direction; private final double START_ANGLE = 40; - public Ball(BallType type) + public Ball(BallType type, double gameHeight) { this.type = type; - this.ballRadius = type.getRadius(); + this.gameHeight = gameHeight; + this.ballRadius = (gameHeight * type.getSizeFactor()) / 2; this.direction = new Point2D(0, 0); } public void startBallToRight() { - direction = new Point2D(type.getSpeedFactor() * Math.cos(START_ANGLE), - (type.getSpeedFactor() * Math.sin(START_ANGLE))); + direction = new Point2D((gameHeight * type.getSpeedFactor()) * Math.cos(START_ANGLE), - ((gameHeight * type.getSpeedFactor()) * Math.sin(START_ANGLE))); } public void startBallToLeft() { - direction = new Point2D(- (type.getSpeedFactor() * Math.cos(START_ANGLE)), - (type.getSpeedFactor() * Math.sin(START_ANGLE))); + direction = new Point2D(- ((gameHeight * type.getSpeedFactor()) * Math.cos(START_ANGLE)), - ((gameHeight * type.getSpeedFactor()) * Math.sin(START_ANGLE))); } public BallType getType() diff --git a/src/de/bricked/game/balls/BallType.java b/src/de/bricked/game/balls/BallType.java index aafcc02ee2ebaa072afa06f0427acebf52a122c7..ab9dc7fd38fb368220dab2aabc173d2473bc51f2 100644 --- a/src/de/bricked/game/balls/BallType.java +++ b/src/de/bricked/game/balls/BallType.java @@ -2,38 +2,31 @@ package de.bricked.game.balls; public enum BallType { - NORMAL("N", "#9CD8FF", 10, 4, 7), - EXPLOSIVE("A","#CC2E2E", 10, 6, 7), - NO_COLLISION("S","#2828CC", 10, 8, 8); + NORMAL("#9CD8FF", 0.03, 0.005, 0.015), + EXPLOSIVE("#CC2E2E", 0.03, 0.01, 0.02), + NO_COLLISION("#2828CC", 0.03, 0.015, 0.023); - private String ID; private String color; - private double radius; + private double sizeFactor; private double speedFactor; private double maxTotalSpeed; - private BallType(String ID, String color, double radius, double speedFactor, double maxTotalSpeed) - { - this.ID = ID; + private BallType(String color, double sizeFactor, double speedFactor, double maxTotalSpeed) + { this.color = color; - this.radius = radius; + this.sizeFactor = sizeFactor; this.speedFactor = speedFactor; this.maxTotalSpeed = maxTotalSpeed; - } + } - public String getID() - { - return ID; - } - public String getColor() { return color; } - public double getRadius() + public double getSizeFactor() { - return radius; + return sizeFactor; } public double getSpeedFactor() diff --git a/src/de/bricked/game/powerups/ball/ExplodeBallPowerUp.java b/src/de/bricked/game/powerups/ball/ExplodeBallPowerUp.java index bb3ca927a7bfdc681e21a94b0758e986bed02f11..09f8e50727fdb770ca508050b620c61704dbfd0d 100644 --- a/src/de/bricked/game/powerups/ball/ExplodeBallPowerUp.java +++ b/src/de/bricked/game/powerups/ball/ExplodeBallPowerUp.java @@ -17,12 +17,12 @@ public class ExplodeBallPowerUp extends PowerUp @Override public void activate(LevelController levelController, Game game) { - levelController.changeBall(new Ball(BallType.EXPLOSIVE)); + levelController.changeBall(new Ball(BallType.EXPLOSIVE, levelController.getGamePaneHeight())); } @Override public void deactivate(LevelController levelController, Game game) { - levelController.changeBall(new Ball(BallType.NORMAL)); + levelController.changeBall(new Ball(BallType.NORMAL, levelController.getGamePaneHeight())); } } \ No newline at end of file diff --git a/src/de/bricked/game/powerups/ball/NoCollisionBallPowerUp.java b/src/de/bricked/game/powerups/ball/NoCollisionBallPowerUp.java index c9c4f0e54161c377b4e3e2c7882a4ff9432d03f0..968b1f30a5abaa0c8f411f85bc03bc560b238494 100644 --- a/src/de/bricked/game/powerups/ball/NoCollisionBallPowerUp.java +++ b/src/de/bricked/game/powerups/ball/NoCollisionBallPowerUp.java @@ -17,12 +17,12 @@ public class NoCollisionBallPowerUp extends PowerUp @Override public void activate(LevelController levelController, Game game) { - levelController.changeBall(new Ball(BallType.NO_COLLISION)); + levelController.changeBall(new Ball(BallType.NO_COLLISION, levelController.getGamePaneHeight())); } @Override public void deactivate(LevelController levelController, Game game) { - levelController.changeBall(new Ball(BallType.NORMAL)); + levelController.changeBall(new Ball(BallType.NORMAL, levelController.getGamePaneHeight())); } } \ No newline at end of file diff --git a/src/de/bricked/ui/LevelController.java b/src/de/bricked/ui/LevelController.java index c8c400a979453cd7f71584e4bc03ff8c73b86765..05d8f39369fe81a996741288cacf7d886ad37891 100644 --- a/src/de/bricked/ui/LevelController.java +++ b/src/de/bricked/ui/LevelController.java @@ -413,6 +413,11 @@ public class LevelController { return labelPaddle; } + + public double getGamePaneHeight() + { + return gamePaneHeight; + } private void initTimer() { @@ -542,7 +547,7 @@ public class LevelController hitLocation = game.collides(ballPosition, paddlePosition, paddle.getWidth(), paddle.getHeight(), true); if(hitLocation != null && (hitLocation.equals(HitLocation.PADDLE) || hitLocation.equals(HitLocation.CORNER))) { - game.getBall().setDirection(game.reflectOnPaddle(game.getBall().getDirection(), game.getDistanceToPaddleCenter(ballPosition, paddlePosition, paddle.getWidth()))); + game.getBall().setDirection(game.reflectOnPaddle(game.getBall().getDirection(), game.getDistanceToPaddleCenter(ballPosition, paddlePosition, paddle.getWidth()), gamePaneHeight)); correctBallPosition(hitLocation, ballPosition, paddlePosition, paddle.getWidth(), paddle.getHeight()); @@ -734,7 +739,7 @@ public class LevelController { anchorPaneGame.getChildren().remove(stackPaneBall); - game.setBall(new Ball(ballType)); + game.setBall(new Ball(ballType, gamePaneHeight)); final Circle circle = new Circle(game.getBall().getBallRadius(), Color.web(game.getBall().getType().getColor())); circle.setEffect(new Lighting());