Merge pull request #2856 from elsid/aisequence_cleanup

AiSequence cleanup
This commit is contained in:
Bret Curtis 2020-05-18 09:47:36 +02:00 committed by GitHub
commit 730d0493db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -212,7 +212,8 @@ void AiSequence::execute (const MWWorld::Ptr& actor, CharacterController& charac
return; return;
} }
MWMechanics::AiPackage* package = mPackages.front(); auto packageIt = mPackages.begin();
MWMechanics::AiPackage* package = *packageIt;
if (!package->alwaysActive() && outOfRange) if (!package->alwaysActive() && outOfRange)
return; return;
@ -223,7 +224,7 @@ void AiSequence::execute (const MWWorld::Ptr& actor, CharacterController& charac
// if active package is combat one, choose nearest target // if active package is combat one, choose nearest target
if (packageTypeId == AiPackage::TypeIdCombat) if (packageTypeId == AiPackage::TypeIdCombat)
{ {
std::list<AiPackage *>::iterator itActualCombat; auto itActualCombat = mPackages.end();
float nearestDist = std::numeric_limits<float>::max(); float nearestDist = std::numeric_limits<float>::max();
osg::Vec3f vActorPos = actor.getRefData().getPosition().asVec3(); osg::Vec3f vActorPos = actor.getRefData().getPosition().asVec3();
@ -265,16 +266,18 @@ void AiSequence::execute (const MWWorld::Ptr& actor, CharacterController& charac
} }
} }
if (!mPackages.empty()) assert(!mPackages.empty());
{
if (nearestDist < std::numeric_limits<float>::max() && mPackages.begin() != itActualCombat) if (nearestDist < std::numeric_limits<float>::max() && mPackages.begin() != itActualCombat)
{ {
assert(itActualCombat != mPackages.end());
// move combat package with nearest target to the front // move combat package with nearest target to the front
mPackages.splice(mPackages.begin(), mPackages, itActualCombat); mPackages.splice(mPackages.begin(), mPackages, itActualCombat);
} }
package = mPackages.front(); packageIt = mPackages.begin();
} package = *packageIt;
packageTypeId = package->getTypeId();
} }
try try
@ -289,9 +292,7 @@ void AiSequence::execute (const MWWorld::Ptr& actor, CharacterController& charac
} }
// To account for the rare case where AiPackage::execute() queued another AI package // To account for the rare case where AiPackage::execute() queued another AI package
// (e.g. AiPursue executing a dialogue script that uses startCombat) // (e.g. AiPursue executing a dialogue script that uses startCombat)
std::list<MWMechanics::AiPackage*>::iterator toRemove = mPackages.erase(packageIt);
std::find(mPackages.begin(), mPackages.end(), package);
mPackages.erase(toRemove);
delete package; delete package;
if (isActualAiPackage(packageTypeId)) if (isActualAiPackage(packageTypeId))
mDone = true; mDone = true;