mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-06 18:15:32 +00:00
extracted function returnToStartLocation().
This commit is contained in:
parent
5e519ef550
commit
c7aacaee70
2 changed files with 23 additions and 16 deletions
|
@ -233,23 +233,10 @@ namespace MWMechanics
|
|||
// For stationary NPCs, move back to the starting location if another AiPackage moved us elsewhere
|
||||
if (cellChange)
|
||||
mHasReturnPosition = false;
|
||||
if (mDistance == 0 && mHasReturnPosition && (pos.asVec3() - mReturnPosition).length2() > 20*20)
|
||||
if (mDistance == 0 && mHasReturnPosition
|
||||
&& (pos.asVec3() - mReturnPosition).length2() > (DESTINATION_TOLERANCE * DESTINATION_TOLERANCE))
|
||||
{
|
||||
if (!storage.mPathFinder.isPathConstructed())
|
||||
{
|
||||
ESM::Pathgrid::Point dest(PathFinder::MakePathgridPoint(mReturnPosition));
|
||||
|
||||
// actor position is already in world co-ordinates
|
||||
ESM::Pathgrid::Point start(PathFinder::MakePathgridPoint(pos));
|
||||
|
||||
// don't take shortcuts for wandering
|
||||
storage.mPathFinder.buildSyncedPath(start, dest, actor.getCell(), false);
|
||||
|
||||
if(storage.mPathFinder.isPathConstructed())
|
||||
{
|
||||
storage.mState = Wander_Walking;
|
||||
}
|
||||
}
|
||||
returnToStartLocation(actor, storage, pos);
|
||||
}
|
||||
|
||||
// Allow interrupting a walking actor to trigger a greeting
|
||||
|
@ -298,6 +285,25 @@ namespace MWMechanics
|
|||
return false;
|
||||
}
|
||||
|
||||
void AiWander::returnToStartLocation(const MWWorld::Ptr& actor, AiWanderStorage& storage, ESM::Position& pos)
|
||||
{
|
||||
if (!storage.mPathFinder.isPathConstructed())
|
||||
{
|
||||
ESM::Pathgrid::Point dest(PathFinder::MakePathgridPoint(mReturnPosition));
|
||||
|
||||
// actor position is already in world co-ordinates
|
||||
ESM::Pathgrid::Point start(PathFinder::MakePathgridPoint(pos));
|
||||
|
||||
// don't take shortcuts for wandering
|
||||
storage.mPathFinder.buildSyncedPath(start, dest, actor.getCell(), false);
|
||||
|
||||
if (storage.mPathFinder.isPathConstructed())
|
||||
{
|
||||
storage.mState = Wander_Walking;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AiWander::doPerFrameActionsForState(const MWWorld::Ptr& actor, float duration, AiWanderStorage& storage, ESM::Position& pos)
|
||||
{
|
||||
switch (storage.mState)
|
||||
|
|
|
@ -90,6 +90,7 @@ namespace MWMechanics
|
|||
bool reactionTimeActions(const MWWorld::Ptr& actor, AiWanderStorage& storage,
|
||||
const MWWorld::CellStore*& currentCell, bool cellChange, ESM::Position& pos);
|
||||
bool isPackageCompleted(const MWWorld::Ptr& actor, AiWanderStorage& storage);
|
||||
void returnToStartLocation(const MWWorld::Ptr& actor, AiWanderStorage& storage, ESM::Position& pos);
|
||||
|
||||
int mDistance; // how far the actor can wander from the spawn point
|
||||
int mDuration;
|
||||
|
|
Loading…
Reference in a new issue