From 4be05163cc0be9bd4615a44954a6d7d11309b8fe Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 5 Oct 2009 21:11:24 -0500 Subject: add subtypes for each specific demon type --- lib/Games/SMTNocturne/Fusion/Types.pm | 21 ++++++++++++++------- 1 file 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; -- cgit v1.2.3