UiAssets.java

package io.github.neonteam10.ui;

import com.badlogic.gdx.assets.AssetDescriptor;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;

/**
 * A class which handles the asynchronous loading of the UI assets.
 */
public class UiAssets {
    private final AssetManager assetManager;
    private final AssetDescriptor<FreeTypeFontGenerator> fontDescriptor;
    private final AssetDescriptor<Texture> spritesheetDescriptor;
    private BitmapFont largeFont;
    private BitmapFont smallFont;
    private Texture spritesheet;

    public UiAssets(AssetManager assetManager) {
        this.assetManager = assetManager;

        // Queue the font loading.
        fontDescriptor = new AssetDescriptor<>("ui/font.ttf", FreeTypeFontGenerator.class);
        assetManager.load(fontDescriptor);

        // Queue the spritesheet loading.
        spritesheetDescriptor = new AssetDescriptor<>("ui/spritesheet.png", Texture.class);
        assetManager.load(spritesheetDescriptor);
    }

    /**
     * Creates a bitmap font from a given freetype font and size.
     *
     * @param generator the freetype font
     * @param size      the desired size
     * @return a {@link BitmapFont}
     */
    private BitmapFont createFont(FreeTypeFontGenerator generator, int size) {
        var parameters = new FreeTypeFontGenerator.FreeTypeFontParameter();
        parameters.size = size;
        return generator.generateFont(parameters);
    }

    /**
     * Polls and stores and newly loaded assets.
     */
    public void update() {
        // Check if the font file has been loaded.
        if (largeFont == null && assetManager.isLoaded(fontDescriptor)) {
            // Generate bitmap fonts from the truetype font.
            var generator = assetManager.get(fontDescriptor);
            largeFont = createFont(generator, 72);
            smallFont = createFont(generator, 32);
        }

        // Check if the spritesheet has been loaded.
        if (spritesheet == null && assetManager.isLoaded(spritesheetDescriptor)) {
            spritesheet = assetManager.get(spritesheetDescriptor);
        }
    }

    public boolean hasFontsLoaded() {
        return largeFont != null;
    }

    public boolean hasSpritesheetLoaded() {
        return spritesheet != null;
    }

    public BitmapFont getLargeFont() {
        return largeFont;
    }

    public BitmapFont getSmallFont() {
        return smallFont;
    }

    public Texture getSpritesheet() {
        return spritesheet;
    }
}