private static ArrayList<Ball> makeBalls(EngineSettings engineSettings)
	{
		ArrayList<Ball> balls = new ArrayList<Ball>();
		ArrayList<Point> ballLocations = new ArrayList<>();
		
		// So balls aren't placed directly beside another we add 3 pixels as a spacer.
		// To ensure we don't have any overlapping balls we generate all possible locations beforehand then shuffle them.
		for(int x = 0; x < engineSettings.getWidth() - engineSettings.getBallSize(); x += engineSettings.getBallSize() + 3)
			for(int y = 0; y < engineSettings.getHeight() - engineSettings.getBallSize() * 5; y += engineSettings.getBallSize() + 3)
				ballLocations.add(new Point(x, y));
		
		// Shuffle the ball locations.
		long seed = System.nanoTime();
		Collections.shuffle(ballLocations, new Random(seed));
		
		// Create map of balls.
		for(int i = 0; i < engineSettings.getBallCount() && i < ballLocations.size(); ++i)
		{
			// Create a color as a lookup key.
			Color color = new Color((float)Math.random(), (float)Math.random(), (float)Math.random());
			
			balls.add(new Ball(ballLocations.get(i).getX(), ballLocations.get(i).getY(), 
					Math.random() * 360,
					engineSettings.getMomentum(),
					engineSettings.getWidth(), engineSettings.getHeight() + (engineSettings.getBallSize() * 2),
					engineSettings.getBallSize(),
					color));
		}
		
		return balls;
	}