Games-RolePlay-MapGen
view release on metacpan or search on metacpan
MapGen/Generator/XMLImport.pm view on Meta::CPAN
my $mapclose = $xp->find( closure => $tile );
for my $closure ($mapclose->get_nodelist) {
my $type = $xp->findvalue( '@type' => $closure )->value;
my $dir = $xp->findvalue( '@dir' => $closure )->value;
$dir =~ s/^(\w)\w+/$1/;
if( $type eq "wall" ) {
$t->{od}{$dir} = 0;
} elsif( $type eq "door" ) {
if( $dir eq "n" or $dir eq "w" ) {
my $o_x = $x_pos - ($dir eq "w" ? 1:0);
my $o_y = $y_pos - ($dir eq "n" ? 1:0);
my $opposite = $map->[$o_y][$o_x];
my $opp = $Games::RolePlay::MapGen::opp{$dir};
# <closure dir="east" type="door" locked="no"
# stuck="no" secret="yes" major_open_dir="east"
# minor_open_dir="south" />
my $d_locked = ($xp->findvalue( '@locked' => $closure ) eq "yes" ? 1:0);
my $d_stuck = ($xp->findvalue( '@stuck' => $closure ) eq "yes" ? 1:0);
my $d_secret = ($xp->findvalue( '@secret' => $closure ) eq "yes" ? 1:0);
my $d_open = ($xp->findvalue( '@open' => $closure ) eq "yes" ? 1:0);
my $d_majod = substr $xp->findvalue( '@major_open_dir' => $closure ), 0, 1;
my $d_minod = substr $xp->findvalue( '@minor_open_dir' => $closure ), 0, 1;
$opposite->{od}{$opp} = $t->{od}{$dir} = &_door(
locked => $d_locked,
stuck => $d_stuck,
secret => $d_secret,
'open' => $d_open,
open_dir => {
major => $d_majod,
minor => $d_minod,
},
);
}
} else {
die "hrm: closure type=$type";
}
}
$opts->{t_cb}->(($x_pos+1,$y_pos+1), $tile) if exists $opts->{t_cb};
}
}
my $tilegroups = $xp->find('/MapGen/tile_group');
for my $tile_group ($tilegroups->get_nodelist) {
my $t_name = $xp->findvalue( '@name' => $tile_group )->value;
my $t_type = $xp->findvalue( '@type' => $tile_group )->value;
my $group = &_group;
$group->name( $t_name );
$group->type( $t_type );
my $rectangles = $tile_group->find('rectangle');
for my $rec ($rectangles->get_nodelist) {
my @r_loc = split m/,/, $xp->findvalue( '@loc' => $rec );
my @r_size = split m/x/, $xp->findvalue( '@size' => $rec );
$group->add_rectangle(\@r_loc, \@r_size, $map);
}
push @$groups, $group;
}
$map = new Games::RolePlay::MapGen::_interconnected_map( $map );
return ($map, $groups);
}
__END__
# Below is stub documentation for your module. You better edit it!
=head1 NAME
Games::RolePlay::MapGen::Generator::XMLImport - Slurp up XML map data into MapGen memory form
=head1 SYNOPSIS
use Games::RolePlay::MapGen;
my $map = new Games::RolePlay::MapGen;
$map->set_generator( "XMLImport" );
$map->generate( xml_input_file => "map.xml" );
The MapGen base object also knows a shortcut to perform the above:
my $map = Games::RolePlay::MapGen->import_xml("map.xml");
=head1 SEE ALSO
Games::RolePlay::MapGen
=cut
( run in 0.853 second using v1.01-cache-2.11-cpan-71847e10f99 )