mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-20 15:40:32 +00:00
Merge branch 'navmesh_save_cache_capacity' into 'master'
Do not cache navmesh when only object transformation is changed See merge request OpenMW/openmw!1101
This commit is contained in:
commit
d939916369
@ -18,6 +18,8 @@ namespace
|
||||
{
|
||||
using DetourNavigator::ChangeType;
|
||||
using DetourNavigator::TilePosition;
|
||||
using DetourNavigator::UpdateType;
|
||||
using DetourNavigator::ChangeType;
|
||||
|
||||
int getManhattanDistance(const TilePosition& lhs, const TilePosition& rhs)
|
||||
{
|
||||
@ -35,6 +37,13 @@ namespace
|
||||
result = std::min(result, getManhattanDistance(position, tile));
|
||||
return result;
|
||||
}
|
||||
|
||||
UpdateType getUpdateType(ChangeType changeType) noexcept
|
||||
{
|
||||
if (changeType == ChangeType::update)
|
||||
return UpdateType::Temporary;
|
||||
return UpdateType::Persistent;
|
||||
}
|
||||
}
|
||||
|
||||
namespace DetourNavigator
|
||||
@ -282,7 +291,7 @@ namespace DetourNavigator
|
||||
const auto offMeshConnections = mOffMeshConnectionsManager.get().get(job.mChangedTile);
|
||||
|
||||
const auto status = updateNavMesh(job.mAgentHalfExtents, recastMesh.get(), job.mChangedTile, playerTile,
|
||||
offMeshConnections, mSettings, navMeshCacheItem, mNavMeshTilesCache);
|
||||
offMeshConnections, mSettings, navMeshCacheItem, mNavMeshTilesCache, getUpdateType(job.mChangeType));
|
||||
|
||||
if (recastMesh != nullptr)
|
||||
{
|
||||
|
@ -506,7 +506,7 @@ namespace DetourNavigator
|
||||
UpdateNavMeshStatus updateNavMesh(const osg::Vec3f& agentHalfExtents, const RecastMesh* recastMesh,
|
||||
const TilePosition& changedTile, const TilePosition& playerTile,
|
||||
const std::vector<OffMeshConnection>& offMeshConnections, const Settings& settings,
|
||||
const SharedNavMeshCacheItem& navMeshCacheItem, NavMeshTilesCache& navMeshTilesCache)
|
||||
const SharedNavMeshCacheItem& navMeshCacheItem, NavMeshTilesCache& navMeshTilesCache, UpdateType updateType)
|
||||
{
|
||||
Log(Debug::Debug) << std::fixed << std::setprecision(2) <<
|
||||
"Update NavMesh with multiple tiles:" <<
|
||||
@ -517,8 +517,6 @@ namespace DetourNavigator
|
||||
" playerTile=(" << playerTile << ")" <<
|
||||
" changedTileDistance=" << getDistance(changedTile, playerTile);
|
||||
|
||||
const auto params = *navMeshCacheItem->lockConst()->getImpl().getParams();
|
||||
|
||||
if (!recastMesh)
|
||||
{
|
||||
Log(Debug::Debug) << "Ignore add tile: recastMesh is null";
|
||||
@ -542,6 +540,8 @@ namespace DetourNavigator
|
||||
return navMeshCacheItem->lock()->removeTile(changedTile);
|
||||
}
|
||||
|
||||
const dtNavMeshParams params = *navMeshCacheItem->lockConst()->getImpl().getParams();
|
||||
|
||||
if (!shouldAddTile(changedTile, playerTile, std::min(settings.mMaxTilesNumber, params.maxTiles)))
|
||||
{
|
||||
Log(Debug::Debug) << "Ignore add tile: too far from player";
|
||||
@ -562,6 +562,10 @@ namespace DetourNavigator
|
||||
return navMeshCacheItem->lock()->removeTile(changedTile);
|
||||
}
|
||||
|
||||
if (updateType == UpdateType::Temporary)
|
||||
return navMeshCacheItem->lock()->updateTile(changedTile, NavMeshTilesCache::Value(),
|
||||
makeNavMeshTileData(*prepared, offMeshConnections, agentHalfExtents, changedTile, settings));
|
||||
|
||||
cachedNavMeshData = navMeshTilesCache.set(agentHalfExtents, changedTile, *recastMesh, std::move(prepared));
|
||||
|
||||
if (!cachedNavMeshData)
|
||||
|
@ -47,10 +47,16 @@ namespace DetourNavigator
|
||||
|
||||
NavMeshPtr makeEmptyNavMesh(const Settings& settings);
|
||||
|
||||
enum class UpdateType
|
||||
{
|
||||
Persistent,
|
||||
Temporary
|
||||
};
|
||||
|
||||
UpdateNavMeshStatus updateNavMesh(const osg::Vec3f& agentHalfExtents, const RecastMesh* recastMesh,
|
||||
const TilePosition& changedTile, const TilePosition& playerTile,
|
||||
const std::vector<OffMeshConnection>& offMeshConnections, const Settings& settings,
|
||||
const SharedNavMeshCacheItem& navMeshCacheItem, NavMeshTilesCache& navMeshTilesCache);
|
||||
const SharedNavMeshCacheItem& navMeshCacheItem, NavMeshTilesCache& navMeshTilesCache, UpdateType updateType);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user