diff options
author | Jesse Luehrs <doy@tozt.net> | 2009-10-06 03:26:30 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2009-10-06 03:26:30 -0500 |
commit | 82ab25a55d12290b310eb3ec7e20aa1b3f91a7cd (patch) | |
tree | 41859636c9e431f056e31af21ce4349cd79b7a95 /lib | |
parent | 6e93d01badd1e90966b8c9b0cb251dbddf0c3cfe (diff) | |
download | games-smtnocturne-fusion-82ab25a55d12290b310eb3ec7e20aa1b3f91a7cd.tar.gz games-smtnocturne-fusion-82ab25a55d12290b310eb3ec7e20aa1b3f91a7cd.zip |
make sure we can't get evolve or special demons with normal fusion
this should really be factored out
Diffstat (limited to 'lib')
-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; |