mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-06 00:55:50 +00:00
Avoid recomputing navigator flags when getting area costs
This commit is contained in:
parent
594bd6e136
commit
903299ce50
@ -283,8 +283,8 @@ namespace MWMechanics
|
||||
const MWBase::World* world = MWBase::Environment::get().getWorld();
|
||||
// Try to build path to the target.
|
||||
const auto agentBounds = world->getPathfindingAgentBounds(actor);
|
||||
const auto navigatorFlags = getNavigatorFlags(actor);
|
||||
const auto areaCosts = getAreaCosts(actor);
|
||||
const DetourNavigator::Flags navigatorFlags = getNavigatorFlags(actor);
|
||||
const DetourNavigator::AreaCosts areaCosts = getAreaCosts(actor, navigatorFlags);
|
||||
const ESM::Pathgrid* pathgrid = world->getStore().get<ESM::Pathgrid>().search(*actor.getCell()->getCell());
|
||||
const auto& pathGridGraph = getPathGridGraph(pathgrid);
|
||||
mPathFinder.buildPath(actor, vActorPos, vTargetPos, actor.getCell(), pathGridGraph, agentBounds,
|
||||
|
@ -157,8 +157,10 @@ bool MWMechanics::AiPackage::pathTo(const MWWorld::Ptr& actor, const osg::Vec3f&
|
||||
{
|
||||
const ESM::Pathgrid* pathgrid
|
||||
= world->getStore().get<ESM::Pathgrid>().search(*actor.getCell()->getCell());
|
||||
const DetourNavigator::Flags navigatorFlags = getNavigatorFlags(actor);
|
||||
const DetourNavigator::AreaCosts areaCosts = getAreaCosts(actor, navigatorFlags);
|
||||
mPathFinder.buildLimitedPath(actor, position, dest, actor.getCell(), getPathGridGraph(pathgrid),
|
||||
agentBounds, getNavigatorFlags(actor), getAreaCosts(actor), endTolerance, pathType);
|
||||
agentBounds, navigatorFlags, areaCosts, endTolerance, pathType);
|
||||
mRotateOnTheRunChecks = 3;
|
||||
|
||||
// give priority to go directly on target if there is minimal opportunity
|
||||
@ -486,10 +488,10 @@ DetourNavigator::Flags MWMechanics::AiPackage::getNavigatorFlags(const MWWorld::
|
||||
return result;
|
||||
}
|
||||
|
||||
DetourNavigator::AreaCosts MWMechanics::AiPackage::getAreaCosts(const MWWorld::Ptr& actor) const
|
||||
DetourNavigator::AreaCosts MWMechanics::AiPackage::getAreaCosts(
|
||||
const MWWorld::Ptr& actor, DetourNavigator::Flags flags) const
|
||||
{
|
||||
DetourNavigator::AreaCosts costs;
|
||||
const DetourNavigator::Flags flags = getNavigatorFlags(actor);
|
||||
const MWWorld::Class& actorClass = actor.getClass();
|
||||
|
||||
const float walkSpeed = [&] {
|
||||
|
@ -150,7 +150,7 @@ namespace MWMechanics
|
||||
|
||||
DetourNavigator::Flags getNavigatorFlags(const MWWorld::Ptr& actor) const;
|
||||
|
||||
DetourNavigator::AreaCosts getAreaCosts(const MWWorld::Ptr& actor) const;
|
||||
DetourNavigator::AreaCosts getAreaCosts(const MWWorld::Ptr& actor, DetourNavigator::Flags flags) const;
|
||||
|
||||
const AiPackageTypeId mTypeId;
|
||||
const Options mOptions;
|
||||
|
@ -224,8 +224,10 @@ namespace MWMechanics
|
||||
{
|
||||
const auto agentBounds = MWBase::Environment::get().getWorld()->getPathfindingAgentBounds(actor);
|
||||
constexpr float endTolerance = 0;
|
||||
const DetourNavigator::Flags navigatorFlags = getNavigatorFlags(actor);
|
||||
const DetourNavigator::AreaCosts areaCosts = getAreaCosts(actor, navigatorFlags);
|
||||
mPathFinder.buildPath(actor, pos.asVec3(), mDestination, actor.getCell(), getPathGridGraph(pathgrid),
|
||||
agentBounds, getNavigatorFlags(actor), getAreaCosts(actor), endTolerance, PathType::Full);
|
||||
agentBounds, navigatorFlags, areaCosts, endTolerance, PathType::Full);
|
||||
}
|
||||
|
||||
if (mPathFinder.isPathConstructed())
|
||||
@ -367,8 +369,8 @@ namespace MWMechanics
|
||||
const auto world = MWBase::Environment::get().getWorld();
|
||||
const auto agentBounds = world->getPathfindingAgentBounds(actor);
|
||||
const auto navigator = world->getNavigator();
|
||||
const auto navigatorFlags = getNavigatorFlags(actor);
|
||||
const auto areaCosts = getAreaCosts(actor);
|
||||
const DetourNavigator::Flags navigatorFlags = getNavigatorFlags(actor);
|
||||
const DetourNavigator::AreaCosts areaCosts = getAreaCosts(actor, navigatorFlags);
|
||||
auto& prng = MWBase::Environment::get().getWorld()->getPrng();
|
||||
|
||||
do
|
||||
|
Loading…
Reference in New Issue
Block a user