summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-05-26 01:50:28 -0400
committerJesse Luehrs <doy@tozt.net>2014-05-26 01:50:28 -0400
commit8daee7509476687c3ba3b28eab1bd1e4e8e3d1e6 (patch)
tree04e9853e1df3d0d168c6ad7f053662d0571ea3f5
parent45fc3dbb1652543352afc1efd29a687394c62597 (diff)
downloadgames-smtnocturne-demons-8daee7509476687c3ba3b28eab1bd1e4e8e3d1e6.tar.gz
games-smtnocturne-demons-8daee7509476687c3ba3b28eab1bd1e4e8e3d1e6.zip
start working on a command line interface for this
-rw-r--r--bin/smt_fusion55
1 files changed, 55 insertions, 0 deletions
diff --git a/bin/smt_fusion b/bin/smt_fusion
new file mode 100644
index 0000000..aeee940
--- /dev/null
+++ b/bin/smt_fusion
@@ -0,0 +1,55 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use List::Util 'max';
+
+use Games::SMTNocturne::Demons;
+
+sub _demon { Games::SMTNocturne::Demons::demon(@_) }
+sub _fuse { Games::SMTNocturne::Demons::fuse(@_) }
+sub _fusions_for { Games::SMTNocturne::Demons::fusions_for(@_) }
+
+my $command = shift @ARGV;
+
+if ($command !~ /^_/ && defined &$command) {
+ { no strict 'refs'; &{ $command }(@ARGV) }
+}
+else {
+ die "unknown command $command";
+}
+
+sub demon {
+ my ($demon) = @_;
+ print _demon($demon), "\n";
+}
+
+sub fuse {
+ my ($demon1, $demon2) = @_;
+ print _fuse($demon1, $demon2), "\n";
+}
+
+sub fusions_for {
+ my ($demon) = @_;
+ print join("\n", _fusions_for($demon)), "\n";
+}
+
+sub min_level_for {
+ my ($demon) = @_;
+
+ my @fusions = _fusions_for($demon);
+ my $min_level = 99;
+ my @min_level_fusions;
+ for my $fusion (@fusions) {
+ my $max_level = max(map { $_->level } $fusion->all_demons);
+ if ($max_level < $min_level) {
+ @min_level_fusions = ($fusion);
+ $min_level = $max_level;
+ }
+ elsif ($max_level == $min_level) {
+ push @min_level_fusions, $fusion;
+ }
+ }
+ print "Level $min_level:\n";
+ print join("\n", @min_level_fusions), "\n";
+}