summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-10-06 09:44:50 -0500
committerJesse Luehrs <doy@tozt.net>2009-10-06 09:44:50 -0500
commit99c4bd60f5be23b03c19dc80953422da78105a30 (patch)
tree337601b1dd2d63826d9204ebbfcc126d80e43d8e
parentaa950d8f97cf1170b59db7175433ef5b9c2bdc98 (diff)
downloadgames-smtnocturne-fusion-99c4bd60f5be23b03c19dc80953422da78105a30.tar.gz
games-smtnocturne-fusion-99c4bd60f5be23b03c19dc80953422da78105a30.zip
factor out removing of duplicates
-rw-r--r--dist.ini1
-rw-r--r--lib/Games/SMTNocturne/Fusion/Chart.pm10
2 files changed, 8 insertions, 3 deletions
diff --git a/dist.ini b/dist.ini
index 9a11e77..4d6ab78 100644
--- a/dist.ini
+++ b/dist.ini
@@ -10,6 +10,7 @@ abstract = Demon fusion rules for Shin Megami Tensei Nocturne
[Prereq]
Moose = 0.90
MooseX::ClassAttribute = 0
+MooseX::Mangle = 0
MooseX::MultiMethods = 0
MooseX::Role::Matcher = 0
MooseX::Traits = 0
diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm
index 287e7df..1570e97 100644
--- a/lib/Games/SMTNocturne/Fusion/Chart.pm
+++ b/lib/Games/SMTNocturne/Fusion/Chart.pm
@@ -1,6 +1,7 @@
package Games::SMTNocturne::Fusion::Chart;
use Moose;
use MooseX::ClassAttribute;
+use MooseX::Mangle;
use MooseX::MultiMethods;
use List::MoreUtils qw(firstval);
use YAML::Any qw(Load);
@@ -118,7 +119,6 @@ multi method fusions_for (ClassName $self: SMTDemon $demon is coerce) {
my @type2_demons = Demon->lookup(type => $combo->[1]);
for my $demon1 (@type1_demons) {
for my $demon2 (@type2_demons) {
- next if $demon2->level < $demon1->level;
my $fusion = $self->fuse($demon1, $demon2);
push @found, [$demon1, $demon2]
if defined $fusion && $fusion->name eq $demon->name;
@@ -149,7 +149,6 @@ multi method fusions_for (ClassName $self: Element $demon is coerce) {
for my $demon1 (@demons) {
for my $demon2 (grep { $demon1->type eq $_->type } @demons) {
next if $demon1->name eq $demon2->name;
- next if $demon2->level < $demon1->level;
push @found, [$demon1, $demon2];
}
}
@@ -162,13 +161,18 @@ multi method fusions_for (ClassName $self: Mitama $demon is coerce) {
for my $demon2 (keys %{ $element_fusions{$demon1} }) {
next unless $demon->name eq "$element_fusions{$demon1}{$demon2} Mitama";
my ($found1, $found2) = (Demon->lookup($demon1), Demon->lookup($demon2));
- next if $found2->level < $found1->level;
push @found, [$found1, $found2];
}
}
return @found;
}
+mangle_return fusions_for => sub {
+ my $self = shift;
+ @_ = grep { $_->[0]->level <= $_->[1]->level } @_;
+ return @_;
+};
+
__PACKAGE__->meta->make_immutable;
1;