#ifdef WITH_TESTS #include "../Tests.h" #include "../../navMesh/NavMeshFactory.h" #include "../../navMesh/walk/NavMeshSub.h" using namespace NM; TEST(NavMeshSub, build1) { Floorplan::IndoorMap map; Floorplan::Floor floor; map.floors.push_back(&floor); floor.atHeight = 0; floor.height = 3; Floorplan::FloorOutlinePolygon outline; floor.outline.push_back(&outline); outline.poly.points.push_back(Point2(0,0)); outline.poly.points.push_back(Point2(10,0)); outline.poly.points.push_back(Point2(10,10)); outline.poly.points.push_back(Point2(0,10)); outline.outdoor = false; outline.method = Floorplan::OutlineMethod::ADD; NavMeshSettings set; NavMesh nm; NavMeshFactory fac(&nm, set); fac.build(&map); nm.getLocation(Point3(1,1,0)); nm.getLocation(Point3(8,0.2,0)); nm.getLocation(Point3(0.2,8,0)); nm.getLocation(Point3(4.5,4.5,0)); } TEST(NavMeshSub, draw) { Floorplan::IndoorMap map; Floorplan::Floor floor; map.floors.push_back(&floor); floor.atHeight = 0; floor.height = 3; Floorplan::FloorOutlinePolygon outline; floor.outline.push_back(&outline); outline.outdoor = false; outline.method = Floorplan::OutlineMethod::ADD; // circle (many triangles) int i = 0; for (float f = 0; f < M_PI*2; f += 0.1) { const float x = std::cos(f) * 10; const float y = std::sin(f) * 10; outline.poly.points.push_back(Point2(x,y)); ++i; } Floorplan::FloorOutlinePolygon remove; floor.outline.push_back(&remove); remove.outdoor = false; remove.method = Floorplan::OutlineMethod::REMOVE; remove.poly.points.push_back(Point2(-2,-2)); remove.poly.points.push_back(Point2(+2,-2)); remove.poly.points.push_back(Point2(+2,+2)); remove.poly.points.push_back(Point2(-2,+2)); NavMeshSettings set; NavMesh nm; NavMeshFactory fac(&nm, set); fac.build(&map); NavMeshRandom rnd = nm.getRandom(); for (int i = 0; i < 1000; ++i) { NavMeshLocation loc = rnd.draw(); ASSERT_TRUE(loc.tria->contains(loc.pos)); NavMeshSub sub2(loc, 5); NavMeshRandom rnd2 = sub2.getRandom(); for (int j = 0; j < 100; ++j) { NavMeshLocation loc2 = rnd2.draw(); ASSERT_TRUE(loc2.tria->contains(loc2.pos)); ASSERT_TRUE(sub2.contains(loc2.pos)); } } } #endif