diff --git a/src/main/java/ca/blarg/gdx/tilemap3d/json/tilemesh/TileMeshCollectionLoader.java b/src/main/java/ca/blarg/gdx/tilemap3d/json/tilemesh/TileMeshCollectionLoader.java new file mode 100644 index 0000000..7be07c1 --- /dev/null +++ b/src/main/java/ca/blarg/gdx/tilemap3d/json/tilemesh/TileMeshCollectionLoader.java @@ -0,0 +1,53 @@ +package ca.blarg.gdx.tilemap3d.json.tilemesh; + +import ca.blarg.gdx.graphics.atlas.TextureAtlas; +import ca.blarg.gdx.tilemap3d.tilemesh.MaterialTileMapping; +import ca.blarg.gdx.tilemap3d.tilemesh.TileMesh; +import ca.blarg.gdx.tilemap3d.tilemesh.TileMeshCollection; +import com.badlogic.gdx.assets.AssetDescriptor; +import com.badlogic.gdx.assets.AssetLoaderParameters; +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.assets.loaders.AsynchronousAssetLoader; +import com.badlogic.gdx.assets.loaders.FileHandleResolver; +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.utils.Array; + +@SuppressWarnings("unchecked") +public class TileMeshCollectionLoader extends AsynchronousAssetLoader { + public static class TileMeshCollectionParameters extends AssetLoaderParameters { + } + + public TileMeshCollectionLoader(FileHandleResolver resolver) { + super(resolver); + } + + JsonTileMeshCollection definition; + TileMeshCollection collection; + + @Override + public Array getDependencies(String fileName, FileHandle file, TileMeshCollectionParameters parameter) { + definition = TileMeshCollectionJsonLoader.load(file); + Array deps = new Array(); + + if (definition.materials != null) + deps.add(new AssetDescriptor(definition.materials, MaterialTileMapping.class)); + if (definition.textureAtlas != null) + deps.add(new AssetDescriptor(definition.textureAtlas, TextureAtlas.class)); + + for (String tileMeshFile : definition.tiles) { + deps.add(new AssetDescriptor(tileMeshFile, TileMesh.class)); + } + + return deps; + } + + @Override + public void loadAsync(AssetManager manager, String fileName, FileHandle file, TileMeshCollectionParameters parameter) { + collection = TileMeshCollectionJsonLoader.create(definition, manager); + } + + @Override + public TileMeshCollection loadSync(AssetManager manager, String fileName, FileHandle file, TileMeshCollectionParameters parameter) { + return collection; + } +}