Upgraded tools:map-viewer to use cli args

Upgraded tools:map-viewer to use cli args
Deprecated old-style MapViewer constructors
Replaced old-style logging with new
This commit is contained in:
Collin Smith
2020-11-20 23:34:27 -08:00
parent fae6605e13
commit 7a2dfeb18a
2 changed files with 104 additions and 7 deletions

View File

@ -2,7 +2,7 @@
<configuration default="false" name="Map Viewer" type="Application" factoryName="Application" singleton="true"> <configuration default="false" name="Map Viewer" type="Application" factoryName="Application" singleton="true">
<option name="MAIN_CLASS_NAME" value="com.riiablo.map.MapViewer" /> <option name="MAIN_CLASS_NAME" value="com.riiablo.map.MapViewer" />
<module name="riiablo.tools.map-viewer" /> <module name="riiablo.tools.map-viewer" />
<option name="PROGRAM_PARAMETERS" value="&quot;C:\Program Files (x86)\Steam\steamapps\common\Diablo II&quot; 0 0 0" /> <option name="PROGRAM_PARAMETERS" value="-d2 &quot;C:\Program Files (x86)\Steam\steamapps\common\Diablo II&quot; -s 0 -a 0 -d 0" />
<option name="VM_PARAMETERS" value="-ea" /> <option name="VM_PARAMETERS" value="-ea" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/assets" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/assets" />
<method v="2"> <method v="2">

View File

