From 0260286f96aa3370be106f1a37c0cbcebce493fc Mon Sep 17 00:00:00 2001 From: gered Date: Tue, 15 Apr 2014 10:09:00 -0400 Subject: [PATCH] add MaterialTileMappingJsonLoader --- .../MaterialTileMappingJsonLoader.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/main/java/ca/blarg/gdx/tilemap3d/json/tilemesh/MaterialTileMappingJsonLoader.java diff --git a/src/main/java/ca/blarg/gdx/tilemap3d/json/tilemesh/MaterialTileMappingJsonLoader.java b/src/main/java/ca/blarg/gdx/tilemap3d/json/tilemesh/MaterialTileMappingJsonLoader.java new file mode 100644 index 0000000..f107af5 --- /dev/null +++ b/src/main/java/ca/blarg/gdx/tilemap3d/json/tilemesh/MaterialTileMappingJsonLoader.java @@ -0,0 +1,52 @@ +package ca.blarg.gdx.tilemap3d.json.tilemesh; + +import ca.blarg.gdx.graphics.atlas.TextureAtlas; +import ca.blarg.gdx.loaders.textureatlas.TextureAtlasJsonLoader; +import ca.blarg.gdx.tilemap3d.tilemesh.MaterialTileMapping; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.utils.Json; + +public class MaterialTileMappingJsonLoader { + public static JsonMaterialMapping load(FileHandle file) { + Json json = new Json(); + return json.fromJson(JsonMaterialMapping.class, file); + } + + public static MaterialTileMapping create(JsonMaterialMapping definition) { + return create(definition, null); + } + + public static MaterialTileMapping create(JsonMaterialMapping definition, AssetManager assetManager) { + if (definition.materials == null || definition.materials.size() == 0) + throw new RuntimeException("No material mappings defined."); + + TextureAtlas atlas; + if (assetManager != null) + atlas = assetManager.get(definition.textureAtlas, TextureAtlas.class); + else + atlas = TextureAtlasJsonLoader.loadAndCreate(Gdx.files.internal(definition.textureAtlas)); + + MaterialTileMapping materialMapping = new MaterialTileMapping(); + for (int i = 0; i < definition.materials.size(); ++i) { + JsonMaterialMapping.Material mapping = definition.materials.get(i); + materialMapping.add( + mapping.name, atlas.get(mapping.tile), + mapping.minU, mapping.maxU, mapping.minV, mapping.maxV + ); + } + + return materialMapping; + } + + public static MaterialTileMapping loadAndCreate(FileHandle file) { + JsonMaterialMapping definition = load(file); + return create(definition); + } + + public static MaterialTileMapping loadAndCreate(FileHandle file, AssetManager assetManager) { + JsonMaterialMapping definition = load(file); + return create(definition, assetManager); + } +}