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;
BitmapFont.BitmapFontData data;
@Override
protected String getHelpHeader() {
return "Configures font metrics for D2 font files.\n" +
"E.g., {cmd} --font font8";
}
@Override
protected void createCliOptions(Options 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.Option;
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 com.artemis.BaseSystem;
@ -147,41 +149,53 @@ public class MapViewer extends BaseTool {
int act;
int diff;
@Override
protected String getHelpHeader() {
return "View generated maps.\n" +
"E.g., {cmd} --seed 0xdeadbeef --act 0 --diff 0";
}
@Override
protected void createCliOptions(Options options) {
super.createCliOptions(options);
options.addOption(Option
.builder("d")
.longOpt("d2")
.desc("directory containing D2 MPQ files")
.hasArg()
.argName("path")
.build());
.builder("d")
.longOpt("d2")
.desc("directory containing D2 MPQ files")
.hasArg()
.argName("path")
.build());
options.addOption(Option
.builder("s")
.longOpt("seed")
.desc("seed used for generation (-1 for random)")
.hasArg()
.argName(int.class.getName())
.build());
.builder("s")
.longOpt("seed")
.desc("seed used for generation (hex)")
.hasArg()
.argName(int.class.getName())
.build());
options.addOption(Option
.builder("a")
.longOpt("act")
.desc("act to generate [" + Riiablo.ACT1 + ".." + Riiablo.NUM_ACTS + ")")
.hasArg()
.argName(int.class.getName())
.build());
.builder("r")
.longOpt("random")
.desc("generate a random seed")
.build());
options.addOption(Option
.builder("d")
.longOpt("diff")
.desc("difficulty to generate [" + Riiablo.NORMAL + ".." + Riiablo.NUM_DIFFS + ")")
.hasArg()
.argName(int.class.getName())
.build());
.builder("a")
.longOpt("act")
.desc("act to generate [" + Riiablo.ACT1 + ".." + Riiablo.NUM_ACTS + ")")
.hasArg()
.argName(int.class.getName())
.build());
options.addOption(Option
.builder("d")
.longOpt("diff")
.desc("difficulty to generate [" + Riiablo.NORMAL + ".." + Riiablo.NUM_DIFFS + ")")
.hasArg()
.argName(int.class.getName())
.build());
}
@Override
@ -199,8 +213,18 @@ public class MapViewer extends BaseTool {
home = homeDirs.first();
}
if (cli.hasOption("seed")) {
seed = NumberUtils.toInt(cli.getOptionValue("seed"), -1);
if (cli.hasOption("random")) {
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 {
seed = -1;
}

View File

@ -45,8 +45,19 @@ public class BaseTool implements ApplicationListener {
}
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();
formatter.printHelp(cmd, getHelpHeader(), options, getHelpFooter(), true);
formatter.printHelp(cmd, header, options, footer, true);
}
@Override