1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-26 18:35:20 +00:00

152 Commits

Author SHA1 Message Date
Matt
56a1505885 Cache the target for ai packages instead of looking for it every frame 2022-04-17 17:15:00 +00:00
ζeh Matt
8103ff2e6f
Make the CI happy 2022-03-21 17:49:42 +02:00
ζeh Matt
08fae7be6e
Pass the prng from world where appropriate 2022-03-21 17:49:42 +02:00
Bret Curtis
d1fb854521 move most of the files from esm to esm3, keep common code in esm; this is make space for a future with esm4
esm typo

esm typo
2022-01-23 17:04:48 +01:00
psi29a
bd866cf210 Merge branch 'fix_infidelities' into 'master'
Fix Infidelities quest from Tribunal (#6307)

Closes #6307

See merge request OpenMW/openmw!1248
2021-10-01 21:12:15 +00:00
Evil Eye
2de7b8e2fb Allow non-biped creatures using weapons to open doors 2021-09-29 21:21:52 +02:00
elsid
9950132a5f
Allow travelling actors find path over pathgrid navmesh area type
In addition to other navmesh areas. This makes actors behaviour closer to
vanilla when pathgrid is correct.
2021-09-29 01:05:23 +02:00
elsid
163968f578
Normalize area cost factor
Recastnavigation uses path cost and heuristic based on distance to find
shortest path by A* algorithm. Using raw speed values makes cost much lower
value than heuristic (1000 times less at maximum). Heuristic is defined as
distance from node to target * 0.999 that means area cost should never be less
than 0.999 or 1 for simplicity.

Use max speed to make lowest possible cost factor equal to 1.
2021-09-29 01:03:24 +02:00
elsid
fea4fb6e69
Make AiPursue path destination to be as close as possible to target
Even when target is not reachable actor will try to run there either because
target navmesh polygon is selected within extended area or because partial path
is built to the closest possible polygon.
2021-08-18 23:44:36 +02:00
elsid
8d1eb7e2e6
Fix slow AiPackage::getTarget calls
Assume there are no cell refs with empty ref id.
2021-07-04 14:09:11 +02:00
elsid
e7d68d3d1b
Validate almost straight shortcuts by navmesh raycast
Check whether it's possible to actually move over navmesh by such shortcut.
2021-06-21 18:50:45 +02:00
elsid
e5e04b85c1
Consider time to destination when try to avoid collision
Actor may reach destination before collision. Get next path point from active
packet pathfinder and use point tolerance to reduce distance.

Use maximum of last destination tolerance and DEFAULT_TOLERANCE because
there are 2 checks made for path completion. First checks whether actor is
close enough to the destination and second drop last path point when actor is
closer than DEFAULT_TOLERANCE.
2021-06-19 14:11:20 +02:00
elsid
56e6305345
Revert "Merge branch 'fix_new_game_guard' into 'master'"
This reverts commit a487295d39544455d754d107675792cf2074c613.
2021-06-19 14:06:46 +02:00
psi29a
a487295d39 Merge branch 'fix_new_game_guard' into 'master'
Consider time to destination when try to avoid collision

See merge request OpenMW/openmw!914
2021-05-30 11:52:48 +02:00
jvoisin
ee2446d5c4 Trim even more 2021-04-30 20:11:41 +02:00
elsid
0fae6d9a0a
Add walk and swim flags when corresponding speed is positive
This allows to avoid finding path over area that will should have infinite
cost (area_cost = area_cost_factor / area_speed).
2021-04-13 23:27:18 +02:00
elsid
3c4a9069ae
Do not use infinite area cost
Division by zero causes float value to be infinite. When infinite cost is
multiplied by zero distance the result is NaN. After this pathfinding algorithm
state is broken.
2021-04-13 23:27:18 +02:00
elsid
28fc21792e
Allow water walking actors to find path over water surface 2021-04-11 21:59:28 +02:00
elsid
634556be9d
Add setting to allow following creatures to find path over water surface 2021-04-11 21:59:28 +02:00
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.
2021-03-23 23:23:12 +01:00
elsid
675c0ab72f
Apply uniform random deviation to AI reaction timer
This allows to distribute AI reaction calls over time.

Before this change actors appearing at the same frame will react in the same
frame over and over because AI reaction period is constant. It creates a
non-uniform CPU usage over frames. If a single frame has too many AI reactions
it may cause stuttering when there are too many actors on a scene for current
system.

Another concern is a synchronization of actions between creatures and NPC.
They start to go or hit at the same frame that is unnatural.
2021-03-20 14:47:54 +01:00
Petr Mikheev
9590377f22 Don't ignore Z in path finding if actor can move by Z. 2021-01-29 22:30:20 +01:00
Petr Mikheev
642ca02e35 Shorten almost straight paths only if smooth movement is enabled; reduce angle limit for the shortening. 2021-01-29 22:30:01 +01:00
Evil Eye
2a583e2337 consider empty paths as not constructed 2021-01-08 17:24:13 +01:00
Evil Eye
57c92673bc Consider a path completed if it was non-empty 2020-12-30 16:09:12 +01:00
Evil Eye
d2a28d915a Don't consider a path completed unless we're close 2020-12-25 15:58:11 +01:00
Petr Mikheev
71ba94a89a Smooth turning; smooth stopping; combat headtracking 2020-09-22 22:50:44 +02:00
psi29a
f90a049702 Merge branch 'movement_refactoring' into 'master'
Refactoring related to "smooth movement"

See merge request OpenMW/openmw!285

(cherry picked from commit 6eaf0a389d5aed3b74ab1a7cf89574612f964bdf)

e847b4c8 Split getSpeed() to getMaxSpeed() and getCurrentSpeed()
a96c46bc Refactor calculation of movement.mSpeedFactor
03ee9090 Use getMaxSpeed instead of getCurrentSpeed where it makes sense.
a178af5c Create helper functions `normalizeAngle` and `rotateVec2f`
2020-08-27 11:54:30 +00:00
Bret Curtis
c944acf26b
Merge pull request #2913 from akortunov/warnfix
Get rid of ECLD and dependencies
2020-06-17 15:00:57 +02:00
Andrei Kortunov
d1a3cc98ff Get rid of ECLD and dependencies 2020-06-17 13:09:16 +04:00
Bret Curtis
1db58575c8
Fixed missed AiPackageTypeId::Wander 'fix' 2020-06-17 09:58:18 +02:00
Alexei Dobrohotov
2d23dad2bc
Merge branch 'master' into ai_package_type 2020-06-17 01:47:23 +03:00
elsid
b095ca6c86
Use actor speed to define area cost for pathfinding 2020-06-13 02:24:52 +02:00
elsid
c4cd3b2c4f
Add pathgrid to navmesh as off mesh connection 2020-06-12 21:04:02 +02:00
elsid
82893c30f4
Store package type id as enum except ESM 2020-06-11 21:02:27 +02:00
elsid
5b34ef224b
Replace AiPackage virtual methods by options 2020-06-06 12:00:17 +02:00
elsid
3b5ce71d71
Remove redundant explicit dtor definition for AiPackage 2020-05-17 22:18:26 +02:00
elsid
e323e6e7e6
Consider moved distance in direction to destination for obstacle check
Assume actor is stuck when it's not able to move in the destination
direction with maximum speed. Approach to check moved distance from the
previous point doesn't work good for slow and big actors. When they face
obstacle they're trying to move along with oscillation so check is
passing but they don't get any closer to the destination.
2020-01-20 23:46:58 +01:00
Andrei Kortunov
6861d9d5e5
Merge pull request #2510 from elsid/ai_open_door
Open door when it is on the way to a next path point (bug #5073)
2019-11-17 21:21:22 +04:00
elsid
81832f8e17
Reuse distance functions 2019-10-19 12:51:37 +02:00
elsid
d1d6ba3ed0
Fix rebuild path for walking actors
Ignore z coordinate for not swimming nor flying actors to calculate
distance from actor destination to last path point. If walking actor
destination point is floating above the ground then a point on navmesh
may be too far away when z coordinate is included. In this case path
will be rebuild on each AI_REACTION_TIME.
2019-10-07 20:25:07 +02:00
elsid
209e33f5ce
Open door when it is on the way to a next path point 2019-09-15 21:16:00 +02:00
elsid
653a391084
Do not open doors when actor has no path
When actor is not going anywhere it doesn't require to go through doors
so there is no need to open them.
2019-09-15 21:12:33 +02:00
elsid
d4b7b3e999
Check for AiPackage type before find nearby door 2019-09-15 21:12:29 +02:00
Roman Siromakha
41ad23ebdc
Revert "[WIP] Open door when it is on the way to a next path point (bug #5073)" 2019-08-27 20:55:03 +02:00
elsid
b4ec444057
Open door when it is on the way to a next path point 2019-08-27 20:49:35 +02:00
elsid
97cd9d434a
Do not open doors when actor has no path
When actor is not going anywhere it doesn't require to go through doors
so there is no need to open them.
2019-08-27 20:49:35 +02:00
elsid
389f5dfb9b
Check for AiPackage type before find nearby door 2019-08-27 20:49:35 +02:00
elsid
16170131b7
Add enum type for door state 2019-08-25 15:21:00 +02:00
elsid
f684c90932
Make angular velocity depending on actor speed
To avoid moving in circles for actors with high speed.
2019-08-03 16:06:04 +02:00