diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llfloaterpathfindingobjects.cpp | 23 | 
1 files changed, 15 insertions, 8 deletions
| diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index 9bfbc582bd..eb18fa00d5 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -57,9 +57,10 @@  #include "llviewerobject.h"  #include "llviewerobjectlist.h"  #include "llviewerregion.h" -#include "v4color.h"  #include "pipeline.h" -#include "llfloaterreg.h" +#include "v3dmath.h" +#include "v3math.h" +#include "v4color.h"  #define DEFAULT_BEACON_WIDTH 6 @@ -488,14 +489,20 @@ void LLFloaterPathfindingObjects::teleportToSelectedObject()  		std::vector<LLScrollListItem*>::const_reference selectedItemRef = selectedItems.front();  		const LLScrollListItem *selectedItem = selectedItemRef;  		llassert(mObjectList != NULL); -		const LLPathfindingObjectPtr objectPtr = mObjectList->find(selectedItem->getUUID().asString()); -		const LLVector3 &objectLocation = objectPtr->getLocation(); - -		LLViewerRegion* region = gAgent.getRegion(); -		if (region != NULL) +		LLVector3d teleportLocation; +		LLViewerObject *viewerObject = gObjectList.findObject(selectedItem->getUUID()); +		if (viewerObject == NULL) +		{ +			// If we cannot find the object in the viewer list, teleport to the last reported position +			const LLPathfindingObjectPtr objectPtr = mObjectList->find(selectedItem->getUUID().asString()); +			teleportLocation = gAgent.getPosGlobalFromAgent(objectPtr->getLocation()); +		} +		else  		{ -			gAgent.teleportRequest(region->getHandle(), objectLocation, true); +			// If we can find the object in the viewer list, teleport to the known current position +			teleportLocation = viewerObject->getPositionGlobal();  		} +		gAgent.teleportViaLocationLookAt(teleportLocation);  	}  } | 
