diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-05-25 02:26:51 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-05-25 02:26:51 -0400 |
commit | ef5e91f3d15e44c37d84b98e45da34181acd3d92 (patch) | |
tree | 62cebd33f0da78d542f347dca713dffcd29e4c8d /lib/Games | |
parent | 2a5da1a4d4f9cdeeb5dece6710afd5ca828cb0c8 (diff) | |
download | games-smtnocturne-demons-ef5e91f3d15e44c37d84b98e45da34181acd3d92.tar.gz games-smtnocturne-demons-ef5e91f3d15e44c37d84b98e45da34181acd3d92.zip |
always return the same instance for a given demon
Diffstat (limited to 'lib/Games')
-rw-r--r-- | lib/Games/SMTNocturne/Demons/Demon.pm | 13 |
1 files changed, 7 insertions, 6 deletions
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 $/; <DATA> }) }; 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} } |