elsid
7ec5a20c64
Filter recast mesh triangles by global bounding box
...
Except heightfields to reduce slow down.
2019-11-30 13:19:27 +01:00
elsid
7729e396b2
Fix exceptions logging
2019-11-30 10:33:14 +01:00
Andrei Kortunov
6832a2fa9a
Remove BOM from CPP files (allows to build OpenMW with LCC on Elbrus)
2019-05-21 19:22:34 +04:00
elsid
c683dc8565
Lock navmesh tile by thread while processing
...
To avoid duplicated work on a same tile by different threads.
If tile is locked by another thread, then post job into this thread queue.
2019-04-10 22:01:50 +02:00
Andrei Kortunov
14b756a692
Use a generic logging system for RecastNavigation
2019-04-08 20:31:21 +04:00
Bret Curtis
45221418bd
Merge pull request #2260 from elsid/fix_clean_unused_navmeshes
...
Fix clean unused navmeshes
2019-03-18 08:57:46 +01:00
elsid
4624f31788
Report navigator stats
2019-03-17 22:15:18 +03:00
elsid
8adc83f6e2
Fix clean unused navmeshes
...
weak_ptr doesn't have constructor for shared_ptr&& type, so ptr wasn't
moved, just copied.
2019-03-17 21:28:34 +03:00
elsid
dd0b45ede6
Do not pass nullptr to std::memcmp
2019-03-14 22:15:57 +03:00
Bret Curtis
cb1a5f3679
Merge pull request #2245 from elsid/navigator_refactor
...
Refactor navigator related code
2019-03-11 07:51:43 +01:00
Bret Curtis
7b793b8809
Merge pull request #2244 from elsid/navmesh_cache_item_refactor
...
Make NavMeshCacheItem consistent
2019-03-11 07:51:22 +01:00
elsid
68948bc847
Avoid key allocation to find tile in cache
2019-03-11 03:01:41 +03:00
elsid
849f2078c1
Swap outside critical section
2019-03-10 23:58:49 +03:00
elsid
8d2af94b75
Use default objects for NavigatorStub methods result
2019-03-10 23:58:49 +03:00
elsid
ece111d05a
Check for jobs using predicate
2019-03-10 23:58:49 +03:00
elsid
c05fc9e054
Add missing cleanup
2019-03-10 23:58:49 +03:00
elsid
ce9aebcba1
Clear all changed tiles after post
2019-03-10 23:58:48 +03:00
elsid
9d61c49478
Store key by reference in tiles map
2019-03-10 23:56:52 +03:00
elsid
614d5243c3
Make NavMeshCacheItem consistent
...
Move all logic related to this type into its methods.
2019-03-10 23:07:36 +03:00
elsid
f6a1d3cecf
Store weak pointers to navmesh in jobs queue
...
To avoid useless processing for removed navmeshes.
2019-03-10 17:06:19 +03:00
elsid
ccc709a316
Store guarded navmesh cache item in shared_ptr
...
Remove useless SharedGuarded type.
2019-03-10 17:06:19 +03:00
elsid
0479ebf5ae
Remove unused actors and navmeshes on update
...
When there is only one actor (player) on a scene and it moving to other
cell first it will be removed from navigator then added. Remove cause
navmesh removing for its half extents. After it is added navmesh for
same half extents is created and added. While this all happens there are
still jobs for old navmesh are processing. Old navmesh still exists
because it is stored by shared pointer. So jobs take tiles from cache
and place them into old navmesh. After that other jobs take same tiles
from cache (half extents and coordinates are equal) and place them into
other navmesh. dtNavMesh changes tile data on add and remove. Adding tile
to two dtNavMesh corrupts tile in both nameshes.
2019-03-10 17:06:15 +03:00
Bret Curtis
c20e69ef24
Merge pull request #2227 from elsid/fix_twitchy_massive_creatures
...
Fix twitchy movement for massive creatures (bug #4907 )
2019-03-09 02:11:11 +01:00
elsid
b9f21ec81a
Use custom steps size to make smooth path depending on half extents
2019-03-08 22:33:34 +03:00
elsid
f2e47d640d
Add option to limit max number of navmesh tiles
2019-03-08 17:39:04 +03:00
elsid
ff47df4f2c
Repost navmesh update jobs when failed because of out of memory
...
DT_OUT_OF_MEMORY error is returned when limit of tiles is reached.
2019-03-08 17:39:04 +03:00
elsid
82e2739bae
Notify workers when only at least one job is posted
2019-03-08 15:27:16 +03:00
elsid
b9b8ed177c
Store priority values as named fields
2019-03-08 15:23:36 +03:00
elsid
0c16fef285
Add navmesh update status builder
2019-03-08 15:07:07 +03:00
elsid
14c9190f49
Move tile replacement into separate function
2019-03-08 15:06:11 +03:00
elsid
b6243e7d1f
Fix name styleguide
2019-03-08 15:02:49 +03:00
elsid
27d7452267
Update scaled objects in navigator
2019-03-04 22:59:39 +03:00
Bret Curtis
14c93b3df0
Revert "Merge pull request #2204 from elsid/fix_navigator_update"
...
This reverts commit 26fb0e7a0f
, reversing
changes made to 42b2391303
.
2019-03-04 11:06:15 +01:00
elsid
133d7447f3
Update scaled objects in navigator
2019-03-03 16:46:41 +03:00
Grigory Latyshev
3872d7476b
Move makeOsgVec3f() to settingsutils.hpp
...
Remove all other makeOsgVec3f() implementations
2019-02-28 20:03:42 +00:00
Andrei Kortunov
3032b177a1
Remove redundant includes
2019-02-23 08:02:12 +04:00
elsid
73734fc04d
Fix update navmesh for not changed objects
...
When update method is called for not changed object befor this change
all object tiles were considered as not object tiles and were removed.
Also this marked those tiles as changed. This lead to alternation
between remove and add each tile update method was called. Problem was
detected by using Animated Containers mod.
2019-02-22 11:48:31 +03:00
Bret Curtis
09262e0336
Merge pull request #2170 from elsid/disable_navigator_option
...
Add option to disable DetourNavigator component (feature #4833 )
2019-02-18 16:01:30 +01:00
elsid
da6df818ff
Fix update navmesh
...
Every updated object should produce a set of changed tiles where it is
placed. Before this change only current object tiles were updated. If
object was moved to another set of tiles then navmesh were not changed
in new tiles.
TileCachedRecastMeshManager::updateObject should add all new tiles if object
was moved and remove all no more used tiles. Both new and old tiles should be
marked as changed.
Also add tests to show desired result for add, update, remove.
2019-02-17 01:50:53 +03:00
elsid
9626b6ec42
Add option to disable DetourNavigator component to find paths
2019-02-16 15:50:58 +03:00
elsid
34c594f01e
Add default initializators for settings fields
2019-02-16 15:39:06 +03:00
elsid
16675fd254
Return empty path when navmesh is not found for agent
2019-02-16 15:37:06 +03:00
elsid
1d3668cd22
Add Navigator interface
2019-02-16 15:37:06 +03:00
elsid
d63881e054
Make Navigator::findPath independent from class fields
2019-02-16 15:14:05 +03:00
elsid
a0ed981a7c
Fix operator ++ for OutputTransformIterator
2019-02-16 15:09:57 +03:00
elsid
c68e64a2a7
Make navigator from settings manager setting in separate function
2019-02-16 14:41:11 +03:00
elsid
da431135fa
Use pointer to check is NavMeshTilesCache::Value initialized
2018-12-10 23:51:15 +03:00
elsid
aab7f2e8b9
Don't check for equality in move assignment
...
Assume it is undefined behavior to move-assing value to itself.
2018-12-10 23:45:31 +03:00
Andrei Kortunov
4ee15ddcb9
Fix many Coverity Scan warnings
2018-11-14 11:21:49 +04:00
Bret Curtis
9ae077c033
use c++11 std::align from <memory> ( #2026 )
...
* use c++11 std::align from <memory>
* for Ubuntu, use gcc5 instead of 4.8
* use travis to set gcc to 5
eval
and sudo
* use eval in .travis.yml
* use gcc-8
* replace precise with trusty llvm toolchain, because we have been using trusty for awhile now
* push things to matrix, so we can support multiple releases if we want
* we should not be allowing for failures, we are ready to start trusting clang and its analyzer
* scan-build was pushed to another package
* use gcc-8 still but wrap in scan-build
* travis.yml cleanup, have output of scripts go to stdout, make search for substring a regex
use double []
fix missing ,
use bash to use regex
black spaces matter
* set human readable names for our various builds, split out our static analysis between openmw and openmw-cs
* test if not set, then set otherwise ignore
* use quotes
* do not eval it, set it in travis env
* no more &&
* what does clang7 have to say?
* use sourceline for now
* use clang-7 instead of clang-7.0
* yes, llvm-toolchain-trusty-7 not llvm-toolchain-trusty-7.0
* for static analysis, openmw is compiled and checked on its own while openmw-cs is build with all the rest. this might change in the future.
and actually do it the other way around
2018-11-08 17:38:09 +01:00
Bret Curtis
a8d944e756
Merge pull request #2023 from elsid/navmesh_cache_limit
...
Navmesh cache limit
2018-11-05 07:51:48 +01:00
elsid
6e78fbb538
Double key size for item cache size
2018-11-05 02:21:19 +03:00
elsid
696bb9adc8
Add missing decrease for free navmesh data size
2018-11-05 02:21:18 +03:00
elsid
d2c2bdadb5
Add align implementation
2018-11-04 21:56:15 +03:00
elsid
b477775e16
Use callback to iterate over chunks
2018-11-04 18:34:31 +03:00
elsid
db5638bf6d
Add global recast allocator to allocate temp buffers on stack
2018-11-04 18:11:15 +03:00
Andrei Kortunov
a387c6b910
Fix MSVC2015 C4503 warning
2018-11-04 11:11:55 +04:00
Bret Curtis
261bbded00
Merge pull request #2016 from elsid/navmesh_update_change_type
...
Use new change type for update object
2018-11-03 17:30:05 +01:00
elsid
41319eb2bf
Use new change type for update object
...
To perform jobs for updated animated objects and doors with lowest
priority.
2018-11-03 16:44:23 +03:00
elsid
b77684a135
Add TODOs
2018-11-03 16:15:32 +03:00
elsid
2ba026e2b2
Limit navmesh cache size by data size + key size
2018-11-03 16:14:07 +03:00
AnyOldName3
0208cb8616
Merge pull request #2001 from AnyOldName3/enable-osg-logging
...
Allow OSG objects to be sent to the debug log.
2018-10-31 22:14:36 +00:00
AnyOldName3
4489f23005
Remove recastnavigation conflicts
2018-10-31 15:15:01 +00:00
Andrei Kortunov
a615076c61
Add default return value
2018-10-31 10:18:29 +04:00
elsid
50b6ae3e10
Fix calculation for shape local AABB
2018-10-28 16:58:22 +03:00
elsid
af2f4e8424
Allow to use zero cache size
2018-10-28 16:54:06 +03:00
elsid
abc51a8a17
Add settings option to set max number of polygons per navmesh tile
2018-10-28 15:36:47 +03:00
elsid
03d4ce5e49
Log find path exception with level verbose, add more info to message
2018-10-15 23:25:42 +03:00
elsid
dc2eb2e16b
Do not write to global log async navmesh updater exceptions
2018-10-15 22:47:07 +03:00
elsid
e57504ae7c
Lower log level
2018-10-13 22:22:15 +03:00
elsid
0f6a64ad54
Split makeNavMeshTileData
2018-10-13 22:22:15 +03:00
elsid
fb655cb04f
Remove macroses to check recastnavigation functions result
2018-10-13 22:22:15 +03:00
elsid
ed73d130f9
Cache navmesh tiles
...
Use LRU modification to hold currently used items. Use RecastMesh binary
data for item key.
Store original pointer of btCollisionShape in user pointer to make available
it as an identifier within all duplicates. Use pointer to heights data array
for btHeightfieldTerrainShape.
2018-10-13 22:22:12 +03:00
elsid
69b5834c64
Add doc for Navigator
2018-10-13 22:16:35 +03:00
elsid
ae7285e960
Use ScopeGuarded instead of raw mutex
2018-10-13 22:16:35 +03:00
elsid
cf4066751c
Add classes to encapsulate value guarded by mutex
2018-10-13 22:16:35 +03:00
elsid
1a27489904
Add special type for object id
2018-10-13 22:16:35 +03:00
elsid
7c80bb9411
Support multiple threads for async nav mesh updater
2018-10-13 22:16:34 +03:00
elsid
ff478aba6d
Use actor half extent for interior cells
2018-10-13 22:16:33 +03:00
elsid
346e9e3141
Add off mesh connections for doors without teleport
2018-10-13 22:16:33 +03:00
elsid
d02beae5a8
Find path for actors according to their abilities to swim and walk
2018-10-13 22:16:33 +03:00
elsid
c95cea414c
Support water for NavMesh
2018-10-13 22:16:32 +03:00
elsid
72f211ef28
Add enums for area type and flags
2018-10-13 22:16:32 +03:00
elsid
fa23b590a4
Add unwalkable areas to NavMesh
2018-10-13 22:16:32 +03:00
elsid
c771986c56
Prioritise NavMesh jobs first to remove and last to add
...
When player move fast enough, tiles update for specific area square
couldn't catch player move. Tiles to be removed are left in the queue
with lower priority then tiles to be added which are nearest to player.
This can lead to overflow for amount of tiles. So we try to do remove
first. But we detect change type approximately using mixed change type,
because even if we do it precise, change type could change while job
is in queue.
2018-10-13 22:16:31 +03:00
elsid
b33a291a67
Log thread id
2018-10-13 22:16:31 +03:00
elsid
e24d4d7052
Explicitly use RC_NULL_AREA constant to mark unwalkable areas
2018-10-13 22:16:31 +03:00
elsid
c3298d13a6
Add log sinks (stdout and file)
2018-10-13 22:16:31 +03:00
elsid
84949bedb1
Remove and add tile in single critical section
2018-10-13 22:16:30 +03:00
elsid
144e1a063b
Support animated objects
2018-10-13 22:16:30 +03:00
elsid
4aba0fa85f
Limit number of NavMesh tiles to add by distance from player tile
2018-10-13 22:16:30 +03:00
elsid
d2fd9abd51
Split RecastMesh into tiles
2018-10-13 22:16:30 +03:00
elsid
dbb1d99bff
Add NavMeshItem generation to fix update NavMesh for render
2018-10-13 22:16:30 +03:00
elsid
f268ec5d34
Measure total time for NavMesh build from first pop
2018-10-13 22:16:29 +03:00
elsid
c26773bd29
Log update NavMesh status
2018-10-13 22:16:29 +03:00
elsid
937e8e1803
Allow to create empty RecastMesh
2018-10-13 22:16:29 +03:00
elsid
dd5f4498f6
Increment NavMesh revision on remove or add tile
2018-10-13 22:16:29 +03:00
elsid
ed3a255f65
Do not use NavMesh to find changed tiles
2018-10-13 22:16:28 +03:00
elsid
d1e71f9322
Support btBoxShape for RecastMesh
2018-10-13 22:16:28 +03:00
elsid
70a369f70e
Add command to enable NavMesh render
...
togglenavmesh or tnm
2018-10-13 22:16:28 +03:00
elsid
1caa18bb4f
Use one recast mesh for all jobs
2018-10-13 22:16:27 +03:00
elsid
794cfc4aa3
Write detournavigator log to file
2018-10-13 22:16:27 +03:00
elsid
dd5e6a61a3
Support btCompoundShape for RecastMesh
2018-10-13 22:16:27 +03:00
elsid
373adc6ec4
Option to enable/disable file names revisions
2018-10-13 22:16:27 +03:00
elsid
f8909218ee
Store recast mesh bounds
2018-10-13 22:16:27 +03:00
elsid
d1d034a1ec
Update NavMesh one by one tile in order from nearest to player
2018-10-13 22:16:26 +03:00
elsid
41caca24ee
Options to enable/disable write recast mesh and nav mesh into file
2018-10-13 22:16:26 +03:00
elsid
6d233ae868
Option in settings to enable/disable detour navigator debug log
2018-10-13 22:16:26 +03:00
elsid
430ba9d7a5
Build NavMesh tile data only for changed tiles
2018-10-13 22:16:25 +03:00
elsid
fafba8ea0c
Use recastnavigation to find path
2018-10-13 22:16:25 +03:00