#! /usr/bin/perl
# vim: sw=4 et nowrap
my $GENERATE;
use lib 't/lib';
use Test::NetHack::FOV::Compare 'compare';
BEGIN {
$GENERATE = (@ARGV == 1 && $ARGV[0] eq '-regenerate') ? 1 : 0;
if ($GENERATE) {
require Test::NetHack::FOV::Real;
Test::NetHack::FOV::Real->import('calculate_fov');
} else {
require NetHack::FOV;
NetHack::FOV->import('calculate_fov');
require Test::More;
Test::More->import(tests => 352);
}
}
my @textmap =
(' '
,' '
,' ########### '
,' ############## ############# '
,' ################ ######### ### # '
,' ############## ################ # ##### '
,' # # # ############### # '
,' ######## # ################## ### '
,' # ### # # ######### # '
,' ### # ##### # ## '
,' # ### # # # ## # '
,' ### # ##### # # ############## '
,' # ######## # # # ######## ############## '
,' # # ##### # # ############## '
,' ######## # # ######## ############## '
,' ########### # ###### '
,' ######## ###### '
,' ######## '
,' ######## '
,' '
,' '
);
my @map;
for my $y (0 .. 20) {
for my $x (0 .. 79) {
$map[$x][$y] = substr($textmap[$y], $x, 1) eq '#' ? 0 : 1;
}
}
sub cb {
my ($x,$y) = @_;
return $x >= 0 && $y >= 0 && $x < 80 && $y < 21 && !$map[$x][$y];
}
my @floor;
my @maybevis;
for my $y (0 .. 20) {
TILE:for my $x (0 .. 79) {
push @floor, [$x,$y] if !$map[$x][$y];
my $couldsee;
for ([-1,-1],[-1,0],[-1,1],[0,-1],[0,0],[0,1],[1,-1],[1,0],[1,1]) {
$couldsee ||= !$map[$_->[0]+$x][$_->[1]+$y];
}
push @maybevis, [$x,$y] if $couldsee;
}
}
for my $xy (@floor) {
my $mp;
my $AoA = calculate_fov(@$xy, \&cb);
if ($GENERATE) {
for my $i (0 .. (@maybevis - 1)) {
vec($mp, $i, 1) = $AoA->[$maybevis[$i][0]][$maybevis[$i][1]];
}
print $mp;
} else {
read DATA, $mp, (@maybevis + 7) / 8;
my $AoAr = [];
for my $i (0 .. (@maybevis - 1)) {
$AoAr->[$maybevis[$i][0]][$maybevis[$i][1]] = vec($mp, $i, 1);
}
compare(\@map, $xy->[0], $xy->[1], $AoA, $AoAr);
}
}
close DATA unless $GENERATE;
__DATA__
ü øÿ üÿ ð x ` ü øÿ þÿ ð x ü øÿ þÿ ° ü øÿ þÿ ¸ ( ü øÿ þÿ ¸ÿ ( ü øÿ þÿ ÿ ü øÿ þÿ ÿ ü øÿ þÿ ÿ ü øÿ þÿ ÿ ü øÿ þÿ ÿ ü øÿ þÿ ÿ þÿ üÿ üÿ ÿ þÛ þÿ üÿ üÿ ÿ þÛ þÿ üÿ üÿ ÿ þÛ þÿ üÿ üÿ ÿ þß þÿ üÿ üÿ ÿ þß þÿ üÿ üÿ ÿ þß þÿ üÿ üÿ ÿ þÿ þÿ üÿ üÿ ÿ þÿ þÿ üÿ üÿ ÿ þÿ þÿ üÿ üÿ ÿ þÿ= È F þÿ üÿ üÿ ÿ þÿ= Ì g þÿ üÿ üÿ ÿ þÿ ä c À 8 ` p þÿ üÿ üÿ ÿÿ þÿ d # @ þÿ üÿ üÿ ÿÿ þÿ ` ð îÿ þÿ ð ø ` ø þÿ þÿ ø x ü þÿ þÿ ¸ ( ü þÿ þÿ ü þÿ þÿ ü þÿ þÿ ü þÿ þÿ ü þÿ þÿ ü þÿ þÿ ÿ ü þÿ þÿ ÿ ü þÿ þÿ ÿ ü þÿ þÿ ü þÿ þÿ þÿ üÿ üÿ ÿ þÛ þÿ üÿ üÿ ÿ þÛ þÿ üÿ üÿ ÿ þÛ þÿ üÿ üÿ ÿ þÛ þÿ üÿ üÿ ÿ þÛ þÿ üÿ üÿ ÿ þß þÿ üÿ üÿ ÿ þß þÿ üÿ üÿ ÿ þß þÿ üÿ üÿ ÿ þÿ þÿ üÿ üÿ ÿ þÿ þÿ üÿ üÿ ÿ þÿ Ä c þÿ üÿ üÿ ÿ þÿ à ` À 8 ` p þÿ üÿ üÿ ÿ þû ` þÿ üÿ üÿ ÿ þû} þÿ üÿ üÿ ÿÿ þû>