mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-19 19:39:41 +00:00
Remove navmesh tiles outside allowed range first
* Change job change type to remove when tile is outside allowed range. * Swap try number and change type in job priority. To make sure remove jobs always processed before any other.
This commit is contained in:
parent
0f11acf709
commit
0066c446f8
2 changed files with 12 additions and 2 deletions
|
@ -8,6 +8,8 @@
|
|||
#include <components/misc/thread.hpp>
|
||||
#include <components/loadinglistener/loadinglistener.hpp>
|
||||
|
||||
#include <DetourNavMesh.h>
|
||||
|
||||
#include <osg/Stats>
|
||||
|
||||
#include <algorithm>
|
||||
|
@ -48,7 +50,7 @@ namespace
|
|||
|
||||
auto getPriority(const Job& job) noexcept
|
||||
{
|
||||
return std::make_tuple(job.mProcessTime, job.mTryNumber, job.mChangeType, job.mDistanceToPlayer, job.mDistanceToOrigin);
|
||||
return std::make_tuple(job.mProcessTime, job.mChangeType, job.mTryNumber, job.mDistanceToPlayer, job.mDistanceToOrigin);
|
||||
}
|
||||
|
||||
struct LessByJobPriority
|
||||
|
@ -123,11 +125,19 @@ namespace DetourNavigator
|
|||
if (!playerTileChanged && changedTiles.empty())
|
||||
return;
|
||||
|
||||
const dtNavMeshParams params = *navMeshCacheItem->lockConst()->getImpl().getParams();
|
||||
|
||||
const std::lock_guard<std::mutex> lock(mMutex);
|
||||
|
||||
if (playerTileChanged)
|
||||
{
|
||||
for (JobIt job : mWaiting)
|
||||
{
|
||||
job->mDistanceToPlayer = getManhattanDistance(job->mChangedTile, playerTile);
|
||||
if (!shouldAddTile(job->mChangedTile, playerTile, std::min(mSettings.get().mMaxTilesNumber, params.maxTiles)))
|
||||
job->mChangeType = ChangeType::remove;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& [changedTile, changeType] : changedTiles)
|
||||
{
|
||||
|
|
|
@ -60,7 +60,7 @@ namespace DetourNavigator
|
|||
const TilePosition mChangedTile;
|
||||
const std::chrono::steady_clock::time_point mProcessTime;
|
||||
unsigned mTryNumber = 0;
|
||||
const ChangeType mChangeType;
|
||||
ChangeType mChangeType;
|
||||
int mDistanceToPlayer;
|
||||
const int mDistanceToOrigin;
|
||||
|
||||
|
|
Loading…
Reference in a new issue