package zero1hd.rhythmbullet.util;

import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.utils.Disposable;

public interface AssetPack extends Disposable {
	
	/**
	 * Called right after the game instance is created and passed to LWJGL. This method is called once for you to instantiate things for later use but require Libgdx functions.
	 */
	public void initiate();
	
	/**
	 * Game manager calls this when it needs to load textures.
	 */
	public void queueTextures(AssetManager assetManager);
	
	/**
	 * Game manager calls this when it needs to load sound effects.
	 */
	public void queueSFX(AssetManager assetManager);
	
	/**
	 * Game manager calls this when it needs to load particles.
	 */
	public void queueParticles(AssetManager assetManager);
	
	/**
	 * Game manager calls when it needs to load particles. Usually called after textures are loaded since the skin requires the other assets.
	 * @param skin the skin object to set up.
	 */
	public void setupSkin(Skin skin);
	
	/**
	 * Game manager calls when it needs the fonts to be generated. Usually called right before setting up the skin itself since items in the skin need fonts.
	 */
	public void generateFonts(Skin skin);
	
	/**
	 * Game manager calls this once all assets are loaded. This function should be used to make some in-code adjustments to assets that will be consistent throughout the game for that run.
	 * @param assetManager gives you access to the assets to modify.
	 */
	public void complete(AssetManager assetManager);
}
