From 8e1791bc9bea497b9ade7ded36af74b401752be0 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 6 Oct 2009 11:04:48 -0500 Subject: implement deathstone fusions --- lib/Games/SMTNocturne/Fusion/Chart.pm | 6 ++- lib/Games/SMTNocturne/Fusion/Deathstone.pm | 9 +++++ lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm | 53 +++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 lib/Games/SMTNocturne/Fusion/Deathstone.pm 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 { '' }; +#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 = ; + close DATA; + return Load($data); + }, + handles => { + required_target_type_for => 'get', + }, +); + +=cut + +sub _required_target_types { + local $/ = undef; + my $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 -- cgit v1.2.3-54-g00ecf