/**
   * Convenience method for generating a font, and then writing the fnt and png files. Writing a
   * generated font to files allows the possibility of only generating the fonts when they are
   * missing, otherwise loading from a previously generated file.
   *
   * @param fontFile
   * @param fontSize
   */
  private AnimvsBitmapFont generateFontWriteFiles(
      String fontName,
      FileHandle fontFile,
      int fontSize,
      int pageWidth,
      int pageHeight,
      String characters) {
    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

    PixmapPacker packer = new PixmapPacker(pageWidth, pageHeight, Pixmap.Format.RGBA8888, 1, false);

    FreeTypeFontParameter fontParameters = new FreeTypeFontParameter();
    fontParameters.characters = characters;
    fontParameters.size = fontSize;
    fontParameters.minFilter = TextureFilter.Nearest;
    fontParameters.magFilter = TextureFilter.Linear;
    fontParameters.packer = packer;

    // FreeTypeFontGenerator.FreeTypeBitmapFontData fontData =
    // generator.generateData(fontSize, characters, false, packer);

    FreeTypeFontGenerator.FreeTypeBitmapFontData fontData = generator.generateData(fontParameters);
    Array<PixmapPacker.Page> pages = packer.getPages();
    Array<TextureRegion> texRegions = new Array<TextureRegion>(pages.size);
    for (int i = 0; i < pages.size; i++) {
      PixmapPacker.Page p = pages.get(i);
      Texture tex =
          new Texture(
              new PixmapTextureData(p.getPixmap(), p.getPixmap().getFormat(), false, false, true)) {
            @Override
            public void dispose() {
              super.dispose();
              getTextureData().consumePixmap().dispose();
            }
          };
      tex.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);
      texRegions.add(new TextureRegion(tex));
    }
    AnimvsBitmapFont font = new AnimvsBitmapFont(fontData, texRegions, true);
    setDefaultFilter(font);

    saveFontToFile(font, fontSize, fontName, packer);
    generator.dispose();
    packer.dispose();
    return font;
  }