From 6a0ded05309cd7a9eb388f3d4026cf9870e7201b Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 6 Oct 2009 16:23:35 -0500 Subject: add allowable times for the various deathstone fusions --- lib/Games/SMTNocturne/Fusion.pm | 2 + lib/Games/SMTNocturne/Fusion/Chart.pm | 3 +- lib/Games/SMTNocturne/Fusion/KagutsuchiPhase.pm | 31 +++++++++++ lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm | 73 +++++++++++++++++++++---- 4 files changed, 96 insertions(+), 13 deletions(-) create mode 100644 lib/Games/SMTNocturne/Fusion/KagutsuchiPhase.pm diff --git a/lib/Games/SMTNocturne/Fusion.pm b/lib/Games/SMTNocturne/Fusion.pm index 1564280..071d688 100644 --- a/lib/Games/SMTNocturne/Fusion.pm +++ b/lib/Games/SMTNocturne/Fusion.pm @@ -1,6 +1,8 @@ package Games::SMTNocturne::Fusion; use Games::SMTNocturne::Fusion::Demon; use Games::SMTNocturne::Fusion::Chart; +use Games::SMTNocturne::Fusion::Deathstone; +use Games::SMTNocturne::Fusion::KagutsuchiPhase; use Sub::Exporter -setup => { exports => [ qw(fuse fusions_for lookup_demon diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm index 16611ec..02eb000 100644 --- a/lib/Games/SMTNocturne/Fusion/Chart.pm +++ b/lib/Games/SMTNocturne/Fusion/Chart.pm @@ -152,7 +152,8 @@ multi method fusions_for (ClassName $class: EvolveDemon $demon does coerce) { multi method fusions_for (ClassName $class: DeathstoneDemon $demon does coerce) { my @demons = Demon->lookup(type => $demon->required_target_type); - return map { [@$_, Games::SMTNocturne::Fusion::Deathstone->new] } + my $time = $demon->required_time; + return map { [@$_, Games::SMTNocturne::Fusion::Deathstone->new, $time] } map { $class->fusions_for($_) } @demons; } diff --git a/lib/Games/SMTNocturne/Fusion/KagutsuchiPhase.pm b/lib/Games/SMTNocturne/Fusion/KagutsuchiPhase.pm new file mode 100644 index 0000000..08f161f --- /dev/null +++ b/lib/Games/SMTNocturne/Fusion/KagutsuchiPhase.pm @@ -0,0 +1,31 @@ +package Games::SMTNocturne::Fusion::KagutsuchiPhase; +use Moose; +use namespace::clean -except => 'meta'; +use overload '""' => sub { + my $self = shift; + 'phases) . '>'; +}; +# use namespace::autoclean; + +has phases => ( + traits => ['Array'], + isa => 'ArrayRef[Int]', + required => 1, + handles => { + phases => 'elements', + }, +); + +around BUILDARGS => sub { + my $orig = shift; + my $class = shift; + my @phases = @_; + return $class->$orig(phases => \@phases); +}; + +__PACKAGE__->meta->make_immutable; + +1; diff --git a/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm b/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm index 3d65cb2..a8f04b2 100644 --- a/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm +++ b/lib/Games/SMTNocturne/Fusion/Role/Deathstone.pm @@ -26,17 +26,25 @@ class_has required_target_types => ( =cut -sub _required_target_types { +sub _required_state { local $/ = undef; my $data = ; close DATA; return Load($data); } -memoize('_required_target_types', NORMALIZER => sub { "" }); +memoize('_required_state', NORMALIZER => sub { "" }); sub required_target_type_for { my $class = shift; - return $class->_required_target_types->{$_[0]}; + return $class->_required_state->{$_[0]}{type}; +} + +sub required_time_for { + my $class = shift; + my $time = $class->_required_state->{$_[0]}{time}; + return Games::SMTNocturne::Fusion::KagutsuchiPhase->new( + $time->[0]..$time->[1] + ); } sub required_target_type { @@ -44,16 +52,57 @@ sub required_target_type { return $self->required_target_type_for($self->name); } +sub required_time { + my $self = shift; + return $self->required_time_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 +Black Rider: + time: + - 0 + - 0 + type: Night +Daisoujou: + time: + - 5 + - 8 + type: Night +Hell Biker: + time: + - 4 + - 7 + type: Fairy +Matador: + time: + - 1 + - 4 + type: Yoma +Pale Rider: + time: + - 0 + - 0 + type: Tyrant +Red Rider: + time: + - 0 + - 0 + type: Fairy +The Harlot: + time: + - 4 + - 4 + type: Tyrant +Trumpeter: + time: + - 8 + - 8 + type: Tyrant +White Rider: + time: + - 0 + - 0 + type: Yoma -- cgit v1.2.3