diff options
Diffstat (limited to 'lib/Games/SMTNocturne/Fusion/Demon.pm')
-rw-r--r-- | lib/Games/SMTNocturne/Fusion/Demon.pm | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/lib/Games/SMTNocturne/Fusion/Demon.pm b/lib/Games/SMTNocturne/Fusion/Demon.pm index 355dc86..bc386d1 100644 --- a/lib/Games/SMTNocturne/Fusion/Demon.pm +++ b/lib/Games/SMTNocturne/Fusion/Demon.pm @@ -1,15 +1,17 @@ package Games::SMTNocturne::Fusion::Demon; use Moose; +use Moose::Util::TypeConstraints; use MooseX::ClassAttribute; -use MooseX::Types::Moose qw(ArrayRef HashRef Int Str); +use MooseX::Types::Moose qw(ArrayRef HashRef Int Maybe Str); use YAML::Any qw(Load); use Games::SMTNocturne::Fusion::Types qw(DemonType FusionType SMTDemon); -use overload - '""' => sub { - my $self = shift; - '<' . $self->type . ' ' . $self->name . ' (' . $self->level . ')>' - }; -use namespace::autoclean; +# XXX ick ick ick (n::ac breaks overload) +use namespace::clean -except => 'meta'; +use overload '""' => sub { + my $self = shift; + '<' . $self->type . ' ' . $self->name . ' (' . $self->level . ')>' +}; +# use namespace::autoclean; with 'MooseX::Traits', 'MooseX::Role::Matcher' => { default_match => 'name' }; @@ -38,7 +40,12 @@ class_has list => ( } qw(deathstone evolve special); $traits{normal} = []; return [ map { - $class->new_with_traits(traits => $traits{$_->{fusion_type}}, %$_) + my $demon_class = "Games::SMTNocturne::Fusion::Demon::$_->{type}"; + Class::MOP::load_class($demon_class); + $demon_class->new_with_traits( + traits => $traits{$_->{fusion_type}}, + %$_, + ); } @{ $class->_list } ]; }, ); @@ -67,6 +74,24 @@ has fusion_type => ( required => 1, ); +has elemental_fusions => ( + traits => ['Hash'], + is => 'ro', + isa => HashRef[Maybe[enum[qw(up down)]]], + init_arg => undef, + default => sub { { } }, + handles => { + elemental_fusion_direction => 'get', + }, +); + +has self_fusion_element => ( + is => 'ro', + isa => Maybe[enum[qw(Erthys Aeros Aquans Flameis)]], + init_arg => undef, + default => undef, +); + sub lookup { my ($class, @props) = @_; my @possible = $class->grep_matches($class->list, @props); |