@ -1,5 +1,11 @@
package com.riiablo.map; package com.riiablo.map;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.math.NumberUtils;
import com.artemis.BaseSystem; import com.artemis.BaseSystem;
@ -25,6 +31,7 @@ import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.glutils.ShaderProgram; import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.utils.UIUtils; import com.badlogic.gdx.scenes.scene2d.utils.UIUtils;
import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.utils.GdxRuntimeException;
@ -86,23 +93,103 @@ import com.riiablo.loader.COFLoader;
import com.riiablo.loader.DC6Loader; import com.riiablo.loader.DC6Loader;
import com.riiablo.loader.DCCLoader; import com.riiablo.loader.DCCLoader;
import com.riiablo.loader.PaletteLoader; import com.riiablo.loader.PaletteLoader;
import com.riiablo.logger.Level;
import com.riiablo.logger.LogManager;
import com.riiablo.logger.Logger;
import com.riiablo.map.DT1.Tile; import com.riiablo.map.DT1.Tile;
import com.riiablo.map.pfa.GraphPath; import com.riiablo.map.pfa.GraphPath;
import com.riiablo.mpq.MPQFileHandleResolver; import com.riiablo.mpq.MPQFileHandleResolver;
import com.riiablo.util.DebugUtils; import com.riiablo.util.DebugUtils;
public class MapViewer extends ApplicationAdapter { public class MapViewer extends ApplicationAdapter {
private static final String TAG = "MapViewer"; private static final Logger log = LogManager.getLogger(MapViewer.class);
public static void main(String[] args) { public static void main(String[] args) {
Options options = new Options()
.addOption("h", "help", false,
"prints this message")
.addOption("d2", "home", true,
"directory containing D2 MPQ files")
.addOption("s", "seed", true,
"seed used for generation (-1 for random)")
.addOption("a", "act", true,
"act to generate [" + Riiablo.ACT1 + ".." + Riiablo.NUM_ACTS + ")")
.addOption("d", "diff", true,
"difficulty to generate [" + Riiablo.NORMAL + ".." + Riiablo.NUM_DIFFS + ")")
;
CommandLine cmd = null;
try {
CommandLineParser parser = new DefaultParser();
cmd = parser.parse(options, args);
} catch (ParseException e) {
System.err.println(e.getMessage());
System.err.println("For usage, use -help option");
} finally {
if (cmd != null) {
if (cmd.hasOption("help")) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("map-viewer", options);
System.exit(0);
}
}
}
final FileHandle home;
if (cmd != null && cmd.hasOption("home")) {
home = new FileHandle(cmd.getOptionValue("home"));
if (!home.child("d2data.mpq").exists()) {
throw new GdxRuntimeException("home does not refer to a valid D2 installation");
}
} else {
home = new FileHandle(System.getProperty("user.home")).child("diablo");
System.out.println("Home not specified, using " + home);
home.mkdirs();
}
int seed = -1;
if (cmd != null && cmd.hasOption("seed")) {
seed = NumberUtils.toInt(cmd.getOptionValue("seed"), -1);
}
int act = Riiablo.ACT1;
if (cmd != null && cmd.hasOption("act")) {
final String strValue = cmd.getOptionValue("act");
if (strValue == null) {
System.err.println("'act' not specified -- defaulting to " + act);
}
act = NumberUtils.toInt(strValue, Riiablo.ACT1);
if (act < Riiablo.ACT1 || act >= Riiablo.NUM_ACTS) {
System.err.println("Invalid option 'act': " + strValue);
System.err.println("'act' must be in range [" + Riiablo.ACT1 + ".." + Riiablo.NUM_ACTS + ")");
System.exit(0);
}
}
int diff = Riiablo.NORMAL;
if (cmd != null && cmd.hasOption("diff")) {
final String strValue = cmd.getOptionValue("diff");
if (strValue == null) {
System.err.println("'diff' not specified -- defaulting to " + diff);
}
diff = NumberUtils.toInt(strValue, Riiablo.NORMAL);
if (diff < Riiablo.NORMAL || diff >= Riiablo.NUM_DIFFS) {
System.err.println("Invalid option 'diff': " + strValue);
System.err.println("'diff' must be in range [" + Riiablo.NORMAL + ".." + Riiablo.NUM_DIFFS + ")");
System.exit(0);
}
}
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.title = TAG; config.title = "Map Viewer";
config.resizable = true; config.resizable = true;
config.vSyncEnabled = false; config.vSyncEnabled = false;
config.width = 1280; // 1280 config.width = 1280; // 1280
config.height = 720; config.height = 720;
config.foregroundFPS = config.backgroundFPS = 300; config.foregroundFPS = config.backgroundFPS = 300;
MapViewer client = new MapViewer(args); MapViewer client = new MapViewer(home, seed, act, diff);
new LwjglApplication(client, config); new LwjglApplication(client, config);
} }
@ -144,12 +231,18 @@ public class MapViewer extends ApplicationAdapter {
int act; int act;
int diff; int diff;
@Deprecated
MapViewer(String[] args) { MapViewer(String[] args) {
this(args[0], NumberUtils.toInt(args[1]), NumberUtils.toInt(args[2]), NumberUtils.toInt(args[3])); this(args[0], NumberUtils.toInt(args[1]), NumberUtils.toInt(args[2]), NumberUtils.toInt(args[3]));
} }
@Deprecated
MapViewer(String home, int seed, int act, int diff) { MapViewer(String home, int seed, int act, int diff) {
this.home = new FileHandle(home); this(new FileHandle(home), seed, act, diff);
}
MapViewer(FileHandle home, int seed, int act, int diff) {
this.home = home;
this.seed = seed; this.seed = seed;
this.act = act; this.act = act;
this.diff = diff; this.diff = diff;
@ -158,10 +251,14 @@ public class MapViewer extends ApplicationAdapter {
@Override @Override
public void create() { public void create() {
Gdx.app.setLogLevel(Application.LOG_DEBUG); Gdx.app.setLogLevel(Application.LOG_DEBUG);
LogManager.setLevel(MapViewer.class.getName(), Level.DEBUG);
Riiablo.home = home = Gdx.files.absolute(home.path()); Riiablo.home = home = Gdx.files.absolute(home.path());
MPQFileHandleResolver resolver = Riiablo.mpqs = new MPQFileHandleResolver(); MPQFileHandleResolver resolver = Riiablo.mpqs = new MPQFileHandleResolver();
if (seed == -1) seed = MathUtils.random.nextInt();
log.infof("seed: %08x", seed);
AssetManager assets = Riiablo.assets = new AssetManager(); AssetManager assets = Riiablo.assets = new AssetManager();
assets.setLoader(DS1.class, new DS1Loader(resolver)); assets.setLoader(DS1.class, new DS1Loader(resolver));
assets.setLoader(DT1.class, new DT1Loader(resolver)); assets.setLoader(DT1.class, new DT1Loader(resolver));
@ -502,10 +599,10 @@ public class MapViewer extends ApplicationAdapter {
mapRenderer.updatePosition(true); mapRenderer.updatePosition(true);
for (String asset : Riiablo.assets.getAssetNames()) { for (String asset : Riiablo.assets.getAssetNames()) {
Gdx.app.debug(TAG, Riiablo.assets.getReferenceCount(asset) + " : " + asset); log.debug("{} : {}", Riiablo.assets.getReferenceCount(asset), asset);
} }
Gdx.app.debug(TAG, "JAVA: " + Gdx.app.getJavaHeap() + " Bytes; NATIVE: " + Gdx.app.getNativeHeap() + " Bytes"); log.debug("JAVA: {} Bytes; NATIVE: {} Bytes", Gdx.app.getJavaHeap(), Gdx.app.getNativeHeap());
Riiablo.batch.setGamma(1.2f); Riiablo.batch.setGamma(1.2f);
} }