diff options
Diffstat (limited to 'indra/newview/llfloaterpathfindinglinksets.cpp')
-rw-r--r-- | indra/newview/llfloaterpathfindinglinksets.cpp | 121 |
1 files changed, 69 insertions, 52 deletions
diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp index 0cce1277b0..78c0d342b2 100644 --- a/indra/newview/llfloaterpathfindinglinksets.cpp +++ b/indra/newview/llfloaterpathfindinglinksets.cpp @@ -36,26 +36,29 @@ #include "llviewerregion.h"
#include "llhttpclient.h"
#include "lltextbase.h"
+#include "lluuid.h"
+#include "llviewerobject.h"
+#include "llviewerobjectlist.h"
//---------------------------------------------------------------------------
// NavmeshDataGetResponder
//---------------------------------------------------------------------------
- -class NavmeshDataGetResponder : public LLHTTPClient::Responder -{ -public: - NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater); - virtual ~NavmeshDataGetResponder(); - - virtual void result(const LLSD& pContent); - virtual void error(U32 pStatus, const std::string& pReason); - -private: - NavmeshDataGetResponder(const NavmeshDataGetResponder& pOther); - - std::string mNavmeshDataGetURL; - LLFloaterPathfindingLinksets *mLinksetsFloater; -}; +
+class NavmeshDataGetResponder : public LLHTTPClient::Responder
+{
+public:
+ NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater);
+ virtual ~NavmeshDataGetResponder();
+
+ virtual void result(const LLSD& pContent);
+ virtual void error(U32 pStatus, const std::string& pReason);
+
+private:
+ NavmeshDataGetResponder(const NavmeshDataGetResponder& pOther);
+
+ std::string mNavmeshDataGetURL;
+ LLFloaterPathfindingLinksets *mLinksetsFloater;
+};
//---------------------------------------------------------------------------
// LLFloaterPathfindingLinksets
@@ -90,10 +93,10 @@ void LLFloaterPathfindingLinksets::openLinksetsEditor() LLFloaterReg::toggleInstanceOrBringToFront("pathfinding_linksets");
}
-LLFloaterPathfindingLinksets::EFetchState LLFloaterPathfindingLinksets::getFetchState() const -{ - return mFetchState; -} +LLFloaterPathfindingLinksets::EFetchState LLFloaterPathfindingLinksets::getFetchState() const
+{
+ return mFetchState;
+}
BOOL LLFloaterPathfindingLinksets::isFetchInProgress() const
{
@@ -140,22 +143,22 @@ void LLFloaterPathfindingLinksets::sendNavmeshDataGetRequest() setFetchState(kFetchStarting);
clearLinksetsList();
- LLViewerRegion* region = gAgent.getRegion(); - if (region != NULL) - { - std::string navmeshDataURL = region->getCapability("ObjectNavmesh"); - if (navmeshDataURL.empty()) - { + LLViewerRegion* region = gAgent.getRegion();
+ if (region != NULL)
+ {
+ std::string navmeshDataURL = region->getCapability("ObjectNavmesh");
+ if (navmeshDataURL.empty())
+ {
setFetchState(kFetchComplete);
- llwarns << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl; - } - else - { + llwarns << "cannot query navmesh data from current region '" << region->getName() << "'" << llendl;
+ }
+ else
+ {
setFetchState(kFetchInProgress);
- LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this)); - } - } - } + LLHTTPClient::get(navmeshDataURL, new NavmeshDataGetResponder(navmeshDataURL, this));
+ }
+ }
+ }
}
void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmeshData)
@@ -168,7 +171,7 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes for (LLSD::map_const_iterator itemsIter = pNavmeshData.beginMap();
itemsIter != pNavmeshData.endMap(); ++itemsIter)
{
- const std::string& uuid = itemsIter->first;
+ LLUUID uuid(itemsIter->first);
const LLSD& itemData = itemsIter->second;
const LLSD::String& itemName = itemData.get("name").asString();
@@ -182,9 +185,16 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes LLSD::Real itemC = itemData.get("C").asReal();
LLSD::Real itemD = itemData.get("D").asReal();
- F32 location_x = 50.0f, location_y = 50.0f, location_z = 50.0f; // XXX stinson: use real location later
- LLVector3 itemLocation(location_x, location_y, location_z);
- F32 itemDistance = dist_vec(avatarPosition, itemLocation);
+ // XXX stinson: get a better way to get all objects locations in the region as the
+ // following calculation only returns objects of which the viewer is aware.
+ LLViewerObject *viewerObject = gObjectList.findObject(uuid);
+ bool hasDistance = (viewerObject != NULL);
+ F32 itemDistance = -999.0f;
+ if (hasDistance)
+ {
+ const LLVector3& itemLocation = viewerObject->getPositionAgent();
+ itemDistance = dist_vec(avatarPosition, itemLocation);
+ }
LLSD columns;
@@ -197,11 +207,18 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes columns[1]["font"] = "SANSSERIF";
columns[2]["column"] = "land_impact";
- columns[2]["value"] = llformat("%1d m", itemLandImpact);
+ columns[2]["value"] = llformat("%1d", itemLandImpact);
columns[2]["font"] = "SANSSERIF";
columns[3]["column"] = "dist_from_you";
- columns[3]["value"] = llformat("%1.0f m", itemDistance);
+ if (hasDistance)
+ {
+ columns[3]["value"] = llformat("%1.0f m", itemDistance);
+ }
+ else
+ {
+ columns[3]["value"] = "--";
+ }
columns[3]["font"] = "SANSSERIF";
columns[4]["column"] = "is_fixed";
@@ -242,18 +259,18 @@ void LLFloaterPathfindingLinksets::handleNavmeshDataGetReply(const LLSD& pNavmes setFetchState(kFetchComplete);
}
-void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason) -{ +void LLFloaterPathfindingLinksets::handleNavmeshDataGetError(const std::string& pURL, const std::string& pErrorReason)
+{
setFetchState(kFetchError);
clearLinksetsList();
- llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl; -} - -void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState) -{ - mFetchState = pFetchState; - updateLinksetsStatusMessage(); -} + llwarns << "Error fetching navmesh data from URL '" << pURL << "' because " << pErrorReason << llendl;
+}
+
+void LLFloaterPathfindingLinksets::setFetchState(EFetchState pFetchState)
+{
+ mFetchState = pFetchState;
+ updateLinksetsStatusMessage();
+}
void LLFloaterPathfindingLinksets::onLinksetsSelectionChange()
{
@@ -347,8 +364,8 @@ void LLFloaterPathfindingLinksets::updateLinksetsStatusMessage() mLinksetsStatus->setText((LLStringExplicit)statusText, styleParams);
}
- -NavmeshDataGetResponder::NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater) +
+NavmeshDataGetResponder::NavmeshDataGetResponder(const std::string& pNavmeshDataGetURL, LLFloaterPathfindingLinksets *pLinksetsFloater)
: mNavmeshDataGetURL(pNavmeshDataGetURL),
mLinksetsFloater(pLinksetsFloater)
{
|