summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Games/SMTNocturne/Fusion/Types.pm21
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;