summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-10-06 02:20:14 -0500
committerJesse Luehrs <doy@tozt.net>2009-10-06 02:20:14 -0500
commita8855585f83184833fcecc74a989ae204d78de9b (patch)
treefc53bd55e2d1a3b86b0b493f442f9db5abc91110
parent28e3171b60e9ad338fe3b2b6b2e66c346d95ffd4 (diff)
downloadgames-smtnocturne-fusion-a8855585f83184833fcecc74a989ae204d78de9b.tar.gz
games-smtnocturne-fusion-a8855585f83184833fcecc74a989ae204d78de9b.zip
add multi methods for fusions_for, to handle different fusion types
-rw-r--r--lib/Games/SMTNocturne/Fusion/Chart.pm20
-rw-r--r--lib/Games/SMTNocturne/Fusion/Types.pm12
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;