/** optimizes obstacle list vertically */ public void optimizeObstaclesVertically() { boolean changed = false; if (!tileObstacles.isEmpty()) { Obstacle comparedObstacle1, comparedObstacle2; for (int i = 0; i < tileObstacles.size(); i++) { comparedObstacle1 = tileObstacles.get(i); for (int j = i + 1; j < tileObstacles.size(); j++) { comparedObstacle2 = tileObstacles.get(j); if (comparedObstacle1.getX() == comparedObstacle2.getX()) { if (comparedObstacle1.getWidth() == comparedObstacle2.getWidth()) { if (comparedObstacle1.getY() + comparedObstacle1.getHeight() == comparedObstacle2.getY()) { // obstacle1 above obstacle2 tileObstacles.add( new Obstacle( comparedObstacle1.getX(), comparedObstacle1.getY(), comparedObstacle1.getWidth(), comparedObstacle1.getHeight() + comparedObstacle2.getHeight())); tileObstacles.remove(comparedObstacle1); tileObstacles.remove(comparedObstacle2); changed = true; } if (comparedObstacle1.getY() - comparedObstacle2.getHeight() == comparedObstacle2.getY()) { // obstacle2 above obstacle1 tileObstacles.add( new Obstacle( comparedObstacle1.getX(), comparedObstacle2.getY(), comparedObstacle1.getWidth(), comparedObstacle1.getHeight() + comparedObstacle2.getHeight())); tileObstacles.remove(comparedObstacle1); tileObstacles.remove(comparedObstacle2); changed = true; } } } } } } // System.out.println(tileObstacles.size()); if (changed) optimizeObstaclesVertically(); }