From e4c29c383fb794fa549c0dece1705767b7bf62b7 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Mon, 23 Jan 2017 20:46:48 +0100
Subject: [PATCH] Fixed #60 , Fixed #59

---
 src/de/bricked/game/Game.java                 |  6 ++---
 src/de/bricked/game/balls/Ball.java           | 12 ++++++---
 src/de/bricked/game/balls/BallType.java       | 27 +++++++------------
 .../powerups/ball/ExplodeBallPowerUp.java     |  4 +--
 .../powerups/ball/NoCollisionBallPowerUp.java |  4 +--
 src/de/bricked/ui/LevelController.java        |  9 +++++--
 6 files changed, 32 insertions(+), 30 deletions(-)

diff --git a/src/de/bricked/game/Game.java b/src/de/bricked/game/Game.java
index 204ee6a..70be5b0 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 1ee76bf..ccd841b 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 aafcc02..ab9dc7f 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 bb3ca92..09f8e50 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 c9c4f0e..968b1f3 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 c8c400a..05d8f39 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());
-- 
GitLab