From 67d97ac9c0a810da61930c69515edcce5082ba38 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 5 Oct 2009 22:04:38 -0500 Subject: add a few fusion rules for elements and mitama --- lib/Games/SMTNocturne/Fusion/Chart.pm | 34 +++++++++++++++++++++++++++++++++- lib/Games/SMTNocturne/Fusion/Types.pm | 2 ++ 2 files changed, 35 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm index 790e9b9..b297ef5 100644 --- a/lib/Games/SMTNocturne/Fusion/Chart.pm +++ b/lib/Games/SMTNocturne/Fusion/Chart.pm @@ -3,7 +3,7 @@ use Moose; use MooseX::ClassAttribute; use MooseX::MultiMethods; use YAML::Any qw(Load); -use Games::SMTNocturne::Fusion::Types qw(DemonType SMTDemon); +use Games::SMTNocturne::Fusion::Types qw(DemonType SMTDemon Element Mitama); use MooseX::Types::Moose qw(HashRef Maybe); use constant Demon => 'Games::SMTNocturne::Fusion::Demon'; @@ -30,6 +30,38 @@ multi method fuse (ClassName $self: SMTDemon $demon1 is coerce, return $possible[0]; } +multi method fuse (ClassName $self: Element $demon1 is coerce, + SMTDemon $demon2 is coerce) { + # XXX: fix + return; +} + +multi method fuse (ClassName $self: Mitama $demon1 is coerce, + SMTDemon $demon2 is coerce) { + return $demon2; +} + +multi method fuse (ClassName $self: SMTDemon $demon1 is coerce, + Element $demon2 is coerce) { + return $self->fuse($demon2, $demon1); +} + +multi method fuse (ClassName $self: SMTDemon $demon1 is coerce, + Mitama $demon2 is coerce) { + return $self->fuse($demon2, $demon1); +} + +multi method fuse (ClassName $self: Element $demon1 is coerce, + Element $demon2 is coerce) { + # XXX: fix + return; +} + +multi method fuse (ClassName $self: Mitama $demon1 is coerce, + Mitama $demon2 is coerce) { + return; +} + method fusions_for (ClassName $self: SMTDemon $demon is coerce) { my $type = $demon->type; my @type_combos; diff --git a/lib/Games/SMTNocturne/Fusion/Types.pm b/lib/Games/SMTNocturne/Fusion/Types.pm index a4a83d2..f5276f9 100644 --- a/lib/Games/SMTNocturne/Fusion/Types.pm +++ b/lib/Games/SMTNocturne/Fusion/Types.pm @@ -23,6 +23,8 @@ coerce DemonList, from ArrayRef[Str], for my $typename (@demon_types) { my $type = __PACKAGE__->can($typename)->(); subtype $type, as SMTDemon, where { $_->type eq $typename }; + coerce $type, from Str, + via { Games::SMTNocturne::Fusion::Demon->lookup($_) }; } 1; -- cgit v1.2.3-54-g00ecf