branchrust_reboot/main/ai_recast_integrationcancel
168 Commits over 639 Days - 0.01cph!
Fix set path earlying out incorrectly when called from SetDestination
Use cleaner getter for agent
Fix path follower ticking twice per frame in editor
Prevent path leaking when agent is destroyed
Port tiger, panther, croc and naval scientists
Will need thorough testing
Remove GetCornersNonAlloc helpers and intermediate buffers
Revert recent changes to new NPCs pathfinding component, they don't need it with the new abstraction around NavMeshAgent and NavMeshPath
Port the new wolf as a test, works fine but unlike old NPCs does not support switching at runtime without throwing errors, to investigate
Port old oilrig scientists, just to check that monuments properly support switching navmesh back and forth, will port all other old scientists later
Port polar bear, boar, chicken and stag
Properly take into account "base offset" property use on chicken and stag
Route all references to unity navmesh to class with same API, to easily intercept and route requests to the correct navmesh depending on the convar
Converted bear to be able to switch between unity and custom navmesh at will, has yet to port other old and new animals as well as all humanoids
Budget the main thread part of navmesh building
Fix binary saving overwriting the beginning of the previous save but leaving without truncating the end
Fix incorrect cleanup on load fail
Better logs, fix out of bounds tile index, fix incorrect warning when loading a navmesh from a save
Fix tilesLoaded never being incremented, causing loading to fail
Finish refactor to have individual navmesh instances instead of a singleton, todo fix crash on destroy
Prepare refactor to have multiple navmeshes in same world
* new namespace for all new nav stuff to avoid confusion with old
* separate global methods
* navmesh instance methods
* C++ wrapper methods
* path helper methods
* geometry helper methods
Prepare work on moving navmesh
Update rust native lib for all platforms to contains the new recast code
Fix path not logging to vddraw, fix animals always fleeing
Fix animals running in circles
Fix compile errors from merge
Manually merge recast logic with new code
- properly embed navmesh saving and loading in SaveRestore flow
- use proper override save/load path if set
- use debugEx to not extract stackTrace when logging
- respect nav_disable convar
- fix empty tiles being null after loading from save, no tile should ever be null even if empty, this causes issue when queuing for rebuild at runtime
- consolidate redundant code paths into navmesh init, and add tile
- skip saving if navmesh was never built
Potential fix for ais getting stuck when the last point of their path lies on a boundary edge, and the last edge is perpendicular to it
Fix error when build happens before navmesh is initialized
Have DecayEntities affect navmesh at runtime when spawned and destroyed by default (remaining todo exclude IOEntity, AnimatedBuildingBlock, BaseTrap, etc)
Follow Daniel's advice of merging two redundant code paths into one
Preserve meshCache old behaviour by adding submesh tris to another field
Cancel running tile building operations if the tile is re-queued
Fix potential issue where request to rebuild tiles are ignored if the tile is currently being rebuilt, as it'll then be desynced with the geometry, add more profile markers
Try a holistic approach to detect entities that can trigger a navmesh rebuild, remove component on foundation and barricade, fix navmesh not being rebuild sometimes after entity gets destroyed (collider still detected in same frame, or client collider picked up in editor), increase navmesh definition in and around player constructions
Fix meshes not being properly collected, log time when building navmesh synchronously, fix not accounting for biome specific ores when adding nav blocker
Move everything to ai namespace, delete unused classes, move navmesh params to own file, add more safety checks in native code when creating empty navmesh, also save/load pending build operations, ignore trees, add navblocker to ores
Changing number of threads via convar will properly end the active threads and create new ones, remove unused fields, re-hook loading from save if it exists
Do not allow queueing again tiles that are actively being rebuilt, removes the need for locks on the hashset. Maybe we need to remove from the queue the tile, and add it to the end of the queue if someone asks to rebuild it again.
Replace concurrent queue and semaphore with blocking collection for job requests, and ConcurrentQueue with ConcurrentBag for job results (order does not matter)
Fix tile never being removed from dict if using sync mode
Reserve some background threads for the navmesh
- Get rid of recast demo space partition structure, after profiling deeper turns out it's slower in our use-case
- Allow tile gen to be fully synchronous with no time slicing for easier profiling
- Fix part of the world not generating
- Re-add support for different resolution in monuments
- Try out various methods of culling tris / mesh decimation, no perf improvement