package net.fourbytes.shadow.map;
import com.badlogic.gdx.Files;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.assets.loaders.FileHandleResolver;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.utils.Array;
import net.fourbytes.shadow.Level;
public class Converter {
protected static FileHandleResolver absoluteResolver = new FileHandleResolver() {
@Override
public FileHandle resolve(String fileName) {
return Gdx.files.absolute(fileName);
}
};
public static Array<Converter> list = new Array<Converter>();
public static boolean convertOnly = false;
public FileHandle input;
public FileHandle output;
public Converter(FileHandle input, FileHandle output) {
this.input = input;
this.output = output;
}
public static void convertAll() {
for (Converter converter : list) {
converter.convert();
}
list.clear();
}
public void convert() {
Level level = new Level();
try {
TmxMapLoader tml;
if (input.type() == Files.FileType.Internal) {
tml = new TmxMapLoader();
} else if (input.type() == Files.FileType.Absolute) {
tml = new TmxMapLoader(absoluteResolver);
} else {
throw new ConversionFailedException("Unknown input file LibGDX type!");
}
//TODO Custom TmxMapLoader that loads TiledMaps without loading tileset images
level.initTilED(tml.load(input.path()));
level.ready = true;
} catch (Throwable t) {
t.printStackTrace();
}
level.fillLayer(0);
System.gc();
ShadowMap shadowMap = ShadowMap.createNewFrom(level);
shadowMap.save(output);
System.out.println("Conversion succeeded!");
}
private class ConversionFailedException extends RuntimeException {
public ConversionFailedException(String message) {
super(message);
}
public ConversionFailedException(String message, Throwable cause) {
super(message, cause);
}
}
}