summaryrefslogtreecommitdiff
path: root/indra/newview/llagent.cpp
diff options
context:
space:
mode:
authorTodd Stinson <stinson@lindenlab.com>2012-05-11 19:39:44 -0700
committerTodd Stinson <stinson@lindenlab.com>2012-05-11 19:39:44 -0700
commitcca85dea6755a90f9f6b4c3174743bb0abc4f73e (patch)
tree33b42f81ad8ecedab01d96bc28fb5de7c8938209 /indra/newview/llagent.cpp
parenta85bf36d4fd5026dac21f95432d06a7c0dd766d4 (diff)
EXP-1928: First pass at building the functionality to restart teleport after increasing the maturity preference level to match the intended teleport region. There are probably still some cases that are broken and bugs.
Diffstat (limited to 'indra/newview/llagent.cpp')
-rwxr-xr-xindra/newview/llagent.cpp151
1 files changed, 135 insertions, 16 deletions
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index d7c39ff78d..fb217f2186 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -320,6 +320,12 @@ LLAgent::LLAgent() :
mAgentAccess(new LLAgentAccess(gSavedSettings)),
mCanEditParcel(false),
mTeleportSourceSLURL(new LLSLURL),
+ mCurrentTeleportRequest(),
+ mFailedTeleportRequest(),
+ mTeleportFinishedSlot(),
+ mTeleportFailedSlot(),
+ mIsMaturityRatingChangingDuringTeleport(false),
+ mMaturityRatingChange(0),
mTeleportState( TELEPORT_NONE ),
mRegionp(NULL),
@@ -406,7 +412,14 @@ void LLAgent::init()
gSavedSettings.getControl("PreferredMaturity")->getValidateSignal()->connect(boost::bind(&LLAgent::validateMaturity, this, _2));
gSavedSettings.getControl("PreferredMaturity")->getSignal()->connect(boost::bind(&LLAgent::handleMaturity, this, _2));
- LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&LLAgent::parcelChangedCallback));
+ if (!mTeleportFinishedSlot.connected())
+ {
+ mTeleportFinishedSlot = LLViewerParcelMgr::getInstance()->setTeleportFinishedCallback(boost::bind(&LLAgent::handleTeleportFinished, this));
+ }
+ if (!mTeleportFailedSlot.connected())
+ {
+ mTeleportFailedSlot = LLViewerParcelMgr::getInstance()->setTeleportFailedCallback(boost::bind(&LLAgent::handleTeleportFailed, this));
+ }
mInitialized = TRUE;
}
@@ -417,6 +430,14 @@ void LLAgent::init()
void LLAgent::cleanup()
{
mRegionp = NULL;
+ if (mTeleportFinishedSlot.connected())
+ {
+ mTeleportFinishedSlot.disconnect();
+ }
+ if (mTeleportFailedSlot.connected())
+ {
+ mTeleportFailedSlot.disconnect();
+ }
}
//-----------------------------------------------------------------------------
@@ -2457,7 +2478,49 @@ int LLAgent::convertTextToMaturity(char text)
return LLAgentAccess::convertTextToMaturity(text);
}
-bool LLAgent::sendMaturityPreferenceToServer(int preferredMaturity)
+class LLMaturityPreferencesResponder : public LLHTTPClient::Responder
+{
+public:
+ LLMaturityPreferencesResponder(LLAgent::maturity_preferences_callback_t pMaturityPreferencesCallback);
+ virtual ~LLMaturityPreferencesResponder();
+
+ virtual void result(const LLSD &pContent);
+ virtual void error(U32 pStatus, const std::string& pReason);
+
+protected:
+
+private:
+ LLAgent::maturity_preferences_callback_t mMaturityPreferencesCallback;
+};
+
+LLMaturityPreferencesResponder::LLMaturityPreferencesResponder(LLAgent::maturity_preferences_callback_t pMaturityPreferencesCallback)
+ : LLHTTPClient::Responder(),
+ mMaturityPreferencesCallback(pMaturityPreferencesCallback)
+{
+}
+
+LLMaturityPreferencesResponder::~LLMaturityPreferencesResponder()
+{
+}
+
+void LLMaturityPreferencesResponder::result(const LLSD &pContent)
+{
+ if (!mMaturityPreferencesCallback.empty())
+ {
+ mMaturityPreferencesCallback(pContent);
+ }
+}
+
+void LLMaturityPreferencesResponder::error(U32 pStatus, const std::string& pReason)
+{
+ if (!mMaturityPreferencesCallback.empty())
+ {
+ LLSD empty;
+ mMaturityPreferencesCallback(empty);
+ }
+}
+
+bool LLAgent::sendMaturityPreferenceToServer(int preferredMaturity, maturity_preferences_callback_t pMaturityPreferencesCallback)
{
if (!getRegion())
return false;
@@ -2485,7 +2548,8 @@ bool LLAgent::sendMaturityPreferenceToServer(int preferredMaturity)
body["access_prefs"] = access_prefs;
llinfos << "Sending access prefs update to " << (access_prefs["max"].asString()) << " via capability to: "
<< url << llendl;
- LLHTTPClient::post(url, body, new LLHTTPClient::Responder()); // Ignore response
+ LLHTTPClient::ResponderPtr responderPtr = LLHTTPClient::ResponderPtr(new LLMaturityPreferencesResponder(pMaturityPreferencesCallback));
+ LLHTTPClient::post(url, body, responderPtr);
return true;
}
return false;
@@ -3538,6 +3602,62 @@ bool LLAgent::teleportCore(bool is_local)
return true;
}
+void LLAgent::restartFailedTeleportRequest()
+{
+ // XXX stinson 05/11/2012 llassert(hasFailedTeleportRequest());
+ if (hasFailedTeleportRequest())
+ {
+ mFailedTeleportRequest->doTeleport();
+ }
+}
+
+void LLAgent::clearFailedTeleportRequest()
+{
+ // XXX stinson 05/11/2012 llassert(hasFailedTeleportRequest());
+ if (hasFailedTeleportRequest())
+ {
+ mFailedTeleportRequest.reset();
+ }
+}
+
+void LLAgent::setMaturityRatingChangeDuringTeleport(int pMaturityRatingChange)
+{
+ mIsMaturityRatingChangingDuringTeleport = true;
+ mMaturityRatingChange = pMaturityRatingChange;
+}
+
+void LLAgent::handleTeleportFinished()
+{
+ // XXX stinson 05/11/2012 llassert(hasCurrentTeleportRequest());
+ if (hasCurrentTeleportRequest())
+ {
+ mCurrentTeleportRequest.reset();
+ }
+ if (hasFailedTeleportRequest())
+ {
+ clearFailedTeleportRequest();
+ }
+ if (mIsMaturityRatingChangingDuringTeleport)
+ {
+ // notify user that the maturity preference has been changed
+ LLSD args;
+ args["RATING"] = LLViewerRegion::accessToString(mMaturityRatingChange);
+ LLNotificationsUtil::add("PreferredMaturityChanged", args);
+ mIsMaturityRatingChangingDuringTeleport = false;
+ }
+}
+
+void LLAgent::handleTeleportFailed()
+{
+ // XXX stinson 05/11/2012 llassert(hasCurrentTeleportRequest());
+ // XXX stinson 05/11/2012 llassert(!hasFailedTeleportRequest());
+ if (hasCurrentTeleportRequest())
+ {
+ mFailedTeleportRequest = mCurrentTeleportRequest;
+ }
+ mIsMaturityRatingChangingDuringTeleport = false;
+}
+
void LLAgent::teleportRequest(
const U64& region_handle,
const LLVector3& pos_local,
@@ -3570,9 +3690,9 @@ void LLAgent::teleportRequest(
// Landmark ID = LLUUID::null means teleport home
void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id)
{
- llassert(mTeleportRequest == NULL);
- mTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLandmark(landmark_asset_id));
- mTeleportRequest->doTeleport();
+ // XXX stinson 05/11/2012 llassert(!hasCurrentTeleportRequest());
+ mCurrentTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLandmark(landmark_asset_id));
+ mCurrentTeleportRequest->doTeleport();
}
void LLAgent::doTeleportViaLandmark(const LLUUID& landmark_asset_id)
@@ -3592,9 +3712,9 @@ void LLAgent::doTeleportViaLandmark(const LLUUID& landmark_asset_id)
void LLAgent::teleportViaLure(const LLUUID& lure_id, BOOL godlike)
{
- llassert(mTeleportRequest == NULL);
- mTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLure(lure_id, godlike));
- mTeleportRequest->doTeleport();
+ // XXX stinson 05/11/2012 llassert(!hasCurrentTeleportRequest());
+ mCurrentTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLure(lure_id, godlike));
+ mCurrentTeleportRequest->doTeleport();
}
void LLAgent::doTeleportViaLure(const LLUUID& lure_id, BOOL godlike)
@@ -3648,9 +3768,9 @@ void LLAgent::teleportCancel()
void LLAgent::teleportViaLocation(const LLVector3d& pos_global)
{
- llassert(mTeleportRequest == NULL);
- mTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLocation(pos_global));
- mTeleportRequest->doTeleport();
+ // XXX stinson 05/11/2012 llassert(!hasCurrentTeleportRequest());
+ mCurrentTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLocation(pos_global));
+ mCurrentTeleportRequest->doTeleport();
}
void LLAgent::doTeleportViaLocation(const LLVector3d& pos_global)
@@ -3697,9 +3817,9 @@ void LLAgent::doTeleportViaLocation(const LLVector3d& pos_global)
// Teleport to global position, but keep facing in the same direction
void LLAgent::teleportViaLocationLookAt(const LLVector3d& pos_global)
{
- llassert(mTeleportRequest == NULL);
- mTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLocationLookAt(pos_global));
- mTeleportRequest->doTeleport();
+ // XXX stinson 05/11/2012 llassert(!hasCurrentTeleportRequest());
+ mCurrentTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLocationLookAt(pos_global));
+ mCurrentTeleportRequest->doTeleport();
}
void LLAgent::doTeleportViaLocationLookAt(const LLVector3d& pos_global)
@@ -3723,7 +3843,6 @@ void LLAgent::setTeleportState(ETeleportState state)
{
case TELEPORT_NONE:
mbTeleportKeepsLookAt = false;
- mTeleportRequest.reset();
break;
case TELEPORT_MOVING: