Commit Graph

169 Commits (9cadfbb6cd3d03a1a72526a1396fb5f1b079cc0d)

Author SHA1 Message Date
elsid 3e67f5ffa5
Detect and ignore updates for oscillating objects
To avoid triggering NavMesh update when RecastMesh change should not change
NavMesh.

Based on the following assumption:
Given a set of transformations and a bounding shape for all these
tranformations, a new object transformation that does not change this
bounding shape also should not change navmesh if for all of this object
transformations resulting navmesh tiles are equivalent

The idea is to report back to RecastMeshManager all changes of NavMesh if there
are any assiciated with RecastMesh version. So we know the last time when
RecastMesh change resulted into the NavMesh change. When later report shows
that there was no NavMesh change for a new RecastMesh version we can assume
that any object transformation within the same bounding box should not change
NavMesh.
4 years ago
elsid 64fb700ae9
Remove unnecessary relation between updateCompoundObject and RecastMeshObject 4 years ago
elsid 629cedb6d0
Do not track last build revision in RecastMeshManger
mLastBuildRevision == mRevision with current use cases does not happen. But
even if this will happen when another use case will be added it does not save
much computation. The most expensive operation is not adding objects to the
MeshBuilder but to optimize resulting navmesh that will happen anyway in
MeshBuilder::create call.
4 years ago
elsid 62f32f4543
Do not replace equivalent navmesh tiles 4 years ago
elsid ab8d1c02d4
Set idle priority for navmesh generation thread
Support Linux, Windows, FreeBSD.
4 years ago
elsid 39c0ce9ddf
Build limited path for far destinations
When distance between start and end point is greater than max radius of area
possibly covered by navmesh there is no way to find path via navmesh. Also if
distance is greater than cell size navmesh might not exists withing mentioned
area because cell is not loaded therefore navmesh is not generated. So minumum
of these values is used to limit max path distance. Assuming that path
actually exists it's possible to build path to the edge of a circle. When
actor reaches initial edge path is built further. However it will not be
optimal.
4 years ago
Evil Eye eb07818f13 Ignore agents without bounding boxes 4 years ago
psi29a 937549c99e Merge branch 'fix_still_actors' into 'master'
Make actor flee from a combat when cannot reach a target (#5851)

See merge request OpenMW/openmw!601
4 years ago
elsid bc67669a97
Comment unused argument 4 years ago
elsid 4983684fda
Fix implicit int to float conversion warning 4 years ago
elsid bb0c478954
Add missing include and use std malloc and free 4 years ago
elsid 3a9b1ce63a
Use camel case for local constant 4 years ago
elsid a7fe6c7ba1
Move duplicated usage patter of dtNavMeshQuery::findNearestPoly into a separate function 4 years ago
elsid d3ab6c972f
Avoid set unused position from dtNavMeshQuery::findNearestPoly result 4 years ago
elsid 8dba61f7ae
Use navmesh raycast to find reachable position around target 4 years ago
elsid 68fe6b9114
Use only item size to check whether item fits cache
Item size has to be counted anyway and there is no reason to check only navmesh
data first.
4 years ago
elsid 3a2cea5271
Use raw recast mesh data and off mesh connections for navmesh key
Serialization into a vector of chars produces inconsistent results that leads
to reduced cache hit rate. Using a structured object is a more clear solution
and allows to remove serialization and nontrivial key compare logic with more
straigt forward structured object comparison.
4 years ago
elsid ad1f8c1e84
Sort water and off mesh connections for recast mesh
Inconsisten order of these objects in navmesh cache key leads to cache misses
due to key inequality.
4 years ago
elsid 489107c5ee
Count navmesh cache key once in item size
Key is stored only in NavMeshTilesCache::Item, TileMap uses KeyView with
a pointer to a vector.
4 years ago
elsid 88ca4a1db6
Count navmesh cache hit rate 4 years ago
elsid d2d8a7a940
Fix passing null to memcpy
/home/elsid/dev/openmw/components/detournavigator/navmeshtilescache.cpp:36:24: runtime error: null pointer passed as argument 2, which is declared to never be null
    #0 0x55e37ba4cda5 in makeNavMeshKey /home/elsid/dev/openmw/components/detournavigator/navmeshtilescache.cpp:36
    #1 0x55e37ba4cda5 in DetourNavigator::NavMeshTilesCache::set(osg::Vec3f const&, osg::Vec2i const&, DetourNavigator::RecastMesh const&, std::vector<DetourNavigator::OffMeshConnection, std::allocator<DetourNavigator::OffMeshConnection> > const&, DetourNavigator::NavMeshData&&) /home/elsid/dev/openmw/components/detournavigator/navmeshtilescache.cpp:81
    #2 0x55e37fe3c861 in DetourNavigator::updateNavMesh(osg::Vec3f const&, DetourNavigator::RecastMesh const*, osg::Vec2i const&, osg::Vec2i const&, std::vector<DetourNavigator::OffMeshConnection, std::allocator<DetourNavigator::OffMeshConnection> > const&, DetourNavigator::Settings const&, std::shared_ptr<Misc::ScopeGuarded<DetourNavigator::NavMeshCacheItem> > const&, DetourNavigator::NavMeshTilesCache&) /home/elsid/dev/openmw/components/detournavigator/makenavmesh.cpp:582
    #3 0x55e37fb796ce in DetourNavigator::AsyncNavMeshUpdater::processJob(DetourNavigator::AsyncNavMeshUpdater::Job const&) /home/elsid/dev/openmw/components/detournavigator/asyncnavmeshupdater.cpp:178
    #4 0x55e37fb9a125 in DetourNavigator::AsyncNavMeshUpdater::process() /home/elsid/dev/openmw/components/detournavigator/asyncnavmeshupdater.cpp:144
    #5 0x7f013f585c23 in execute_native_thread_routine /build/gcc/src/gcc/libstdc++-v3/src/c++11/thread.cc:80
    #6 0x7f013f8c63e8 in start_thread (/usr/lib/libpthread.so.0+0x93e8)
    #7 0x7f013e91d292 in __GI___clone (/usr/lib/libc.so.6+0x100292)
4 years ago
Andrei Kortunov 8084a336b5 Replace zeroes and nulls by nullptrs 4 years ago
elsid 9b11b8a27b
Fix boundary check 4 years ago
Bret Curtis 0e0c091e15 add more optionals and casserts for windows 4 years ago
Bret Curtis 4a54d375cc add cassert for windows 4 years ago
Bret Curtis f6bead88a9 purge boost/optional.hpp headers 4 years ago
Bret Curtis 62b0781f7d use std::optional instead of boost::optional 4 years ago
Bret Curtis 5a824d0333 components/compiler cleanup; also cleaned up related cascading warnings; fixed up final/override issues 4 years ago
Assumeru 72549651e0
Rework container resolution (#3006)
* Rework container resolution

* add optional argument to getCount

* remove now-redundant changes

* undo worldimp changes

* move save-fixing code to InventoryState

* replace Rng instances with Seeds
4 years ago
psi29a 9a912486f9 Merge branch 'deprecated-exception' into 'master'
Use C++11 exception specification

See merge request OpenMW/openmw!343
4 years ago
fredzio 460e69e92a Get rid of warning: dynamic exception specifications are deprecated 4 years ago
elsid 7591d45008
Use memcpy to create navmesh key
Implementation with memcpy is ~13 times faster.
4 years ago
elsid f637dc38bd
Add cached flag to update navmesh status 4 years ago
elsid eb140ed15f
Write unknown status numeric value 4 years ago
elsid 7d73e73cad
Consider tile as not removed when it is not found 4 years ago
psi29a 0dc7715c35 Merge branch 'object_paging_retry' into 'master'
Object Paging

See merge request OpenMW/openmw!209
5 years ago
elsid 00197e1cd9
Optimize recast mesh size by vertex deduplication 5 years ago
elsid b095ca6c86
Use actor speed to define area cost for pathfinding 5 years ago
elsid 439588d10e
Remove unused mOffMeshConnectionIds 5 years ago
bzzt lost a hitlab login c1ebd9474b stop navmesh updates when ai off
Signed-off-by: Bret Curtis <psi29a@gmail.com>
5 years ago
elsid c4cd3b2c4f
Add pathgrid to navmesh as off mesh connection 5 years ago
elsid 14d0ca4cd3
Cast float to btScalar 5 years ago
elsid b150d681a9
Update same navmesh tile with limited frequency 5 years ago
elsid 10daadefbe
Add missing include 5 years ago
Bret Curtis b7f7aabd8b
Merge pull request #2806 from elsid/detournavigator_tests
Add detournavigator test for multiple worker threads
5 years ago
elsid 899a6b5aa3
Workaround for GCC 5 bug
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61636
5 years ago
elsid bd1ef4dd6d
Add detournavigator test for multiple worker threads 5 years ago
Alexei Dobrohotov d42cb4f16d
Merge pull request #2805 from elsid/detournavigator_update_callback
Use callback to handle changed tiles
5 years ago
elsid df6e85b619
Use callback to handle changed tiles
Instead of collecting changed tiles into a temporary vector.
5 years ago
elsid 7502db1570
Add number of thread jobs to update jobs stats 5 years ago