diff --git a/components/detournavigator/asyncnavmeshupdater.cpp b/components/detournavigator/asyncnavmeshupdater.cpp index fd240e4a0..ce52c1416 100644 --- a/components/detournavigator/asyncnavmeshupdater.cpp +++ b/components/detournavigator/asyncnavmeshupdater.cpp @@ -14,16 +14,6 @@ namespace { return std::abs(lhs.x() - rhs.x()) + std::abs(lhs.y() - rhs.y()); } - - std::tuple makePriority(const TilePosition& position, const ChangeType changeType, - const TilePosition& playerTile) - { - return std::make_tuple( - changeType, - getManhattanDistance(position, playerTile), - getManhattanDistance(position, TilePosition {0, 0}) - ); - } } namespace DetourNavigator @@ -81,8 +71,18 @@ namespace DetourNavigator for (const auto& changedTile : changedTiles) { if (mPushed[agentHalfExtents].insert(changedTile.first).second) - mJobs.push(Job {agentHalfExtents, navMeshCacheItem, changedTile.first, - makePriority(changedTile.first, changedTile.second, playerTile)}); + { + Job job; + + job.mAgentHalfExtents = agentHalfExtents; + job.mNavMeshCacheItem = navMeshCacheItem; + job.mChangedTile = changedTile.first; + job.mChangeType = changedTile.second; + job.mDistanceToPlayer = getManhattanDistance(changedTile.first, playerTile); + job.mDistanceToOrigin = getManhattanDistance(changedTile.first, TilePosition {0, 0}); + + mJobs.push(std::move(job)); + } } log("posted ", mJobs.size(), " jobs"); diff --git a/components/detournavigator/asyncnavmeshupdater.hpp b/components/detournavigator/asyncnavmeshupdater.hpp index 39898e48e..da9733362 100644 --- a/components/detournavigator/asyncnavmeshupdater.hpp +++ b/components/detournavigator/asyncnavmeshupdater.hpp @@ -50,11 +50,18 @@ namespace DetourNavigator osg::Vec3f mAgentHalfExtents; SharedNavMeshCacheItem mNavMeshCacheItem; TilePosition mChangedTile; - std::tuple mPriority; + ChangeType mChangeType; + int mDistanceToPlayer; + int mDistanceToOrigin; + + std::tuple getPriority() const + { + return std::make_tuple(mChangeType, mDistanceToPlayer, mDistanceToOrigin); + } friend inline bool operator <(const Job& lhs, const Job& rhs) { - return lhs.mPriority > rhs.mPriority; + return lhs.getPriority() > rhs.getPriority(); } };