diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-05-25 10:39:31 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-05-25 10:39:31 -0400 |
commit | 26bba9f137ac161c9c394c74332968fd91d7acfc (patch) | |
tree | 7eb735c2884dcba4ff2c697a7a4be44867a68ba6 | |
parent | 03e8cf1b65841d6264fb021af6c7460dabac931f (diff) | |
download | games-smtnocturne-demons-26bba9f137ac161c9c394c74332968fd91d7acfc.tar.gz games-smtnocturne-demons-26bba9f137ac161c9c394c74332968fd91d7acfc.zip |
refactor
-rw-r--r-- | lib/Games/SMTNocturne/Demons.pm | 8 | ||||
-rw-r--r-- | lib/Games/SMTNocturne/Demons/Demon.pm | 14 |
2 files changed, 15 insertions, 7 deletions
diff --git a/lib/Games/SMTNocturne/Demons.pm b/lib/Games/SMTNocturne/Demons.pm index e1e482d..d4aff76 100644 --- a/lib/Games/SMTNocturne/Demons.pm +++ b/lib/Games/SMTNocturne/Demons.pm @@ -94,9 +94,11 @@ sub _normal_fusion { my $new_level = ($demon1->level + $demon2->level) / 2 + 1; - return Games::SMTNocturne::Demons::Demon->from_fusion_stats( - $new_type, $new_level, 'normal' - ); + return Games::SMTNocturne::Demons::Demon->from_fusion_stats({ + type => $new_type, + level => $new_level, + fusion_type => 'normal', + }); } 1; diff --git a/lib/Games/SMTNocturne/Demons/Demon.pm b/lib/Games/SMTNocturne/Demons/Demon.pm index 7371df5..41b689a 100644 --- a/lib/Games/SMTNocturne/Demons/Demon.pm +++ b/lib/Games/SMTNocturne/Demons/Demon.pm @@ -30,14 +30,20 @@ sub from_name { } sub from_fusion_stats { - my ($class, $type, $level, $fusion_type) = @_; + my ($class, $options) = @_; - die "unknown type $type" unless $DEMONS_BY_TYPE{$type}; + die "unknown type $options->{type}" + unless $DEMONS_BY_TYPE{$options->{type}}; + + my @possible = @{ $DEMONS_BY_TYPE{$options->{type}} }; + + @possible = grep { $_->fusion_type eq $options->{fusion_type} } @possible + if $options->{fusion_type}; my $found; - for my $demon (grep { $_->fusion_type eq $fusion_type } @{ $DEMONS_BY_TYPE{$type} }) { + for my $demon (@possible) { $found = $demon; - last if $demon->level >= $level; + last if $demon->level >= $options->{level}; } return $found; |