@ -52,11 +52,13 @@ bool MWMechanics::AiPursue::execute (const MWWorld::Ptr& actor, float duration)
}
}
// Big TODO: Sync this with current AiFollow. Move common code to a shared base class or helpers (applies to all AI packages, way too much duplicated code)
MWWorld : : Ptr target = world - > getPtr ( mObjectId , false ) ;
ESM : : Position targetPos = target . getRefData ( ) . getPosition ( ) ;
bool cellChange = cell - > mData . mX ! = mCellX | | cell - > mData . mY ! = mCellY ;
if ( ! mPathFinder . isPathConstructed ( ) | | cellChange )
if ( ! mPathFinder . isPathConstructed ( ) | | cellChange | | mPathFinder . checkPathCompleted ( pos . pos [ 0 ] , pos . pos [ 1 ] , pos . pos [ 2 ] ) )
{
mCellX = cell - > mData . mX ;
mCellY = cell - > mData . mY ;
@ -76,15 +78,7 @@ bool MWMechanics::AiPursue::execute (const MWWorld::Ptr& actor, float duration)
if ( ( pos . pos [ 0 ] - targetPos . pos [ 0 ] ) * ( pos . pos [ 0 ] - targetPos . pos [ 0 ] ) +
( pos . pos [ 1 ] - targetPos . pos [ 1 ] ) * ( pos . pos [ 1 ] - targetPos . pos [ 1 ] ) +
( pos . pos [ 2 ] - targetPos . pos [ 2 ] ) * ( pos . pos [ 2 ] - targetPos . pos [ 2 ] ) < 200 * 200 )
{
movement . mPosition [ 1 ] = 0 ;
MWWorld : : Ptr target = world - > getPtr ( mObjectId , false ) ;
MWWorld : : Class : : get ( target ) . activate ( target , actor ) . get ( ) - > execute ( actor ) ;
return true ;
}
if ( mPathFinder . checkPathCompleted ( pos . pos [ 0 ] , pos . pos [ 1 ] , pos . pos [ 2 ] ) )
( pos . pos [ 2 ] - targetPos . pos [ 2 ] ) * ( pos . pos [ 2 ] - targetPos . pos [ 2 ] ) < 100 * 100 )
{
movement . mPosition [ 1 ] = 0 ;
MWWorld : : Ptr target = world - > getPtr ( mObjectId , false ) ;