diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-05-26 01:50:28 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-05-26 01:50:28 -0400 |
commit | 8daee7509476687c3ba3b28eab1bd1e4e8e3d1e6 (patch) | |
tree | 04e9853e1df3d0d168c6ad7f053662d0571ea3f5 | |
parent | 45fc3dbb1652543352afc1efd29a687394c62597 (diff) | |
download | games-smtnocturne-demons-8daee7509476687c3ba3b28eab1bd1e4e8e3d1e6.tar.gz games-smtnocturne-demons-8daee7509476687c3ba3b28eab1bd1e4e8e3d1e6.zip |
start working on a command line interface for this
-rw-r--r-- | bin/smt_fusion | 55 |
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"; +} |