File Coverage

blib/lib/Game/TextMapper/Mapper/Hex.pm
Criterion Covered Total %
statement 28 28 100.0
branch n/a
condition n/a
subroutine 9 9 100.0
pod 0 4 0.0
total 37 41 90.2


line stmt bran cond sub pod time code
1             # Copyright (C) 2009-2021 Alex Schroeder
2             #
3             # This program is free software: you can redistribute it and/or modify it under
4             # the terms of the GNU Affero General Public License as published by the Free
5             # Software Foundation, either version 3 of the License, or (at your option) any
6             # later version.
7             #
8             # This program is distributed in the hope that it will be useful, but WITHOUT
9             # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10             # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
11             # details.
12             #
13             # You should have received a copy of the GNU Affero General Public License along
14             # with this program. If not, see .
15              
16             =encoding utf8
17              
18             =head1 NAME
19              
20             Game::TextMapper::Mapper::Hex - a mapper for hex maps
21              
22             =head1 DESCRIPTION
23              
24             This class knows how to parse a text containing a hex map description into SVG
25             definitions, and regions. Once the map is built, this class knows how to
26             generate the SVG for the entire map.
27              
28             =head1 SEE ALSO
29              
30             This class is derived from L.
31              
32             It uses L to represent points (regions) and
33             L to represent lines.
34              
35             L is a similar class for square maps.
36              
37             =cut
38              
39             package Game::TextMapper::Mapper::Hex;
40              
41 11     11   5165 use Game::TextMapper::Constants qw($dx $dy);
  11         52  
  11         1612  
42 11     11   5193 use Game::TextMapper::Point::Hex;
  11         29  
  11         134  
43 11     11   5782 use Game::TextMapper::Line::Hex;
  11         31  
  11         100  
44              
45 11     11   469 use Modern::Perl '2018';
  11         21  
  11         45  
46 11     11   2793 use Mojo::Base 'Game::TextMapper::Mapper';
  11         22  
  11         47  
47              
48             sub make_region {
49 1382     1382 0 1625 my $self = shift;
50 1382         2509 return Game::TextMapper::Point::Hex->new(@_);
51             }
52              
53             sub make_line {
54 239     239 0 326 my $self = shift;
55 239         541 return Game::TextMapper::Line::Hex->new(@_);
56             }
57              
58             sub shape {
59 30     30 0 39 my $self = shift;
60 30         39 my $attributes = shift;
61             my $points = join(" ", map {
62 30         91 sprintf("%.1f,%.1f", $_->[0], $_->[1]) } Game::TextMapper::Point::Hex::corners());
  180         583  
63 30         85 return qq{};
64             }
65              
66             sub viewbox {
67 7     7 0 13 my $self = shift;
68 7         24 my ($minx, $miny, $maxx, $maxy) = @_;
69 7         56 map { int($_) } ($minx * $dx * 3/2 - $dx - 60, ($miny - 1.5) * $dy,
  28         70  
70             $maxx * $dx * 3/2 + $dx + 60, ($maxy + 1) * $dy);
71             }
72              
73             1;