summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dist.ini1
-rw-r--r--lib/Games/SMTNocturne/Fusion/Chart.pm11
2 files changed, 5 insertions, 7 deletions
diff --git a/dist.ini b/dist.ini
index 535ba9e..b5571f7 100644
--- a/dist.ini
+++ b/dist.ini
@@ -10,6 +10,7 @@ abstract = Demon fusion rules for Shin Megami Tensei Nocturne
[Prereq]
Moose = 0.90
MooseX::ClassAttribute = 0
+MooseX::MultiMethods = 0
MooseX::Role::Matcher = 0
MooseX::Traits = 0
MooseX::Types = 0
diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm
index 8c30a31..790e9b9 100644
--- a/lib/Games/SMTNocturne/Fusion/Chart.pm
+++ b/lib/Games/SMTNocturne/Fusion/Chart.pm
@@ -1,6 +1,7 @@
package Games::SMTNocturne::Fusion::Chart;
use Moose;
use MooseX::ClassAttribute;
+use MooseX::MultiMethods;
use YAML::Any qw(Load);
use Games::SMTNocturne::Fusion::Types qw(DemonType SMTDemon);
use MooseX::Types::Moose qw(HashRef Maybe);
@@ -18,9 +19,8 @@ class_has _type_chart => (
},
);
-sub fuse {
- my $self = shift;
- my ($demon1, $demon2) = map { to_SMTDemon($_) } @_;
+multi method fuse (ClassName $self: SMTDemon $demon1 is coerce,
+ SMTDemon $demon2 is coerce) {
my $type = $self->_type_chart->{$demon1->type}{$demon2->type};
my $level = ($demon1->level + $demon2->level) / 2;
my @possible = Demon->lookup(
@@ -30,10 +30,7 @@ sub fuse {
return $possible[0];
}
-sub fusions_for {
- my $self = shift;
- my ($demon) = map { to_SMTDemon($_) } @_;
-
+method fusions_for (ClassName $self: SMTDemon $demon is coerce) {
my $type = $demon->type;
my @type_combos;
for my $type1 (keys %{ $self->_type_chart }) {