Game-TileMap-Pathfinding

 view release on metacpan or  search on metacpan

t/author-leaks.t  view on Meta::CPAN

################################################################################

my $map_str = <<MAP;
	____
	_##_
	_##_
	____
MAP

Test::MemoryGrowth::no_growth {
	my $legend = Game::TileMap->new_legend;
	$legend
		->add_wall('#')
		->add_void('.')
		->add_terrain('_' => 'pavement')
		;

	my $map = Game::TileMap->new(
		legend => $legend,
		map => $map_str
	);

	my $pf = Game::TileMap::Pathfinding->new(map => $map);
	my $path;

	$path = $pf->find_path(0, 0, 4, 4);
	$path = $pf->find_path(4, 4, 0, 0);
	$path = $pf->find_path(2, 2, 3, 3);

t/base.t  view on Meta::CPAN

use Test2::V0;
use Game::TileMap::Pathfinding;
use Game::TileMap;

################################################################################
# This tests whether interface works and very basic paths are found
################################################################################

my $legend = Game::TileMap->new_legend;
$legend
	->add_wall('#')
	->add_void('.')
	->add_terrain('_' => 'pavement')
	;

my $map_str = <<MAP;
	____
	____
	____
	____
MAP

my $map = Game::TileMap->new(
	legend => $legend,
	map => $map_str
);

subtest 'should have a working interface' => sub {
	my $pf = Game::TileMap::Pathfinding->new(map => $map);
	my $path = $pf->find_path(0, 3, 1, 2);

	isa_ok $path, 'Game::TileMap::Pathfinding::Result';
	is $path->step_count, 2, 'step count ok';
	is [$path->steps], [

t/diagonal_movement.t  view on Meta::CPAN

use Test2::V0;
use Game::TileMap::Pathfinding;
use Game::TileMap;

################################################################################
# This tests whether different paths are taken when diagonal movement is
# enabled.
################################################################################

my $legend = Game::TileMap->new_legend;
$legend
	->add_wall('#')
	->add_void('.')
	->add_terrain('_' => 'pavement')
	->add_object(tests => '1' => 'first test')
	->add_object(tests => '2' => 'second test')
	->add_object(tests => '3' => 'third test')
	->add_object(tests => '4' => 'fourth test')
	;

my $map_str = <<MAP;

t/diagonal_movement.t  view on Meta::CPAN

	_1______
	________
	4_2_____
	_##_____
	_##___1_
	2___####
	3______4
MAP

my $map = Game::TileMap->new(
	legend => $legend,
	map => $map_str
);

subtest 'should prefer moving diagonally rather than orthogonally' => sub {
	my $pf = Game::TileMap::Pathfinding->new(map => $map, diagonal_movement => !!1);
	my $path = $pf->find_path(1, 6, 6, 2);

	ok defined $path, 'path found ok';
	is [@{$path}], [
		2, 5,

t/pathfinding.t  view on Meta::CPAN

use Test2::V0;
use Game::TileMap::Pathfinding;
use Game::TileMap;

################################################################################
# This tests whether more complex paths are found, and if the shortest path is
# always taken
################################################################################

my $legend = Game::TileMap->new_legend;
$legend
	->add_wall('#')
	->add_void('.')
	->add_terrain('_' => 'pavement')
	->add_object(tests => '1' => 'first test')
	->add_object(tests => '2' => 'second test')
	->add_object(tests => '3' => 'third test')
	;

my $map_str = <<MAP;
	#_#####3
	2_______
	#_#####_
	#___.2__
	#___###_
	##______
	##_#####
	1#1____3
MAP

my $map = Game::TileMap->new(
	legend => $legend,
	map => $map_str
);

subtest 'should return undef if the destination is unreachable' => sub {
	my $pf = Game::TileMap::Pathfinding->new(map => $map);
	my $path = $pf->find_path(0, 0, 2, 0);

	ok !defined $path, 'path not found ok';
};



( run in 1.620 second using v1.01-cache-2.11-cpan-364913b4093 )