mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-21 07:53:53 +00:00
Merge pull request #2327 from akortunov/aifix
Improve handling for actors outside of actors processing range
This commit is contained in:
commit
e8b327a3e2
4 changed files with 10 additions and 5 deletions
|
@ -61,6 +61,8 @@
|
|||
Bug #4965: Global light attenuation settings setup is lacking
|
||||
Bug #4969: "Miss" sound plays for any actor
|
||||
Bug #4972: Player is able to use quickkeys while disableplayerfighting is active
|
||||
Bug #4979: AiTravel maximum range depends on "actors processing range" setting
|
||||
Bug #4980: Drowning mechanics is applied for actors indifferently from distance to player
|
||||
Feature #2229: Improve pathfinding AI
|
||||
Feature #3442: Default values for fallbacks from ini file
|
||||
Feature #3610: Option to invert X axis
|
||||
|
|
|
@ -1539,7 +1539,10 @@ namespace MWMechanics
|
|||
|
||||
if(iter->first.getClass().isNpc())
|
||||
{
|
||||
updateDrowning(iter->first, duration, ctrl->isKnockedOut(), isPlayer);
|
||||
// We can not update drowning state for actors outside of AI distance - they can not resurface to breathe
|
||||
if (inProcessingRange)
|
||||
updateDrowning(iter->first, duration, ctrl->isKnockedOut(), isPlayer);
|
||||
|
||||
calculateNpcStatModifiers(iter->first, duration);
|
||||
|
||||
if (timerUpdateEquippedLight == 0)
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
#include <components/esm/aisequence.hpp>
|
||||
|
||||
#include "../mwbase/environment.hpp"
|
||||
#include "../mwbase/mechanicsmanager.hpp"
|
||||
#include "../mwbase/world.hpp"
|
||||
|
||||
#include "../mwworld/class.hpp"
|
||||
|
@ -19,9 +18,8 @@ bool isWithinMaxRange(const osg::Vec3f& pos1, const osg::Vec3f& pos2)
|
|||
{
|
||||
// Maximum travel distance for vanilla compatibility.
|
||||
// Was likely meant to prevent NPCs walking into non-loaded exterior cells, but for some reason is used in interior cells as well.
|
||||
// The specific range below is configurable, but its limit is currently 7168 units. Anything greater will break shoddily-written content (*cough* MW *cough*) in bizarre ways.
|
||||
float aiDistance = MWBase::Environment::get().getMechanicsManager()->getActorsProcessingRange();
|
||||
return (pos1 - pos2).length2() <= aiDistance*aiDistance;
|
||||
// We can make this configurable at some point, but the default *must* be the below value. Anything else will break shoddily-written content (*cough* MW *cough*) in bizarre ways.
|
||||
return (pos1 - pos2).length2() <= 7168*7168;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -109,6 +109,8 @@ actors processing range
|
|||
This setting allows to specify a distance from player in game units, in which OpenMW updates actor's state.
|
||||
Actor state update includes AI, animations, and physics processing.
|
||||
Actors near that border start softly fade out instead of just appearing/disapperaing.
|
||||
It is not recommended to change this value from default if you use mods with
|
||||
long-range AiTravel packages (e.g. patrols, caravans and travellers).
|
||||
|
||||
This setting can be controlled in game with the "Actors processing range slider" in the Prefs panel of the Options menu.
|
||||
|
||||
|
|
Loading…
Reference in a new issue