public static boolean hasCollided(PlayerModel player, ProjectileModel projectile) {
    CartesianPosition pos = projectile.calculatePosition(System.currentTimeMillis());

    int projectileYTip =
        (int) (pos.y + projectile.getLength() / 2 * Math.sin(projectile.velocity.getDirection()));
    int projectileXTip =
        (int) (pos.x + projectile.getLength() / 2 * Math.cos(projectile.velocity.getDirection()));
    int playerLeft = player.x - 32 + 12;
    int playerBot = player.y - 32;
    int playerRight = player.x + 10 * 4 - 32 + 12;
    int playerTop = player.y + 16 * 4 - 32;
    return playerLeft < projectileXTip
        && projectileXTip < playerRight
        && playerBot < projectileYTip
        && projectileYTip < playerTop;
  }
  public static boolean hasCollided(ObstacleModel obstacle, ProjectileModel projectile) {
    CartesianPosition pos = projectile.calculatePosition(System.currentTimeMillis());

    int projectileYTip =
        (int) (pos.y + projectile.getLength() / 2 * Math.sin(projectile.velocity.getDirection()));
    int projectileXTip =
        (int) (pos.x + projectile.getLength() / 2 * Math.cos(projectile.velocity.getDirection()));

    Box box = new Box(obstacle.getPosition(), obstacle.getWidth(), obstacle.getHeight());
    float obstacleLeft = box.getLeft();
    float obstacleTop = box.getTop();
    float obstacleRight = box.getRight();
    float obstacleBot = box.getBot();
    return obstacleLeft <= projectileXTip
        && projectileXTip <= obstacleRight
        && obstacleBot <= projectileYTip
        && projectileYTip <= obstacleTop;
  }