Added support for header/footer for cli help message

Added support for header/footer for cli help message
Adjusted MapViewer formatting
Added support for MapViewer hex seed
This commit is contained in:
Collin Smith 2020-11-24 16:04:16 -08:00
parent c0462e4fce
commit 62dd6e3be6
3 changed files with 68 additions and 27 deletions

View File

@ -71,6 +71,12 @@ public class FontMetricsTool extends BaseTool {
FontTBL.BitmapFont active; FontTBL.BitmapFont active;
BitmapFont.BitmapFontData data; BitmapFont.BitmapFontData data;
@Override
protected String getHelpHeader() {
return "Configures font metrics for D2 font files.\n" +
"E.g., {cmd} --font font8";
}
@Override @Override
protected void createCliOptions(Options options) { protected void createCliOptions(Options options) {
super.createCliOptions(options); super.createCliOptions(options);

View File

@ -3,6 +3,8 @@ package com.riiablo.map;
import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option; import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options; import org.apache.commons.cli.Options;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.math.NumberUtils;
import com.artemis.BaseSystem; import com.artemis.BaseSystem;
@ -147,41 +149,53 @@ public class MapViewer extends BaseTool {
int act; int act;
int diff; int diff;
@Override
protected String getHelpHeader() {
return "View generated maps.\n" +
"E.g., {cmd} --seed 0xdeadbeef --act 0 --diff 0";
}
@Override @Override
protected void createCliOptions(Options options) { protected void createCliOptions(Options options) {
super.createCliOptions(options); super.createCliOptions(options);
options.addOption(Option options.addOption(Option
.builder("d") .builder("d")
.longOpt("d2") .longOpt("d2")
.desc("directory containing D2 MPQ files") .desc("directory containing D2 MPQ files")
.hasArg() .hasArg()
.argName("path") .argName("path")
.build()); .build());
options.addOption(Option options.addOption(Option
.builder("s") .builder("s")
.longOpt("seed") .longOpt("seed")
.desc("seed used for generation (-1 for random)") .desc("seed used for generation (hex)")
.hasArg() .hasArg()
.argName(int.class.getName()) .argName(int.class.getName())
.build()); .build());
options.addOption(Option options.addOption(Option
.builder("a") .builder("r")
.longOpt("act") .longOpt("random")
.desc("act to generate [" + Riiablo.ACT1 + ".." + Riiablo.NUM_ACTS + ")") .desc("generate a random seed")
.hasArg() .build());
.argName(int.class.getName())
.build());
options.addOption(Option options.addOption(Option
.builder("d") .builder("a")
.longOpt("diff") .longOpt("act")
.desc("difficulty to generate [" + Riiablo.NORMAL + ".." + Riiablo.NUM_DIFFS + ")") .desc("act to generate [" + Riiablo.ACT1 + ".." + Riiablo.NUM_ACTS + ")")
.hasArg() .hasArg()
.argName(int.class.getName()) .argName(int.class.getName())
.build()); .build());
options.addOption(Option
.builder("d")
.longOpt("diff")
.desc("difficulty to generate [" + Riiablo.NORMAL + ".." + Riiablo.NUM_DIFFS + ")")
.hasArg()
.argName(int.class.getName())
.build());
} }
@Override @Override
@ -199,8 +213,18 @@ public class MapViewer extends BaseTool {
home = homeDirs.first(); home = homeDirs.first();
} }
if (cli.hasOption("seed")) { if (cli.hasOption("random")) {
seed = NumberUtils.toInt(cli.getOptionValue("seed"), -1); seed = -1;
} else if (cli.hasOption("seed")) {
try {
String seedOptionValue = cli.getOptionValue("seed");
seedOptionValue = StringUtils.removeStartIgnoreCase(seedOptionValue, "0x");
seed = (int) Long.parseLong(seedOptionValue, 16);
} catch (NumberFormatException t) {
log.warn(ExceptionUtils.getRootCauseMessage(t), t);
ExceptionUtils.wrapAndThrow(t);
return;
}
} else { } else {
seed = -1; seed = -1;
} }

View File

@ -45,8 +45,19 @@ public class BaseTool implements ApplicationListener {
} }
private void printHelp(String cmd, Options options) { private void printHelp(String cmd, Options options) {
String header = getHelpHeader();
if (header != null) {
header = header.replace("{cmd}", cmd).trim();
header = String.format("%n%s%n%n", header);
}
String footer = getHelpFooter();
if (footer != null) {
footer = footer.replace("{cmd}", cmd).trim();
}
HelpFormatter formatter = new HelpFormatter(); HelpFormatter formatter = new HelpFormatter();
formatter.printHelp(cmd, getHelpHeader(), options, getHelpFooter(), true); formatter.printHelp(cmd, header, options, footer, true);
} }
@Override @Override