From d0c6fddd162854bc7841a17274384f5c13930f9e Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 5 Oct 2009 21:34:33 -0500 Subject: convert Chart to use multimethods --- dist.ini | 1 + lib/Games/SMTNocturne/Fusion/Chart.pm | 11 ++++------- 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 }) { -- cgit v1.2.3-54-g00ecf