diff --git a/Engine/source/T3D/AI/AIController.cpp b/Engine/source/T3D/AI/AIController.cpp index 7e9207ebd..c878ca9c4 100644 --- a/Engine/source/T3D/AI/AIController.cpp +++ b/Engine/source/T3D/AI/AIController.cpp @@ -78,11 +78,11 @@ bool AIController::getAIMove(Move* movePtr) Point3F rotation = sbo->getTransform().toEuler(); #ifdef TORQUE_NAVIGATION_ENABLED - if (sbo->getDamageState() == ShapeBase::Enabled) + if (sbo->getDamageState() == ShapeBase::Enabled && getGoal()) { if (mMovement.mMoveState != ModeStop) getNav()->updateNavMesh(); - if (getGoal() && !getGoal()->mObj.isNull()) + if (getGoal()->mObj.isValid()) { if (getNav()->mPathData.path.isNull()) { diff --git a/Engine/source/T3D/AI/AINavigation.cpp b/Engine/source/T3D/AI/AINavigation.cpp index aa2dd09c6..180f575a6 100644 --- a/Engine/source/T3D/AI/AINavigation.cpp +++ b/Engine/source/T3D/AI/AINavigation.cpp @@ -64,7 +64,6 @@ NavMesh* AINavigation::findNavMesh() const void AINavigation::updateNavMesh() { GameBase* gbo = dynamic_cast(mControllerRef->getAIInfo()->mObj.getPointer()); - NavMesh* old = mNavMesh; if (mNavMesh.isNull()) mNavMesh = findNavMesh(); else @@ -73,9 +72,9 @@ void AINavigation::updateNavMesh() mNavMesh = findNavMesh(); } // See if we need to update our path. - if (mNavMesh != old && !mPathData.path.isNull()) + if (mNavMesh) { - setPathDestination(mPathData.path->mTo); + setPathDestination(getCtrl()->getGoal()->getPosition()); } } @@ -178,6 +177,7 @@ void AINavigation::onReachDestination() bool AINavigation::setPathDestination(const Point3F& pos) { + if (!getCtrl()->getGoal()) getCtrl()->setGoal(pos, getCtrl()->mControllerData->mMoveTolerance); if (!mNavMesh) updateNavMesh(); // If we can't find a mesh, just move regularly.