From 26bba9f137ac161c9c394c74332968fd91d7acfc Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 25 May 2014 10:39:31 -0400 Subject: refactor --- lib/Games/SMTNocturne/Demons.pm | 8 +++++--- lib/Games/SMTNocturne/Demons/Demon.pm | 14 ++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) (limited to 'lib/Games') 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; -- cgit v1.2.3