From ef5e91f3d15e44c37d84b98e45da34181acd3d92 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 25 May 2014 02:26:51 -0400 Subject: always return the same instance for a given demon --- lib/Games/SMTNocturne/Demons/Demon.pm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'lib/Games/SMTNocturne/Demons') diff --git a/lib/Games/SMTNocturne/Demons/Demon.pm b/lib/Games/SMTNocturne/Demons/Demon.pm index 12d276e..711697d 100644 --- a/lib/Games/SMTNocturne/Demons/Demon.pm +++ b/lib/Games/SMTNocturne/Demons/Demon.pm @@ -7,16 +7,17 @@ use JSON::PP; my %DEMONS_BY_NAME = %{ decode_json(do { local $/; }) }; for my $name (keys %DEMONS_BY_NAME) { $DEMONS_BY_NAME{$name}{name} = $name; + $DEMONS_BY_NAME{$name} = bless $DEMONS_BY_NAME{$name}, __PACKAGE__; } my %DEMONS_BY_TYPE; for my $name (keys %DEMONS_BY_NAME) { - my $data = $DEMONS_BY_NAME{$name}; - push @{ $DEMONS_BY_TYPE{$data->{type}} ||= [] }, $data; + my $demon = $DEMONS_BY_NAME{$name}; + push @{ $DEMONS_BY_TYPE{$demon->type} ||= [] }, $demon; } for my $type (keys %DEMONS_BY_TYPE) { my $demons = $DEMONS_BY_TYPE{$type}; - @$demons = sort { $a->{level} <=> $b->{level} } @$demons; + @$demons = sort { $a->level <=> $b->level } @$demons; } sub from_name { @@ -24,7 +25,7 @@ sub from_name { die "unknown demon $name" unless $DEMONS_BY_NAME{$name}; - return bless { %{ $DEMONS_BY_NAME{$name} } }, $class; + return $DEMONS_BY_NAME{$name}; } sub from_type_and_level { @@ -35,10 +36,10 @@ sub from_type_and_level { my $found; for my $demon (@{ $DEMONS_BY_TYPE{$type} }) { $found = $demon; - last if $demon->{level} >= $level; + last if $demon->level >= $level; } - return bless { %$found }, $class; + return $found; } # sub boss { $_[0]->{boss} } -- cgit v1.2.3-54-g00ecf