summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterpathfindingobjects.cpp
diff options
context:
space:
mode:
authorTodd Stinson <stinson@lindenlab.com>2012-06-26 14:47:50 -0700
committerTodd Stinson <stinson@lindenlab.com>2012-06-26 14:47:50 -0700
commit16ba7ae82cb2e9323e7bf527a57079bf4cfeb634 (patch)
treea23c832a0faf4e9c1d371baf6cffab983e32b3cb /indra/newview/llfloaterpathfindingobjects.cpp
parent2cd321eaa9b9b9872318ce3977acd9a2f782872f (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.
Diffstat (limited to 'indra/newview/llfloaterpathfindingobjects.cpp')
-rw-r--r--indra/newview/llfloaterpathfindingobjects.cpp23
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);
}
}