diff --git a/src/com/blarg/gdx/tilemap3d/tilemesh/TileMeshCollection.java b/src/com/blarg/gdx/tilemap3d/tilemesh/TileMeshCollection.java index ce48ff7..4d9ff46 100644 --- a/src/com/blarg/gdx/tilemap3d/tilemesh/TileMeshCollection.java +++ b/src/com/blarg/gdx/tilemap3d/tilemesh/TileMeshCollection.java @@ -49,6 +49,28 @@ public class TileMeshCollection { return addMesh(tileMesh); } + public int add( + Model[] models, + Color[] modelColors, + Vector3[] scaleModelsToSizes, + Vector3[] modelPositionOffsets, + Model collisionModel, + MaterialTileMapping textures, + byte opaqueSides, + byte lightValue, + boolean alpha, + float translucency, + Color color, + Vector3 scaleToSize, + Vector3 positionOffset, + Vector3 collisionPositionOffset + ) { + MultiModelTileMesh tileMesh = new MultiModelTileMesh( + models, modelColors, scaleModelsToSizes, modelPositionOffsets, collisionModel, textures, opaqueSides, lightValue, alpha, translucency, color, scaleToSize, positionOffset, collisionPositionOffset + ); + return addMesh(tileMesh); + } + public int addCube( TextureRegion topTexture, TextureRegion bottomTexture, diff --git a/src/com/blarg/gdx/tilemap3d/tilemesh/TileMeshCollectionLoader.java b/src/com/blarg/gdx/tilemap3d/tilemesh/TileMeshCollectionLoader.java index 3ca8067..fcfe6bf 100644 --- a/src/com/blarg/gdx/tilemap3d/tilemesh/TileMeshCollectionLoader.java +++ b/src/com/blarg/gdx/tilemap3d/tilemesh/TileMeshCollectionLoader.java @@ -171,6 +171,48 @@ public final class TileMeshCollectionLoader { } collection.add(model, collisionModel, materialMapping, opaqueSides, lightValue, alpha, translucency, color, scaleToSize, positionOffset, collisionPositionOffset); + + } else if (tileDef.models != null) { + int numModels = tileDef.models.size(); + Model[] submodels = new Model[numModels]; + Color[] colors = new Color[numModels]; + Vector3[] scaleToSizes = new Vector3[numModels]; + Vector3[] positionOffsets = new Vector3[numModels]; + + for (int j = 0; j < numModels; ++j) { + JsonTileSubModels subModelDef = tileDef.models.get(j); + + submodels[j] = models.get(subModelDef.submodel); + if (model == null) { + submodels[j] = loader.loadModel(Gdx.files.internal(subModelDef.submodel)); + models.put(subModelDef.submodel, submodels[j]); + } + + if (subModelDef.color == null) + colors[j] = new Color(Color.WHITE); + else + colors[j] = new Color(subModelDef.color); + + scaleToSizes[j] = subModelDef.scaleToSize; + positionOffsets[j] = subModelDef.positionOffset; + } + + collisionModel = null; + + if (tileDef.collisionModel != null) { + //override with a specific collision model + collisionModel = models.get(tileDef.collisionModel); + if (collisionModel == null) { + collisionModel = loader.loadModel(Gdx.files.internal(tileDef.collisionModel)); + models.put(tileDef.collisionModel, collisionModel); + } + } + if (tileDef.collisionShape != null) { + collisionModel = null; // using a shape instead! + throw new NotImplementedException(); + } + + collection.add(submodels, colors, scaleToSizes, positionOffsets, collisionModel, materialMapping, opaqueSides, lightValue, alpha, translucency, color, scaleToSize, positionOffset, collisionPositionOffset); } }