diff options
author | Todd Stinson <stinson@lindenlab.com> | 2012-06-26 14:47:50 -0700 |
---|---|---|
committer | Todd Stinson <stinson@lindenlab.com> | 2012-06-26 14:47:50 -0700 |
commit | 16ba7ae82cb2e9323e7bf527a57079bf4cfeb634 (patch) | |
tree | a23c832a0faf4e9c1d371baf6cffab983e32b3cb | |
parent | 2cd321eaa9b9b9872318ce3977acd9a2f782872f (diff) |
Updating the teleport-me-to-it behavior for the characters and linksets. Firstly, to remove the direct call to gAgent.teleportRequest() which is being made into a private function. Secondly, to check the viewer object list to see if the object exists there, and if so, to use that location as the teleport destination.
-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); } } |