mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-25 06:35:30 +00:00
Extend navigator tests for update with big object
Check for the number of generated recast mesh tiles and navmesh tiles.
This commit is contained in:
parent
a7a89ba7c1
commit
1cbe295030
@ -10,6 +10,7 @@
|
|||||||
#include <components/misc/rng.hpp>
|
#include <components/misc/rng.hpp>
|
||||||
#include <components/resource/bulletshape.hpp>
|
#include <components/resource/bulletshape.hpp>
|
||||||
|
|
||||||
|
#include <osg/io_utils>
|
||||||
#include <osg/ref_ptr>
|
#include <osg/ref_ptr>
|
||||||
|
|
||||||
#include <BulletCollision/CollisionShapes/btBoxShape.h>
|
#include <BulletCollision/CollisionShapes/btBoxShape.h>
|
||||||
@ -1232,11 +1233,16 @@ namespace
|
|||||||
|
|
||||||
TEST_F(DetourNavigatorNavigatorTest, update_for_very_big_object_should_be_limited)
|
TEST_F(DetourNavigatorNavigatorTest, update_for_very_big_object_should_be_limited)
|
||||||
{
|
{
|
||||||
CollisionShapeInstance bigBox(std::make_unique<btBoxShape>(btVector3(1e9, 1e9, 1e9)));
|
const float size = static_cast<float>(2 * static_cast<std::int64_t>(std::numeric_limits<int>::max()) - 1);
|
||||||
|
CollisionShapeInstance bigBox(std::make_unique<btBoxShape>(btVector3(size, size, 1)));
|
||||||
|
const ObjectTransform objectTransform{
|
||||||
|
.mPosition = ESM::Position{ .pos = { 0, 0, 0 }, .rot{ 0, 0, 0 } },
|
||||||
|
.mScale = 1.0f,
|
||||||
|
};
|
||||||
|
|
||||||
mNavigator->updateBounds(mPlayerPosition, nullptr);
|
mNavigator->updateBounds(mPlayerPosition, nullptr);
|
||||||
mNavigator->addAgent(mAgentBounds);
|
mNavigator->addAgent(mAgentBounds);
|
||||||
mNavigator->addObject(ObjectId(&bigBox.shape()), ObjectShapes(bigBox.instance(), mObjectTransform),
|
mNavigator->addObject(ObjectId(&bigBox.shape()), ObjectShapes(bigBox.instance(), objectTransform),
|
||||||
btTransform::getIdentity(), nullptr);
|
btTransform::getIdentity(), nullptr);
|
||||||
|
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
@ -1257,5 +1263,16 @@ namespace
|
|||||||
}
|
}
|
||||||
|
|
||||||
thread.join();
|
thread.join();
|
||||||
|
|
||||||
|
mNavigator->wait(WaitConditionType::allJobsDone, &mListener);
|
||||||
|
|
||||||
|
EXPECT_EQ(mNavigator->getRecastMeshTiles().size(), 509);
|
||||||
|
|
||||||
|
const auto navMesh = mNavigator->getNavMesh(mAgentBounds);
|
||||||
|
ASSERT_NE(navMesh, nullptr);
|
||||||
|
|
||||||
|
std::size_t usedNavMeshTiles = 0;
|
||||||
|
navMesh->lockConst()->forEachUsedTile([&](const auto&...) { ++usedNavMeshTiles; });
|
||||||
|
EXPECT_EQ(usedNavMeshTiles, 509);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user