summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-10-05 20:45:38 -0500
committerJesse Luehrs <doy@tozt.net>2009-10-05 20:45:38 -0500
commita8aa9525b5fe556470fdf96a0bab733c1d616b0a (patch)
treec867241bb10f5580098f437ecb33f0229c6cf475
parent5bb618a0350914e967221c8347a21fedbde997b5 (diff)
downloadgames-smtnocturne-fusion-a8aa9525b5fe556470fdf96a0bab733c1d616b0a.tar.gz
games-smtnocturne-fusion-a8aa9525b5fe556470fdf96a0bab733c1d616b0a.zip
convert to using mx-types
-rw-r--r--dist.ini1
-rw-r--r--lib/Games/SMTNocturne/Fusion/Chart.pm12
-rw-r--r--lib/Games/SMTNocturne/Fusion/Demon.pm15
-rw-r--r--lib/Games/SMTNocturne/Fusion/Types.pm25
4 files changed, 28 insertions, 25 deletions
diff --git a/dist.ini b/dist.ini
index d7e49ff..535ba9e 100644
--- a/dist.ini
+++ b/dist.ini
@@ -12,4 +12,5 @@ Moose = 0.90
MooseX::ClassAttribute = 0
MooseX::Role::Matcher = 0
MooseX::Traits = 0
+MooseX::Types = 0
YAML::Any = 0
diff --git a/lib/Games/SMTNocturne/Fusion/Chart.pm b/lib/Games/SMTNocturne/Fusion/Chart.pm
index 79a642a..8c30a31 100644
--- a/lib/Games/SMTNocturne/Fusion/Chart.pm
+++ b/lib/Games/SMTNocturne/Fusion/Chart.pm
@@ -2,12 +2,13 @@ package Games::SMTNocturne::Fusion::Chart;
use Moose;
use MooseX::ClassAttribute;
use YAML::Any qw(Load);
-use Games::SMTNocturne::Fusion::Types;
+use Games::SMTNocturne::Fusion::Types qw(DemonType SMTDemon);
+use MooseX::Types::Moose qw(HashRef Maybe);
use constant Demon => 'Games::SMTNocturne::Fusion::Demon';
class_has _type_chart => (
is => 'ro',
- isa => 'HashRef[HashRef[Maybe[Games::SMTNocturne::Fusion::DemonType]]]',
+ isa => HashRef[HashRef[Maybe[DemonType]]],
lazy => 1,
default => sub {
local $/ = undef;
@@ -19,9 +20,7 @@ class_has _type_chart => (
sub fuse {
my $self = shift;
- my ($demon1, $demon2) = @_;
- $demon1 = Demon->lookup($demon1) unless blessed($demon1);
- $demon2 = Demon->lookup($demon2) unless blessed($demon2);
+ my ($demon1, $demon2) = map { to_SMTDemon($_) } @_;
my $type = $self->_type_chart->{$demon1->type}{$demon2->type};
my $level = ($demon1->level + $demon2->level) / 2;
my @possible = Demon->lookup(
@@ -33,8 +32,7 @@ sub fuse {
sub fusions_for {
my $self = shift;
- my ($demon) = @_;
- $demon = Demon->lookup($demon) unless blessed($demon);
+ my ($demon) = map { to_SMTDemon($_) } @_;
my $type = $demon->type;
my @type_combos;
diff --git a/lib/Games/SMTNocturne/Fusion/Demon.pm b/lib/Games/SMTNocturne/Fusion/Demon.pm
index 859ad24..aec8f43 100644
--- a/lib/Games/SMTNocturne/Fusion/Demon.pm
+++ b/lib/Games/SMTNocturne/Fusion/Demon.pm
@@ -1,8 +1,9 @@
package Games::SMTNocturne::Fusion::Demon;
use Moose;
use MooseX::ClassAttribute;
+use MooseX::Types::Moose qw(ArrayRef HashRef Int Str);
use YAML::Any qw(Load);
-use Games::SMTNocturne::Fusion::Types;
+use Games::SMTNocturne::Fusion::Types qw(DemonType FusionType SMTDemon);
use overload
'""' => sub {
my $self = shift;
@@ -14,7 +15,7 @@ with 'MooseX::Traits',
class_has _list => (
is => 'ro',
- isa => 'ArrayRef[HashRef]',
+ isa => ArrayRef[HashRef],
lazy => 1,
default => sub {
local $/ = undef;
@@ -26,7 +27,7 @@ class_has _list => (
class_has list => (
is => 'ro',
- isa => 'ArrayRef[Games::SMTNocturne::Fusion::Demon]',
+ isa => ArrayRef[SMTDemon],
lazy => 1,
default => sub {
my $meta = shift;
@@ -43,25 +44,25 @@ class_has list => (
has name => (
is => 'ro',
- isa => 'Str',
+ isa => Str,
required => 1,
);
has level => (
is => 'ro',
- isa => 'Int',
+ isa => Int,
required => 1,
);
has type => (
is => 'ro',
- isa => 'Games::SMTNocturne::Fusion::DemonType',
+ isa => DemonType,
required => 1,
);
has fusion_type => (
is => 'ro',
- isa => 'Games::SMTNocturne::Fusion::FusionType',
+ isa => FusionType,
required => 1,
);
diff --git a/lib/Games/SMTNocturne/Fusion/Types.pm b/lib/Games/SMTNocturne/Fusion/Types.pm
index 2811902..2504803 100644
--- a/lib/Games/SMTNocturne/Fusion/Types.pm
+++ b/lib/Games/SMTNocturne/Fusion/Types.pm
@@ -1,18 +1,21 @@
package Games::SMTNocturne::Fusion::Types;
-use strict;
-use warnings;
-use Moose::Util::TypeConstraints;
+use MooseX::Types -declare => [qw(DemonType FusionType SMTDemon DemonList)];
+use MooseX::Types::Moose qw(ArrayRef Str);
-enum 'Games::SMTNocturne::Fusion::DemonType' =>
+# 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 'Games::SMTNocturne::Fusion::FusionType' =>
- qw(deathstone evolve normal special);
-subtype 'Games::SMTNocturne::Fusion::DemonList',
- as 'ArrayRef[Games::SMTNocturne::Fusion::Demon]';
-coerce 'Games::SMTNocturne::Fusion::DemonList',
- from 'ArrayRef[Str]',
- via { [map { Games::SMTNocturne::Fusion::Demon->lookup($_) } @$_] };
+
+enum DemonType, @demon_types;
+enum FusionType, qw(deathstone evolve normal special);
+
+class_type SMTDemon, { class => 'Games::SMTNocturne::Fusion::Demon' };
+coerce SMTDemon, from Str,
+ via { Games::SMTNocturne::Fusion::Demon->lookup($_) };
+subtype DemonList, as ArrayRef[SMTDemon];
+coerce DemonList, from ArrayRef[Str],
+ via { [map { to_SMTDemon($_) } @$_] };
1;