mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-10-31 22:56:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "navmesh.hpp"
 | |
| #include "vismask.hpp"
 | |
| 
 | |
| #include <components/sceneutil/navmesh.hpp>
 | |
| 
 | |
| #include <osg/PositionAttitudeTransform>
 | |
| 
 | |
| namespace MWRender
 | |
| {
 | |
|     NavMesh::NavMesh(const osg::ref_ptr<osg::Group>& root, bool enabled)
 | |
|         : mRootNode(root)
 | |
|         , mEnabled(enabled)
 | |
|         , mGeneration(0)
 | |
|         , mRevision(0)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     NavMesh::~NavMesh()
 | |
|     {
 | |
|         if (mEnabled)
 | |
|             disable();
 | |
|     }
 | |
| 
 | |
|     bool NavMesh::toggle()
 | |
|     {
 | |
|         if (mEnabled)
 | |
|             disable();
 | |
|         else
 | |
|             enable();
 | |
| 
 | |
|         return mEnabled;
 | |
|     }
 | |
| 
 | |
|     void NavMesh::update(const dtNavMesh& navMesh, const std::size_t id,
 | |
|         const std::size_t generation, const std::size_t revision, const DetourNavigator::Settings& settings)
 | |
|     {
 | |
|         if (!mEnabled || (mGroup && mId == id && mGeneration == generation && mRevision == revision))
 | |
|             return;
 | |
| 
 | |
|         mId = id;
 | |
|         mGeneration = generation;
 | |
|         mRevision = revision;
 | |
|         if (mGroup)
 | |
|             mRootNode->removeChild(mGroup);
 | |
|         mGroup = SceneUtil::createNavMeshGroup(navMesh, settings);
 | |
|         if (mGroup)
 | |
|         {
 | |
|             mGroup->setNodeMask(Mask_Debug);
 | |
|             mRootNode->addChild(mGroup);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void NavMesh::reset()
 | |
|     {
 | |
|         if (mGroup)
 | |
|         {
 | |
|             mRootNode->removeChild(mGroup);
 | |
|             mGroup = nullptr;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void NavMesh::enable()
 | |
|     {
 | |
|         if (mGroup)
 | |
|             mRootNode->addChild(mGroup);
 | |
|         mEnabled = true;
 | |
|     }
 | |
| 
 | |
|     void NavMesh::disable()
 | |
|     {
 | |
|         if (mGroup)
 | |
|             mRootNode->removeChild(mGroup);
 | |
|         mEnabled = false;
 | |
|     }
 | |
| }
 |