mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-10-31 16:26:42 +00:00 
			
		
		
		
	Add option to limit max number of navmesh tiles
This commit is contained in:
		
							parent
							
								
									ff47df4f2c
								
							
						
					
					
						commit
						f2e47d640d
					
				
					 7 changed files with 32 additions and 2 deletions
				
			
		|  | @ -61,6 +61,7 @@ namespace | |||
|             mSettings.mMaxSmoothPathSize = 1024; | ||||
|             mSettings.mTrianglesPerChunk = 256; | ||||
|             mSettings.mMaxPolys = 4096; | ||||
|             mSettings.mMaxTilesNumber = 512; | ||||
|             mNavigator.reset(new NavigatorImpl(mSettings)); | ||||
|         } | ||||
|     }; | ||||
|  |  | |||
|  | @ -628,7 +628,7 @@ namespace DetourNavigator | |||
|             return removeTile(); | ||||
|         } | ||||
| 
 | ||||
|         if (!shouldAddTile(changedTile, playerTile, params.maxTiles)) | ||||
|         if (!shouldAddTile(changedTile, playerTile, std::min(settings.mMaxTilesNumber, params.maxTiles))) | ||||
|         { | ||||
|             log("ignore add tile: too far from player"); | ||||
|             return removeTile(); | ||||
|  |  | |||
|  | @ -157,7 +157,7 @@ namespace DetourNavigator | |||
|                 if (changedTiles->second.empty()) | ||||
|                     mChangedTiles.erase(changedTiles); | ||||
|             } | ||||
|             const auto maxTiles = navMesh.getParams()->maxTiles; | ||||
|             const auto maxTiles = std::min(mSettings.mMaxTilesNumber, navMesh.getParams()->maxTiles); | ||||
|             mRecastMeshManager.forEachTilePosition([&] (const TilePosition& tile) | ||||
|             { | ||||
|                 if (tilesToPost.count(tile)) | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ namespace DetourNavigator | |||
|         navigatorSettings.mMaxEdgeLen = ::Settings::Manager::getInt("max edge len", "Navigator"); | ||||
|         navigatorSettings.mMaxNavMeshQueryNodes = ::Settings::Manager::getInt("max nav mesh query nodes", "Navigator"); | ||||
|         navigatorSettings.mMaxPolys = ::Settings::Manager::getInt("max polygons per tile", "Navigator"); | ||||
|         navigatorSettings.mMaxTilesNumber = ::Settings::Manager::getInt("max tiles number", "Navigator"); | ||||
|         navigatorSettings.mMaxVertsPerPoly = ::Settings::Manager::getInt("max verts per poly", "Navigator"); | ||||
|         navigatorSettings.mRegionMergeSize = ::Settings::Manager::getInt("region merge size", "Navigator"); | ||||
|         navigatorSettings.mRegionMinSize = ::Settings::Manager::getInt("region min size", "Navigator"); | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ namespace DetourNavigator | |||
|         int mMaxEdgeLen = 0; | ||||
|         int mMaxNavMeshQueryNodes = 0; | ||||
|         int mMaxPolys = 0; | ||||
|         int mMaxTilesNumber = 0; | ||||
|         int mMaxVertsPerPoly = 0; | ||||
|         int mRegionMergeSize = 0; | ||||
|         int mRegionMinSize = 0; | ||||
|  |  | |||
|  | @ -24,6 +24,24 @@ Moving across external world, entering/exiting location produce nav mesh update. | |||
| NPC and creatures may not be able to find path before nav mesh is built around them. | ||||
| Try to disable this if you want to have old fashioned AI which doesn't know where to go when you stand behind that stone and casting a firebolt. | ||||
| 
 | ||||
| max tiles number | ||||
| ---------------- | ||||
| 
 | ||||
| :Type:		integer | ||||
| :Range:		>= 0 | ||||
| :Default:	512 | ||||
| 
 | ||||
| Number of tiles at nav mesh. | ||||
| Nav mesh covers circle area around player. | ||||
| This option allows to set an explicit limit for nav mesh size, how many tiles should fit into circle. | ||||
| If actor is inside this area it able to find path over nav mesh. | ||||
| Increasing this value may decrease performance. | ||||
| 
 | ||||
| .. note:: | ||||
|     Don't expect infinite nav mesh size increasing. | ||||
|     This condition is always true: ``max tiles number * max polygons per tile <= 4194304``. | ||||
|     It's a limitation of `Recastnavigation <https://github.com/recastnavigation/recastnavigation>`_ library. | ||||
| 
 | ||||
| Advanced settings | ||||
| ***************** | ||||
| 
 | ||||
|  | @ -322,6 +340,12 @@ Maximum number of polygons per nav mesh tile. Maximum number of nav mesh tiles d | |||
| this value. 22 bits is a limit to store both tile identifier and polygon identifier (tiles = 2^(22 - log2(polygons))). | ||||
| See `recastnavigation <https://github.com/recastnavigation/recastnavigation>`_ for more details. | ||||
| 
 | ||||
| .. Warning:: | ||||
|     Lower value may lead to ignored world geometry on nav mesh. | ||||
|     Greater value will reduce number of nav mesh tiles. | ||||
|     This condition is always true: ``max tiles number * max polygons per tile <= 4194304``. | ||||
|     It's a limitation of `Recastnavigation <https://github.com/recastnavigation/recastnavigation>`_ library. | ||||
| 
 | ||||
| max verts per poly | ||||
| ------------------ | ||||
| 
 | ||||
|  |  | |||
|  | @ -670,6 +670,9 @@ enable nav mesh render = false | |||
| # Render agents paths (true, false) | ||||
| enable agents paths render = false | ||||
| 
 | ||||
| # Max number of navmesh tiles (value >= 0) | ||||
| max tiles number = 512 | ||||
| 
 | ||||
| [Shadows] | ||||
| 
 | ||||
| # Enable or disable shadows. Bear in mind that this will force OpenMW to use shaders as if "[Shaders]/force shaders" was set to true. | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue