# SVG maze output
# Performs transformation, cleanup, and printing of output of Games::Maze
package Games::Maze::SVG::Hex;
use base Games::Maze::SVG::HexCells;
use Carp;
use Games::Maze;
use strict;
use warnings;
=head1 NAME
Games::Maze::SVG::Hex - Build hexagonal mazes in SVG.
=head1 VERSION
Version 0.71
=cut
our $VERSION = 0.71;
=head1 SYNOPSIS
Games::Maze::SVG::Hex uses the Games::Maze module to create hexagonal mazes in
SVG.
use Games::Maze::SVG;
my $foo = Games::Maze::SVG->new( 'Hex' );
...
=cut
=head1 FUNCTIONS
=cut
# ----------------------------------------------
# Subroutines
=over 4
=item new
Create a new Games::Maze::SVG object. Supports the following named parameters:
Takes one positional parameter that is the maze type: Rect, RectHex, or Hex
=over 4
=item wallform
String naming the wall format. Legal values are bevel, round, roundcorners,
and straight.
=item crumb
String describing the breadcrumb design. Legal values are dash,
dot, line, and none
=item dx
The size of the tiles in the X direction.
=item dy
The size of the tiles in the Y direction.
=item dir
Directory in which to find the ecmascript for the maze interactivity. Should
either be relative, or in URL form.
=back
=cut
sub new
{
my $class = shift;
my $obj = Games::Maze::SVG::HexCells->new( @_ );
$obj->{mazeparms}->{form} = 'Hexagon';
# rebless into this class.
return bless $obj, $class;
}
=item is_hex
Method returns true.
=cut
sub is_hex
{
return 1;
}
=item is_hex_shaped
Method returns true.
=cut
sub is_hex_shaped
{
return 1;
}
=item convert_sign_position
Convert the supplied x and y coordinates into the appropriate real coordinates
for a the position of the exit sign.
=over 4
=item $x x coord from the maze
=item $y y coord from the maze
=back
returns a two element list containing (x, y).
=cut
sub convert_sign_position
{
my $self = shift;
my ($x, $y) = @_;
$x *= $self->dx();
$y *= $self->dy();
# left or right
if($x > $self->{width}/2)
{
$x += $self->dx();
}
else
{
$x -= $self->dx();
}
# adjust bottom
if($y > $self->{height}/2)
{
$y += 3*$self->dy();
}
else
{
$y -= $self->dy();
}
return ($x, $y);
}
=back
=head1 AUTHOR
G. Wade Johnson, C<< <wade@anomaly.org> >>
=head1 BUGS
Please report any bugs or feature requests to
C<bug-game-maze-svg@rt.cpan.org>, or through the web interface at
L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Game-Maze-SVG>.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
=head1 ACKNOWLEDGEMENTS
Thanks go to Valen Johnson and Jason Wood for extensive test play of the
mazes.
=head1 COPYRIGHT & LICENSE
Copyright 2004-2006 G. Wade Johnson, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
1;