package com.github.czyzby.autumn.mvc.component.asset.dto.provider; import com.github.czyzby.autumn.mvc.component.asset.AssetService; import com.github.czyzby.kiwi.util.gdx.asset.lazy.provider.ObjectProvider; /** Default provider for delayed asset injections. * * @author MJ */ public class AssetProvider implements ObjectProvider<Object> { private final AssetService assetService; private final String assetPath; private final Class<?> assetClass; private final boolean loadOnDemand; public AssetProvider(final AssetService assetService, final String assetPath, final Class<?> assetClass, final boolean loadOnDemand) { this.assetService = assetService; this.assetPath = assetPath; this.assetClass = assetClass; this.loadOnDemand = loadOnDemand; } @Override public Object provide() { if (loadOnDemand) { return assetService.finishLoading(assetPath, assetClass); } if (!assetService.isLoaded(assetPath)) { // This will also schedule loading of the asset if it was previously unloaded. while (!assetService.isLoaded(assetPath)) { // Believe it or not, this is what LibGDX AssetManager does in finishLoading(String). assetService.update(); } } return assetService.get(assetPath, assetClass); } }