App-traveller
view release on metacpan or search on metacpan
lib/Traveller/Mapper.pm view on Meta::CPAN
109110111112113114115116117118119120121122123124125126127128129}
.coordinates {
fill-opacity: 0.5;
}
.starport, .base {
font-size: 20pt;
}
.direction {
font-size: 24pt;
}
.legend {
text-anchor: start;
font-size: 14pt;
}
tspan.comm {
fill:
#ff6347; /* tomato */
}
line.comm {
stroke-width: 10pt;
stroke:
#ff6347; /* tomato */
}
lib/Traveller/Mapper.pm view on Meta::CPAN
217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
(
$y
-
$x
%2/2) *
sqrt
(3) *
$scale
);
$svg
.=
sprintf
(
qq{ <text class="coordinates" x="%.3f" y="%.3f">}
.
qq{%02d%02d</text>\n}
,
(1 + (
$x
-1) * 1.5) *
$scale
,
(
$y
-
$x
%2/2) *
sqrt
(3) *
$scale
- 0.6 *
$scale
,
$x
,
$y
);
} (0 ..
$self
->width *
$self
->height - 1));
return
$doc
;
}
sub
legend {
my
$self
=
shift
;
my
$scale
= 100;
my
$doc
;
my
$uwp
=
''
;
if
(
$self
->source) {
$uwp
=
' – <a xlink:href="'
.
$self
->source .
'">UWP</a>'
;
}
$doc
.=
sprintf
(
qq{ <text class="legend" x="%.3f" y="%.3f">â—‰ gas giant}
.
qq{ – ■Imperial consulate – ☼ TAS facility – ▲ scout base}
.
qq{ – ★ naval base – π research station – ☠pirate base}
.
qq{ – <tspan class="comm">▮</tspan> communication}
.
qq{ – <tspan class="trade">▮</tspan> trade$uwp</text>\n}
,
-10, (
$self
->height + 1) *
sqrt
(3) *
$scale
);
$doc
.=
sprintf
(
qq{ <text class="direction" x="%.3f" y="%.3f">coreward</text>\n}
,
$self
->width/2 * 1.5 *
$scale
, -0.13 *
$scale
);
$doc
.=
sprintf
(
qq{ <text transform="translate(%.3f,%.3f) rotate(90)"}
.
qq{ class="direction">trailing</text>\n}
,
(
$self
->width + 0.4) * 1.5 *
$scale
,
$self
->height/2 *
sqrt
(3) *
$scale
);
lib/Traveller/Mapper.pm view on Meta::CPAN
250251252253254255256257258259260261262263264265266267268269270
-0.1 *
$scale
,
$self
->height/2 *
sqrt
(3) *
$scale
);
return
$doc
;
}
sub
footer {
my
$self
=
shift
;
my
$doc
;
my
$y
= 10;
my
$debug
=
''
;
# for developers
for
my
$line
(
split
(/\n/,
$debug
)) {
$doc
.=
qq{<text xml:space="preserve" class="legend" y="$y" stroke="red">}
.
$line
.
qq{</text>\n}
;
$y
+= 20;
}
$doc
.=
qq{</svg>\n}
;
return
$doc
;
}
sub
initialize {
my
(
$self
,
$map
,
$wiki
,
$source
) =
@_
;
$self
->source(
$source
);
lib/Traveller/Mapper.pm view on Meta::CPAN
563564565566567568569570571572573574575576577578579580581582583
foreach
my
$hex
(@{
$self
->hexes}) {
$data
.=
$hex
->comm_svg();
}
$data
.=
qq{ </g>\n\n}
;
$data
.=
qq{ <g id='routes'>\n}
;
$data
.=
$self
->trade_svg();
$data
.=
qq{ </g>\n\n}
;
$data
.=
qq{ <g id='grid'>\n}
;
$data
.=
$self
->grid;
$data
.=
qq{ </g>\n\n}
;
$data
.=
qq{ <g id='legend'>\n}
;
$data
.=
$self
->legend();
$data
.=
qq{ </g>\n\n}
;
$data
.=
qq{ <g id='system'>\n}
;
foreach
my
$hex
(@{
$self
->hexes}) {
$data
.=
$hex
->system_svg();
}
$data
.=
qq{ </g>\n}
;
$data
.=
$self
->footer();
return
$data
;
}
lib/Traveller/Mapper/Classic.pm view on Meta::CPAN
8990919293949596979899100101102103104105106107108109110111112113
my
$d
= @{
$edge
}[2];
my
(
$x1
,
$y1
) = (
$u
->x,
$u
->y);
my
(
$x2
,
$y2
) = (
$v
->x,
$v
->y);
$data
.=
sprintf
(
qq{ <line class="trade d$d" x1="%.3f" y1="%.3f" x2="%.3f" y2="%.3f" />\n}
,
(1 + (
$x1
-1) * 1.5) *
$scale
, (
$y1
-
$x1
%2/2) *
sqrt
(3) *
$scale
,
(1 + (
$x2
-1) * 1.5) *
$scale
, (
$y2
-
$x2
%2/2) *
sqrt
(3) *
$scale
);
}
return
$data
;
}
sub
legend {
my
$self
=
shift
;
my
$scale
= 100;
my
$doc
;
$doc
.=
sprintf
(
qq{ <text class="legend" x="%.3f" y="%.3f">â—‰ gas giant}
.
qq{ – ▲ scout base}
.
qq{ – ★ navy base}
.
qq{ – <tspan class="trade">▮</tspan> trade}
,
-10, (
$self
->height + 1) *
sqrt
(3) *
$scale
);
if
(
$self
->source) {
$doc
.=
' – <a xlink:href="'
.
$self
->source .
'">UWP</a>'
;
}
$doc
.=
qq{</text>\n}
;
$doc
.=
sprintf
(
qq{ <text class="direction" x="%.3f" y="%.3f">coreward</text>\n}
,
$self
->width/2 * 1.5 *
$scale
, -0.13 *
$scale
);
( run in 0.255 second using v1.01-cache-2.11-cpan-4e96b696675 )