diff options
| -rw-r--r-- | indra/newview/llagent.cpp | 12 | ||||
| -rw-r--r-- | indra/newview/llmoveview.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llviewermessage.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 2 | 
4 files changed, 17 insertions, 6 deletions
| diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index f434782977..8bcf680876 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -1295,6 +1295,13 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)  		{  			resetAxes(mAutoPilotTargetFacing);  		} +		// Restore previous flying state before invoking mAutoPilotFinishedCallback to allow +		// callback function to change the flying state (like in near_sit_down_point()). +		// If the user cancelled, don't change the fly state +		if (!user_cancel) +		{ +			setFlying(mAutoPilotFlyOnStop); +		}  		//NB: auto pilot can terminate for a reason other than reaching the destination  		if (mAutoPilotFinishedCallback)  		{ @@ -1302,11 +1309,6 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)  		}  		mLeaderID = LLUUID::null; -		// If the user cancelled, don't change the fly state -		if (!user_cancel) -		{ -			setFlying(mAutoPilotFlyOnStop); -		}  		setControlFlags(AGENT_CONTROL_STOP);  		if (user_cancel && !mAutoPilotBehaviorName.empty()) diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 0ddc4efc81..7df5a33313 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -200,7 +200,11 @@ void LLFloaterMove::setFlyingMode(BOOL fly)  	if (instance)  	{  		instance->setFlyingModeImpl(fly); -		BOOL is_sitting = isAgentAvatarValid() && gAgentAvatarp->isSitting(); +		LLVOAvatarSelf* avatar_object = gAgent.getAvatarObject(); +		bool is_sitting = avatar_object +			&& (avatar_object->getRegion() != NULL) +			&& (!avatar_object->isDead()) +			&& avatar_object->isSitting();  		instance->showModeButtons(!fly && !is_sitting);  	}  	if (fly) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 360c6be2c6..c8a4b27f40 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4428,6 +4428,9 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)  	}  	gAgentCamera.setForceMouselook(force_mouselook); +	// Forcing turning off flying here to prevent flying after pressing "Stand" +	// to stand up from an object. See EXT-1655. +	gAgent.setFlying(FALSE);  	LLViewerObject* object = gObjectList.findObject(sitObjectID);  	if (object) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index acb3b0d458..5100f4e59a 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -5644,6 +5644,8 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object)  	mDrawable->mXform.setRotation(mDrawable->getWorldRotation() * inv_obj_rot);  	gPipeline.markMoved(mDrawable, TRUE); +	// Notice that removing sitDown() from here causes avatars sitting on +	// objects to be not rendered for new arrivals. See EXT-6835 and EXT-1655.  	sitDown(TRUE);  	mRoot.getXform()->setParent(&sit_object->mDrawable->mXform); // LLVOAvatar::sitOnObject  	mRoot.setPosition(getPosition()); | 
