From a8855585f83184833fcecc74a989ae204d78de9b Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 6 Oct 2009 02:20:14 -0500 Subject: add multi methods for fusions_for, to handle different fusion types --- lib/Games/SMTNocturne/Fusion/Chart.pm | 20 ++++++++++++++++++-- lib/Games/SMTNocturne/Fusion/Types.pm | 12 +++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm index 5bbea86..a5b226b 100644 --- a/lib/Games/SMTNocturne/Fusion/Chart.pm +++ b/lib/Games/SMTNocturne/Fusion/Chart.pm @@ -3,7 +3,9 @@ use Moose; use MooseX::ClassAttribute; use MooseX::MultiMethods; use YAML::Any qw(Load); -use Games::SMTNocturne::Fusion::Types qw(DemonType SMTDemon Element Mitama); +use Games::SMTNocturne::Fusion::Types + qw(DemonType SMTDemon Element Mitama + DeathstoneDemon EvolveDemon SpecialDemon); use MooseX::Types::Moose qw(HashRef Maybe); use constant Demon => 'Games::SMTNocturne::Fusion::Demon'; use namespace::autoclean; @@ -70,7 +72,7 @@ multi method fuse (ClassName $self: Mitama $demon1 is coerce, return; } -method fusions_for (ClassName $self: SMTDemon $demon is coerce) { +multi method fusions_for (ClassName $self: SMTDemon $demon is coerce) { my $type = $demon->type; my @type_combos; for my $type1 (keys %{ $self->_type_chart }) { @@ -99,6 +101,20 @@ method fusions_for (ClassName $self: SMTDemon $demon is coerce) { return @found; } +multi method fusions_for (ClassName $self: SpecialDemon $demon is coerce) { + # XXX: fix + return; +} + +multi method fusions_for (ClassName $self: EvolveDemon $demon is coerce) { + return; +} + +multi method fusions_for (ClassName $self: DeathstoneDemon $demon is coerce) { + # XXX: fix + return; +} + __PACKAGE__->meta->make_immutable; 1; diff --git a/lib/Games/SMTNocturne/Fusion/Types.pm b/lib/Games/SMTNocturne/Fusion/Types.pm index 86f7fab..b62f483 100644 --- a/lib/Games/SMTNocturne/Fusion/Types.pm +++ b/lib/Games/SMTNocturne/Fusion/Types.pm @@ -7,7 +7,9 @@ BEGIN { Foul Seraph Wargod Genma Dragon Avatar Avian Raptor Entity Fiend); } use MooseX::Types - -declare => [qw(DemonType FusionType SMTDemon DemonList), @demon_types]; + -declare => [qw(DemonType FusionType SMTDemon DemonList + DeathstoneDemon EvolveDemon SpecialDemon), + @demon_types]; use MooseX::Types::Moose qw(ArrayRef Str); enum DemonType, @demon_types; @@ -28,4 +30,12 @@ for my $typename (@demon_types) { via { Games::SMTNocturne::Fusion::Demon->lookup($_) }; } +for my $typename (qw(Deathstone Evolve Special)) { + my $type = __PACKAGE__->can("${typename}Demon")->(); + subtype $type, as SMTDemon, + where { $_->does("Games::SMTNocturne::Fusion::Role::$typename") }; + coerce $type, from Str, + via { Games::SMTNocturne::Fusion::Demon->lookup($_) }; +} + 1; -- cgit v1.2.3-54-g00ecf