summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-10-06 11:04:48 -0500
committerJesse Luehrs <doy@tozt.net>2009-10-06 11:48:12 -0500
commit8e1791bc9bea497b9ade7ded36af74b401752be0 (patch)
treee8c31035bc71fcf956f2df747731c97397749148
parentab488409157e98649961f662059ff38de9444ec6 (diff)
downloadgames-smtnocturne-fusion-8e1791bc9bea497b9ade7ded36af74b401752be0.tar.gz
games-smtnocturne-fusion-8e1791bc9bea497b9ade7ded36af74b401752be0.zip
implement deathstone fusions
-rw-r--r--lib/Games/SMTNocturne/Fusion/Chart.pm6
-rw-r--r--lib/Games/SMTNocturne/Fusion/Deathstone.pm9
-rw-r--r--lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm53
3 files changed, 66 insertions, 2 deletions
diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm
index 11fe433..b20b70f 100644
--- a/lib/Games/SMTNocturne/Fusion/Chart.pm
+++ b/lib/Games/SMTNocturne/Fusion/Chart.pm
@@ -133,8 +133,10 @@ multi method fusions_for (ClassName $class: EvolveDemon $demon is coerce) {
}
multi method fusions_for (ClassName $class: DeathstoneDemon $demon is coerce) {
- # XXX: fix
- return;
+ my @demons = Demon->lookup(type => $demon->required_target_type);
+ return map { [@$_, Games::SMTNocturne::Fusion::Deathstone->new] }
+ map { $class->fusions_for($_) }
+ @demons;
}
multi method fusions_for (ClassName $class: Element $demon is coerce) {
diff --git a/lib/Games/SMTNocturne/Fusion/Deathstone.pm b/lib/Games/SMTNocturne/Fusion/Deathstone.pm
new file mode 100644
index 0000000..de56445
--- /dev/null
+++ b/lib/Games/SMTNocturne/Fusion/Deathstone.pm
@@ -0,0 +1,9 @@
+package Games::SMTNocturne::Fusion::Deathstone;
+use Moose;
+use namespace::clean -except => 'meta';
+use overload '""' => sub { '<deathstone>' };
+#use namespace::autoclean;
+
+# just a stub class so we have some object to return
+
+1;
diff --git a/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm b/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm
index 01a1745..3d65cb2 100644
--- a/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm
+++ b/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm
@@ -1,6 +1,59 @@
package Games::SMTNocturne::Fusion::Role::Deathstone;
use Moose::Role;
+#use MooseX::ClassAttribute;
+use MooseX::Types::Moose qw(HashRef);
+use Memoize;
+use YAML::Any qw(Load);
+use Games::SMTNocturne::Fusion::Types qw(DemonType);
use namespace::autoclean;
with 'Games::SMTNocturne::Fusion::Role::NotNormallyFusable';
+=for doesnt_work_yet
+
+class_has required_target_types => (
+ traits => ['Hash'],
+ isa => HashRef[DemonType],
+ default => sub {
+ local $/ = undef;
+ my $data = <DATA>;
+ close DATA;
+ return Load($data);
+ },
+ handles => {
+ required_target_type_for => 'get',
+ },
+);
+
+=cut
+
+sub _required_target_types {
+ local $/ = undef;
+ my $data = <DATA>;
+ close DATA;
+ return Load($data);
+}
+memoize('_required_target_types', NORMALIZER => sub { "" });
+
+sub required_target_type_for {
+ my $class = shift;
+ return $class->_required_target_types->{$_[0]};
+}
+
+sub required_target_type {
+ my $self = shift;
+ return $self->required_target_type_for($self->name);
+}
+
1;
+
+__DATA__
+---
+Black Rider: Night
+Daisoujou: Night
+Hell Biker: Fairy
+Matador: Yoma
+Pale Rider: Tyrant
+Red Rider: Fairy
+The Harlot: Tyrant
+Trumpeter: Tyrant
+White Rider: Yoma