package com.github.czyzby.autumn.mvc.component.asset.dto.provider;
import com.badlogic.gdx.utils.ObjectMap;
import com.github.czyzby.autumn.mvc.component.asset.AssetService;
import com.github.czyzby.kiwi.util.gdx.asset.lazy.provider.ObjectProvider;
import com.github.czyzby.kiwi.util.gdx.collection.GdxMaps;
/** Asset provider for map injections.
*
* @author MJ */
public class ObjectMapAssetProvider implements ObjectProvider<ObjectMap<String, Object>> {
private final AssetService assetService;
private final String[] assetPaths;
private final String[] assetKeys;
private final Class<?> assetClass;
private final boolean loadOnDemand;
public ObjectMapAssetProvider(final AssetService assetService, final String assetPaths[], final String assetKeys[],
final Class<?> assetClass, final boolean loadOnDemand) {
this.assetService = assetService;
this.assetPaths = assetPaths;
this.assetKeys = assetKeys.length == 0 ? assetPaths : assetKeys;
this.assetClass = assetClass;
this.loadOnDemand = loadOnDemand;
}
@Override
public ObjectMap<String, Object> provide() {
final ObjectMap<String, Object> assets = GdxMaps.newObjectMap();
for (int assetIndex = 0; assetIndex < assetPaths.length; assetIndex++) {
if (loadOnDemand) {
assets.put(assetKeys[assetIndex], assetService.finishLoading(assetPaths[assetIndex], assetClass));
continue;
}
if (!assetService.isLoaded(assetPaths[assetIndex])) {
// LibGDX method that should load a specific asset immediately does pretty much the same.
assetService.finishLoading();
}
assets.put(assetKeys[assetIndex], assetService.get(assetPaths[assetIndex], assetClass));
}
return assets;
}
}