forked from mirror/openmw-tes3mp
AIWander - shortened some if statements and made super minor optimizations to others, now using proper GMST to load proper idlechance instead of hacky set value."
This commit is contained in:
parent
e37324b967
commit
96daad7a22
1 changed files with 5 additions and 11 deletions
|
@ -41,8 +41,9 @@ MWMechanics::AiWander::AiWander(int distance, int duration, int timeOfDay, const
|
|||
|
||||
srand(time(NULL));
|
||||
mStartTime = MWBase::Environment::get().getWorld()->getTimeStamp();
|
||||
mChanceMultiplyer = 0.75;
|
||||
mPlayedIdle = 0;
|
||||
mChanceMultiplyer =
|
||||
MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fIdleChanceMultiplier")->getFloat();
|
||||
|
||||
mStoredAvailableNodes = false;
|
||||
mChooseAction = true;
|
||||
|
@ -74,8 +75,6 @@ bool MWMechanics::AiWander::execute (const MWWorld::Ptr& actor)
|
|||
}
|
||||
else if(int(currentTime.getHour()) == 0 && currentTime.getDay() != mStartTime.getDay())
|
||||
{
|
||||
stopWalking(actor, mPathFinder);
|
||||
|
||||
if(!mRepeat)
|
||||
{
|
||||
stopWalking(actor, mPathFinder);
|
||||
|
@ -97,7 +96,7 @@ bool MWMechanics::AiWander::execute (const MWWorld::Ptr& actor)
|
|||
mCellX = actor.getCell()->mCell->mData.mX;
|
||||
mCellY = actor.getCell()->mCell->mData.mY;
|
||||
|
||||
if(mDistance != 0 && !mPathgrid->mPoints.empty())
|
||||
if(mDistance && !mPathgrid->mPoints.empty())
|
||||
{
|
||||
// TODO: Limit selecting range in the Z axis.
|
||||
mXCell = 0;
|
||||
|
@ -164,7 +163,7 @@ bool MWMechanics::AiWander::execute (const MWWorld::Ptr& actor)
|
|||
}
|
||||
|
||||
// Don't try to move if you are in a new cell (ie: positioncell command called) but still play idles.
|
||||
if(cellChange || (mCellX != actor.getCell()->mCell->mData.mX || mCellY != actor.getCell()->mCell->mData.mY))
|
||||
if(mDistance && (cellChange || (mCellX != actor.getCell()->mCell->mData.mX || mCellY != actor.getCell()->mCell->mData.mY)))
|
||||
mDistance = 0;
|
||||
|
||||
if(mChooseAction)
|
||||
|
@ -185,14 +184,12 @@ bool MWMechanics::AiWander::execute (const MWWorld::Ptr& actor)
|
|||
|
||||
if(!mPlayedIdle && mDistance)
|
||||
{
|
||||
std::cout << "Walking!" << std::endl;
|
||||
mChooseAction = false;
|
||||
mMoveNow = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Play idle animation and recreate vanilla (broken?) behavior of resetting start time of AIWander:
|
||||
std::cout << "Idling!" << std::endl;
|
||||
MWWorld::TimeStamp currentTime = MWBase::Environment::get().getWorld()->getTimeStamp();
|
||||
mStartTime = currentTime;
|
||||
playIdle(actor, mPlayedIdle + 1);
|
||||
|
@ -203,18 +200,15 @@ bool MWMechanics::AiWander::execute (const MWWorld::Ptr& actor)
|
|||
|
||||
if(mIdleNow)
|
||||
{
|
||||
// TODO: This is where we should be checking to see if the current idle animation is done, if it is then
|
||||
// set mChooseAction to true, because there is no function for this yet we will only set mChooseAction to true.
|
||||
if(!checkIdle(actor, mPlayedIdle + 1))
|
||||
{
|
||||
std::cout << "Idle Really Completed" << std::endl;
|
||||
mPlayedIdle = 0;
|
||||
mIdleNow = false;
|
||||
mChooseAction = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(mMoveNow == true && (mDistance != 0 && !mAllowedNodes.empty()))
|
||||
if(mMoveNow && mDistance && !mAllowedNodes.empty())
|
||||
{
|
||||
if(!mPathFinder.isPathConstructed())
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue