diff options
-rw-r--r-- | lib/Games/SMTNocturne/Fusion/Chart.pm | 6 | ||||
-rw-r--r-- | lib/Games/SMTNocturne/Fusion/Demon.pm | 11 |
2 files changed, 14 insertions, 3 deletions
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; |