diff options
Diffstat (limited to 'lib/Games/SMTNocturne')
-rw-r--r-- | lib/Games/SMTNocturne/Fusion/Types.pm | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/Games/SMTNocturne/Fusion/Types.pm b/lib/Games/SMTNocturne/Fusion/Types.pm index 2504803..a4a83d2 100644 --- a/lib/Games/SMTNocturne/Fusion/Types.pm +++ b/lib/Games/SMTNocturne/Fusion/Types.pm @@ -1,13 +1,15 @@ package Games::SMTNocturne::Fusion::Types; -use MooseX::Types -declare => [qw(DemonType FusionType SMTDemon DemonList)]; +my @demon_types; +BEGIN { + @demon_types = + qw(Deity Megami Fury Lady Kishin Holy Element Mitama Yoma Fairy Divine + Fallen Snake Beast Jirae Brute Femme Vile Tyrant Night Wilder Haunt + Foul Seraph Wargod Genma Dragon Avatar Avian Raptor Entity Fiend); +} +use MooseX::Types + -declare => [qw(DemonType FusionType SMTDemon DemonList), @demon_types]; use MooseX::Types::Moose qw(ArrayRef Str); -# XXX: make each demon type a subtype of Demon -my @demon_types = - qw(Deity Megami Fury Lady Kishin Holy Element Mitama Yoma Fairy Divine - Fallen Snake Beast Jirae Brute Femme Vile Tyrant Night Wilder Haunt - Foul Seraph Wargod Genma Dragon Avatar Avian Raptor Entity Fiend); - enum DemonType, @demon_types; enum FusionType, qw(deathstone evolve normal special); @@ -18,4 +20,9 @@ subtype DemonList, as ArrayRef[SMTDemon]; coerce DemonList, from ArrayRef[Str], via { [map { to_SMTDemon($_) } @$_] }; +for my $typename (@demon_types) { + my $type = __PACKAGE__->can($typename)->(); + subtype $type, as SMTDemon, where { $_->type eq $typename }; +} + 1; |