package codechicken.lib.tool.module; import codechicken.lib.render.QBImporter; import joptsimple.OptionParser; import joptsimple.OptionSet; import java.io.File; import static java.util.Arrays.asList; public class ModuleQBConverter extends JOptModule { public ModuleQBConverter() { parser.acceptsAll(asList("?", "h", "help"), "Show the help"); parser.acceptsAll(asList("i", "input"), "comma separated list of paths to models (.qb or directories)").withRequiredArg().ofType(File.class).withValuesSeparatedBy(',').required(); parser.acceptsAll(asList("o", "out"), "Output Directory").withRequiredArg().ofType(File.class); parser.acceptsAll(asList("o2", "textureplanes"), "2nd level optimisation. Merges coplanar polygons. Increases texture size"); parser.acceptsAll(asList("s", "squaretextures"), "Produce square textures"); parser.acceptsAll(asList("t", "mergetextures"), "Use the same texture for all models"); parser.acceptsAll(asList("r", "scalemc"), "Resize model to mc standard (shrink by factor of 16)"); } protected void main(OptionParser parser, OptionSet options) { int flags = 0; if (options.has("o2")) { flags |= QBImporter.TEXTUREPLANES; } if (options.has("s")) { flags |= QBImporter.SQUARETEXTURE; } if (options.has("t")) { flags |= QBImporter.MERGETEXTURES; } if (options.has("r")) { flags |= QBImporter.SCALEMC; } File[] input = options.valuesOf("input").toArray(new File[0]); File[] outDir = new File[input.length]; if (options.has("out")) { File output = (File) options.valueOf("out"); if (output.isFile()) { throw new RuntimeException("Output Path is not a directory"); } if (!output.exists()) { output.mkdirs(); } for (int i = 0; i < input.length; i++) { outDir[i] = output; } } else { for (int i = 0; i < input.length; i++) { outDir[i] = input[i].isDirectory() ? input[i] : input[i].getParentFile(); } } for (int i = 0; i < input.length; i++) { File file = input[i]; if (file.isDirectory()) { for (File file2 : file.listFiles()) { if (file2.getName().endsWith(".qb")) { convert(file2, outDir[i], flags); } } } else { convert(file, outDir[i], flags); } } } private void convert(File in, File outDir, int flags) { System.out.println("Converting: " + in.getName()); QBImporter.RasterisedModel m = QBImporter.loadQB(in).toRasterisedModel(flags); m.export(new File(outDir, in.getName().replace(".qb", ".obj")), outDir); } @Override public String name() { return "QBConverter"; } }