From 82ab25a55d12290b310eb3ec7e20aa1b3f91a7cd Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 6 Oct 2009 03:26:30 -0500 Subject: make sure we can't get evolve or special demons with normal fusion this should really be factored out --- lib/Games/SMTNocturne/Fusion/Chart.pm | 6 +++++- lib/Games/SMTNocturne/Fusion/Demon.pm | 11 +++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm index fcb967d..287e7df 100644 --- a/lib/Games/SMTNocturne/Fusion/Chart.pm +++ b/lib/Games/SMTNocturne/Fusion/Chart.pm @@ -2,6 +2,7 @@ package Games::SMTNocturne::Fusion::Chart; use Moose; use MooseX::ClassAttribute; use MooseX::MultiMethods; +use List::MoreUtils qw(firstval); use YAML::Any qw(Load); use Games::SMTNocturne::Fusion::Types qw(DemonType SMTDemon Element Mitama @@ -53,7 +54,10 @@ multi method fuse (ClassName $self: SMTDemon $demon1 is coerce, type => $type, level => sub { $_ >= $level }, ); - return $possible[0]; + return firstval { !$_->does('Games::SMTNocturne::Fusion::Role::Deathstone') + && !$_->does('Games::SMTNocturne::Fusion::Role::Evolve') + && !$_->does('Games::SMTNocturne::Fusion::Role::Special') } + @possible; } multi method fuse (ClassName $self: Element $demon1 is coerce, diff --git a/lib/Games/SMTNocturne/Fusion/Demon.pm b/lib/Games/SMTNocturne/Fusion/Demon.pm index 23df00c..3efe004 100644 --- a/lib/Games/SMTNocturne/Fusion/Demon.pm +++ b/lib/Games/SMTNocturne/Fusion/Demon.pm @@ -3,6 +3,7 @@ use Moose; use Moose::Util::TypeConstraints; use MooseX::ClassAttribute; use MooseX::Types::Moose qw(ArrayRef HashRef Int Maybe Str); +use List::MoreUtils qw(firstval lastval); use YAML::Any qw(Load); use Games::SMTNocturne::Fusion::Types qw(DemonType FusionType SMTDemon); # XXX ick ick ick (n::ac breaks overload) @@ -105,7 +106,10 @@ sub level_up { type => $self->type, level => sub { $_ > $self->level }, ); - return $possible[0]; + return firstval { !$_->does('Games::SMTNocturne::Fusion::Role::Deathstone') + && !$_->does('Games::SMTNocturne::Fusion::Role::Evolve') + && !$_->does('Games::SMTNocturne::Fusion::Role::Special') } + @possible; } sub level_down { @@ -114,7 +118,10 @@ sub level_down { type => $self->type, level => sub { $_ < $self->level }, ); - return $possible[$#possible]; + return lastval { !$_->does('Games::SMTNocturne::Fusion::Role::Deathstone') + && !$_->does('Games::SMTNocturne::Fusion::Role::Evolve') + && !$_->does('Games::SMTNocturne::Fusion::Role::Special') } + @possible; } __PACKAGE__->meta->make_immutable; -- cgit v1.2.3-54-g00ecf