mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-15 16:19:54 +00:00
50 lines
1.4 KiB
C++
50 lines
1.4 KiB
C++
#include "navmeshmanager.hpp"
|
|
#include "debug.hpp"
|
|
|
|
#include <iostream>
|
|
|
|
namespace DetourNavigator
|
|
{
|
|
NavMeshManager::NavMeshManager(const Settings& settings)
|
|
: mRecastMeshManager(settings)
|
|
, mAsyncNavMeshUpdater(settings)
|
|
{
|
|
}
|
|
|
|
bool NavMeshManager::removeObject(std::size_t id)
|
|
{
|
|
if (!mRecastMeshManager.removeObject(id))
|
|
return false;
|
|
++mRevision;
|
|
return true;
|
|
}
|
|
|
|
void NavMeshManager::reset(const osg::Vec3f& agentHalfExtents)
|
|
{
|
|
mCache.erase(agentHalfExtents);
|
|
}
|
|
|
|
void NavMeshManager::update(const osg::Vec3f& agentHalfExtents)
|
|
{
|
|
auto it = mCache.find(agentHalfExtents);
|
|
if (it == mCache.end())
|
|
it = mCache.insert(std::make_pair(agentHalfExtents, std::make_shared<NavMeshCacheItem>(mRevision))).first;
|
|
else if (it->second->mRevision >= mRevision)
|
|
return;
|
|
it->second->mRevision = mRevision;
|
|
mAsyncNavMeshUpdater.post(agentHalfExtents, mRecastMeshManager.getMesh(), it->second);
|
|
}
|
|
|
|
void NavMeshManager::wait()
|
|
{
|
|
mAsyncNavMeshUpdater.wait();
|
|
}
|
|
|
|
NavMeshConstPtr NavMeshManager::getNavMesh(const osg::Vec3f& agentHalfExtents) const
|
|
{
|
|
const auto it = mCache.find(agentHalfExtents);
|
|
if (it == mCache.end())
|
|
return nullptr;
|
|
return it->second->mValue;
|
|
}
|
|
}
|