public void levelUp() {
    try {
      int lastLevel = level;
      super.levelUp();
      if (lastLevel != level) {
        helth =
            (int) ((Math.pow(2.5, level - 1)) - Math.pow(2.0, level - 1) + (40 * level) + 40)
                - (maxHelth - helth);
        maxHelth =
            (int) ((Math.pow(2.5, level - 1)) - Math.pow(2.0, level - 1) + (40 * level) + 40);
        buildImages.clear();
        costs.clear();

        if (level >= 1) {
          MagicSpirit m = new MagicSpirit(null, null);
          m.level = level - 2;
          m.levelUp();
          buildImages.add(GameRunner.getMagicSpirit());
          costs.add(50);
          buildNames.add("Train " + m.firstName);

          Mage ma = new Mage(null, null);
          ma.level = level - 2;
          ma.levelUp();
          buildImages.add(GameRunner.getMage());
          costs.add(100);
          buildNames.add("Train " + ma.firstName);

          buildImages.add(ImageIO.read(new File("src/+1.png")));
          costs.add((int) (Math.pow(3.4, level) + (300 * level) + 196.6));
          buildNames.add("Level Up to gain better units");

          buildImages.add(GameRunner.getAutoMine());
          costs.add(0);
          buildNames.add("Automatically mine gold with any units that can this turn");
        }
        if (level >= 2) {
          Summoner s = new Summoner(null, null);
          buildImages.add(GameRunner.getSummoner());
          costs.add(100);
          buildNames.add("Train " + s.name + " to summon units into battle");
        }
        if (level >= 3) {
          ArchMage am = new ArchMage(null, null);
          am.level = level - 4;
          am.levelUp();
          buildImages.add(GameRunner.getArchMage());
          costs.add(300);
          buildNames.add("Train " + am.firstName);
        }
      }
    } catch (Exception e) {
      LogHandling.logError("Can't add image  " + e);
    }
  }