Updated the reverted fix for critical bug EXT-1655 ([BSI] Always flying after pressing "Stand" to stand up from an object), also integrated the fix for EXT-6786 ('Stand' button is corrupted if movement control floater is opened). Added some clarifying comments.
Reviewed by Tofu Linden at https://codereview.productengine.com/secondlife/r/253/. --HG-- branch : product-enginemaster
parent
cda29adca1
commit
ea6a3e8e78
|
|
@ -2296,6 +2296,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)
|
||||
{
|
||||
|
|
@ -2303,11 +2310,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())
|
||||
|
|
|
|||
|
|
@ -199,7 +199,12 @@ void LLFloaterMove::setFlyingMode(BOOL fly)
|
|||
if (instance)
|
||||
{
|
||||
instance->setFlyingModeImpl(fly);
|
||||
instance->showModeButtons(!fly);
|
||||
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)
|
||||
{
|
||||
|
|
@ -695,6 +700,7 @@ void LLPanelStandStopFlying::onStandButtonClick()
|
|||
gAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
|
||||
|
||||
setFocus(FALSE); // EXT-482
|
||||
mStandButton->setVisible(FALSE); // force visibility changing to avoid seeing Stand & Move buttons at once.
|
||||
}
|
||||
|
||||
void LLPanelStandStopFlying::onStopFlyingButtonClick()
|
||||
|
|
|
|||
|
|
@ -4169,6 +4169,9 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)
|
|||
}
|
||||
|
||||
gAgent.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)
|
||||
|
|
|
|||
|
|
@ -5653,6 +5653,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());
|
||||
|
|
|
|||
Loading…
Reference in New Issue