diff options
22 files changed, 369 insertions, 8 deletions
| diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index 39cfb6019e..a62b9c3227 100755 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -1383,3 +1383,5 @@ char const* const _PREHASH_GroupAVSounds = LLMessageStringTable::getInstance()->  char const* const _PREHASH_AppearanceData = LLMessageStringTable::getInstance()->getString("AppearanceData");  char const* const _PREHASH_AppearanceVersion = LLMessageStringTable::getInstance()->getString("AppearanceVersion");  char const* const _PREHASH_CofVersion = LLMessageStringTable::getInstance()->getString("CofVersion"); +char const* const _PREHASH_AppearanceHover = LLMessageStringTable::getInstance()->getString("AppearanceHover"); +char const* const _PREHASH_HoverHeight = LLMessageStringTable::getInstance()->getString("HoverHeight"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index 573e10dc0b..573c8e466f 100755 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -1383,4 +1383,6 @@ extern char const* const _PREHASH_GroupAVSounds;  extern char const* const _PREHASH_AppearanceData;  extern char const* const _PREHASH_AppearanceVersion;  extern char const* const _PREHASH_CofVersion; +extern char const* const _PREHASH_AppearanceHover; +extern char const* const _PREHASH_HoverHeight;  #endif diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp index 62c5ecb8f1..2da39fa54b 100755 --- a/indra/llui/llsliderctrl.cpp +++ b/indra/llui/llsliderctrl.cpp @@ -58,7 +58,8 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p)  	mPrecision(p.decimal_digits),  	mTextEnabledColor(p.text_color()),  	mTextDisabledColor(p.text_disabled_color()), -	mLabelWidth(p.label_width) +	mLabelWidth(p.label_width), +	mEditorCommitSignal(NULL)  {  	S32 top = getRect().getHeight();  	S32 bottom = 0; @@ -196,6 +197,11 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p)  	updateText();  } +LLSliderCtrl::~LLSliderCtrl() +{ +	delete mEditorCommitSignal; +} +  // static  void LLSliderCtrl::onEditorGainFocus( LLFocusableElement* caller, void *userdata )  { @@ -308,6 +314,8 @@ void LLSliderCtrl::onEditorCommit( LLUICtrl* ctrl, const LLSD& userdata )  	if( success )  	{  		self->onCommit(); +		if (self->mEditorCommitSignal) +			(*(self->mEditorCommitSignal))(self, self->getValueF32());  	}  	else  	{ @@ -421,6 +429,11 @@ boost::signals2::connection LLSliderCtrl::setSliderMouseUpCallback( const commit  	return mSlider->setMouseUpCallback( cb );  } +boost::signals2::connection LLSliderCtrl::setSliderEditorCommitCallback( const commit_signal_t::slot_type& cb )    +{  +	if (!mEditorCommitSignal) mEditorCommitSignal = new commit_signal_t(); +	return mEditorCommitSignal->connect(cb);  +}  void LLSliderCtrl::onTabInto()  {  	if( mEditor ) diff --git a/indra/llui/llsliderctrl.h b/indra/llui/llsliderctrl.h index 5153e33f49..67cca9ef04 100755 --- a/indra/llui/llsliderctrl.h +++ b/indra/llui/llsliderctrl.h @@ -81,7 +81,7 @@ protected:  	LLSliderCtrl(const Params&);  	friend class LLUICtrlFactory;  public: -	virtual ~LLSliderCtrl() {} // Children all cleaned up by default view destructor. +	virtual ~LLSliderCtrl();  	/*virtual*/ F32	getValueF32() const { return mSlider->getValueF32(); }  	void			setValue(F32 v, BOOL from_event = FALSE); @@ -112,6 +112,7 @@ public:  	boost::signals2::connection setSliderMouseDownCallback(	const commit_signal_t::slot_type& cb );  	boost::signals2::connection setSliderMouseUpCallback( const commit_signal_t::slot_type& cb ); +	boost::signals2::connection setSliderEditorCommitCallback( const commit_signal_t::slot_type& cb );  	/*virtual*/ void	onTabInto(); @@ -150,6 +151,8 @@ private:  	LLUIColor	mTextEnabledColor;  	LLUIColor	mTextDisabledColor; + +	commit_signal_t*	mEditorCommitSignal;  };  #endif  // LL_LLSLIDERCTRL_H diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index e8f4144e70..5f4c1c5aa9 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -244,6 +244,7 @@ set(viewer_SOURCE_FILES      llfloaterhandler.cpp      llfloaterhardwaresettings.cpp      llfloaterhelpbrowser.cpp +    llfloaterhoverheight.cpp      llfloaterhud.cpp      llfloaterimagepreview.cpp      llfloaterimsessiontab.cpp @@ -849,6 +850,7 @@ set(viewer_HEADER_FILES      llfloaterhandler.h      llfloaterhardwaresettings.h      llfloaterhelpbrowser.h +    llfloaterhoverheight.h      llfloaterhud.h      llfloaterimagepreview.h      llfloaterimnearbychat.h diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index 15cb5bc0eb..6a798e1d42 100755 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -42,7 +42,9 @@  						</array>  					<key>tags</key>  						<array> +						     <string>Avatar</string>  						<!-- sample entry for debugging specific items	 +						     <string>Avatar</string>  						     <string>Inventory</string>  						     <string>SceneLoadTiming</string>  						     <string>Avatar</string> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 94d3c8a59f..138bdde9e9 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -654,6 +654,21 @@        <key>Value</key>        <integer>2</integer>      </map> +    <key>AvatarPosFinalOffset</key> +    <map> +      <key>Comment</key> +      <string>After-everything-else fixup for avatar position.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Vector3</string> +      <key>Value</key> +      <array> +        <real>0.0</real> +        <real>0.0</real> +        <real>0.0</real> +      </array> +    </map>      <key>AvatarPickerURL</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llfloaterhoverheight.cpp b/indra/newview/llfloaterhoverheight.cpp new file mode 100755 index 0000000000..bcdab6b3a0 --- /dev/null +++ b/indra/newview/llfloaterhoverheight.cpp @@ -0,0 +1,93 @@ +/**  +* @file llfloaterhoverheight.cpp +* @brief Controller for self avatar hover height +* @author vir@lindenlab.com +* +* $LicenseInfo:firstyear=2014&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2014, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterhoverheight.h" +#include "llsliderctrl.h" +#include "llviewercontrol.h" +#include "llsdserialize.h" +#include "llhttpclient.h" +#include "llagent.h" +#include "llviewerregion.h" +#include "llvoavatarself.h" + +LLFloaterHoverHeight::LLFloaterHoverHeight(const LLSD& key) : LLFloater(key) +{ +} + +void LLFloaterHoverHeight::syncFromPreferenceSetting(void *user_data) +{ +	LLVector3 offset = gSavedSettings.getVector3("AvatarPosFinalOffset"); +	F32 value = offset[2]; + +	LLFloaterHoverHeight *self = static_cast<LLFloaterHoverHeight*>(user_data); +	LLSliderCtrl* sldrCtrl = self->getChild<LLSliderCtrl>("HoverHeightSlider"); +	sldrCtrl->setValue(value,FALSE); +	if (isAgentAvatarValid()) +	{ +		gAgentAvatarp->sendHoverHeight(); +	} +} + +BOOL LLFloaterHoverHeight::postBuild() +{ +	LLSliderCtrl* sldrCtrl = getChild<LLSliderCtrl>("HoverHeightSlider"); +	sldrCtrl->setSliderMouseUpCallback(boost::bind(&LLFloaterHoverHeight::onFinalCommit,this)); +	sldrCtrl->setSliderEditorCommitCallback(boost::bind(&LLFloaterHoverHeight::onFinalCommit,this)); +	childSetCommitCallback("HoverHeightSlider", &LLFloaterHoverHeight::onSliderMoved, NULL); + +	// Initialize slider from pref setting. +	syncFromPreferenceSetting(this); +	// Update slider on future pref changes. +	gSavedSettings.getControl("AvatarPosFinalOffset")->getCommitSignal()->connect(boost::bind(&syncFromPreferenceSetting, this)); + +	return TRUE; +} + +// static +void LLFloaterHoverHeight::onSliderMoved(LLUICtrl* ctrl, void* userData) +{ +	LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl); +	F32 value = sldrCtrl->getValueF32(); +	LLVector3 offset = gSavedSettings.getVector3("AvatarPosFinalOffset"); +	offset[2] = value; +	gAgentAvatarp->mHoverOffset = offset; +} + +// Do send-to-the-server work when slider drag completes, or new +// value entered as text. +void LLFloaterHoverHeight::onFinalCommit() +{ +	LLSliderCtrl* sldrCtrl = getChild<LLSliderCtrl>("HoverHeightSlider"); +	F32 value = sldrCtrl->getValueF32(); +	LLVector3 offset = gSavedSettings.getVector3("AvatarPosFinalOffset"); +	offset[2] = value; +	gSavedSettings.setVector3("AvatarPosFinalOffset",offset); +} + + diff --git a/indra/newview/llfloaterhoverheight.h b/indra/newview/llfloaterhoverheight.h new file mode 100755 index 0000000000..586871374f --- /dev/null +++ b/indra/newview/llfloaterhoverheight.h @@ -0,0 +1,45 @@ +/**  +* @file   llfloaterhoverheight.h +* @brief  Controller for self avatar hover height. +* @author vir@lindenlab.com +* +* $LicenseInfo:firstyear=2014&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2014, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA +* $/LicenseInfo$ +*/ +#ifndef LL_LLFLOATERHOVERHEIGHT_H +#define LL_LLFLOATERHOVERHEIGHT_H + +#include "llfloater.h" + +class LLFloaterHoverHeight: public LLFloater +{ +public: +	LLFloaterHoverHeight(const LLSD& key); +	BOOL postBuild(); + +	static void onSliderMoved(LLUICtrl* ctrl, void* userData); + +	void onFinalCommit(); + +	static void syncFromPreferenceSetting(void *user_data); +}; + +#endif diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp index 0880a5f35a..849aa7cd14 100755 --- a/indra/newview/llfloaterperms.cpp +++ b/indra/newview/llfloaterperms.cpp @@ -35,6 +35,8 @@  #include "llagent.h"  #include "llviewerregion.h"  #include "llnotificationsutil.h" +#include "llsdserialize.h" +#include "llvoavatar.h"  LLFloaterPerms::LLFloaterPerms(const LLSD& seed)  : LLFloater(seed) @@ -171,8 +173,9 @@ public:  private:  	static	std::string sPreviousReason; -	void error(U32 status, const std::string& reason) +	void httpFailure()  	{ +		const std::string& reason = getReason();  		// Do not display the same error more than once in a row  		if (reason != sPreviousReason)  		{ @@ -182,8 +185,12 @@ private:  			LLNotificationsUtil::add("DefaultObjectPermissions", args);  		}  	} -	void result(const LLSD& content) + +	void httpSuccess()  	{ +		//const LLSD& content = getContent(); +		//dump_sequential_xml("perms_responder_result.xml", content); +  		// Since we have had a successful POST call be sure to display the next error message  		// even if it is the same as a previous one.  		sPreviousReason = ""; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 9da7717b74..d5f9268a64 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2210,6 +2210,8 @@ bool idle_startup()  		llassert(LLPathfindingManager::getInstance() != NULL);  		LLPathfindingManager::getInstance()->initSystem(); +		gAgentAvatarp->sendHoverHeight(); +  		return TRUE;  	} diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index e19fe9ca75..fc18b20758 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -70,6 +70,7 @@  #include "llfloatergroups.h"  #include "llfloaterhardwaresettings.h"  #include "llfloaterhelpbrowser.h" +#include "llfloaterhoverheight.h"  #include "llfloaterhud.h"  #include "llfloaterimagepreview.h"  #include "llfloaterimsession.h" @@ -221,7 +222,8 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("god_tools", "floater_god_tools.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGodTools>);  	LLFloaterReg::add("group_picker", "floater_choose_group.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGroupPicker>); -	LLFloaterReg::add("help_browser", "floater_help_browser.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHelpBrowser>);	 +	LLFloaterReg::add("help_browser", "floater_help_browser.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHelpBrowser>); +	LLFloaterReg::add("edit_hover_height", "floater_edit_hover_height.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHoverHeight>);  	LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHUD>);  	LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterIMSession>); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 3abeba4b43..302dd6f889 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3881,6 +3881,14 @@ class LLEnableEditShape : public view_listener_t  	}  }; +class LLEnableHoverHeight : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		return true; +	} +}; +  class LLEnableEditPhysics : public view_listener_t  {  	bool handleEvent(const LLSD& userdata) @@ -6075,6 +6083,11 @@ void handle_edit_shape()  	LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "edit_shape"));  } +void handle_hover_height() +{ +	LLFloaterReg::showInstance("edit_hover_height"); +} +  void handle_edit_physics()  {  	LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "edit_physics")); @@ -8571,10 +8584,12 @@ void initialize_menus()  	view_listener_t::addMenu(new LLEditEnableTakeOff(), "Edit.EnableTakeOff");  	view_listener_t::addMenu(new LLEditEnableCustomizeAvatar(), "Edit.EnableCustomizeAvatar");  	view_listener_t::addMenu(new LLEnableEditShape(), "Edit.EnableEditShape"); +	view_listener_t::addMenu(new LLEnableHoverHeight(), "Edit.EnableHoverHeight");  	view_listener_t::addMenu(new LLEnableEditPhysics(), "Edit.EnableEditPhysics");  	commit.add("CustomizeAvatar", boost::bind(&handle_customize_avatar));  	commit.add("EditOutfit", boost::bind(&handle_edit_outfit));  	commit.add("EditShape", boost::bind(&handle_edit_shape)); +	commit.add("HoverHeight", boost::bind(&handle_hover_height));  	commit.add("EditPhysics", boost::bind(&handle_edit_physics));  	// View menu diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index b54f341c31..da0e72a6ee 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -252,6 +252,8 @@ struct LLAppearanceMessageContents  	//U32 appearance_flags = 0;  	std::vector<F32> mParamWeights;  	std::vector<LLVisualParam*> mParams; +	LLVector3 mHoverOffset; +	bool mHoverOffsetWasSet;  };  struct LLVOAvatarChildJoint : public LLInitParam::ChoiceBlock<LLVOAvatarChildJoint> @@ -716,7 +718,8 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,  	mIsEditingAppearance(FALSE),  	mUseLocalAppearance(FALSE),  	mLastUpdateRequestCOFVersion(-1), -	mLastUpdateReceivedCOFVersion(-1) +	mLastUpdateReceivedCOFVersion(-1), +	mHoverOffset(0.0, 0.0, 0.0)  {  	//VTResume();  // VTune @@ -772,6 +775,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,  	mRuthTimer.reset();  	mRuthDebugTimer.reset();  	mDebugExistenceTimer.reset(); +	mLastAppearanceMessageTimer.reset();      if(LLSceneMonitor::getInstance()->isEnabled())  	{ @@ -1955,6 +1959,11 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys,  	// Do base class updates...  	U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp); +	//LLTEContents tec; +	//S32 te_retval = parseTEMessage(mesgsys, _PREHASH_ObjectData, block_num, tec); + +	LL_DEBUGS("Avatar") << avString() << update_type << LL_ENDL;  +  	// Print out arrival information once we have name of avatar.  		if (has_name && getNVPair("FirstName"))  		{ @@ -3208,6 +3217,17 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  			debug_line += llformat(" - cof rcv:%d", last_received_cof_version);  		}  		debug_line += llformat(" bsz-z: %f avofs-z: %f", mBodySize[2], mAvatarOffset[2]); +		if (mHoverOffset[2] != 0.0) +		{ +			debug_line += llformat(" hov_z: %f", mHoverOffset[2]); +		} +		F32 elapsed = mLastAppearanceMessageTimer.getElapsedTimeF32(); +		static const char *elapsed_chars = "Xx*..."; +		U32 bucket = U32(elapsed*2); +		if (bucket < strlen(elapsed_chars)) +		{ +			debug_line += llformat(" %c", elapsed_chars[bucket]); +		}  		addDebugText(debug_line);  	}  	if (gSavedSettings.getBOOL("DebugAvatarCompositeBaked")) @@ -3408,9 +3428,11 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  		// correct for the fact that the pelvis is not necessarily the center   		// of the agent's physical representation  		root_pos.mdV[VZ] -= (0.5f * mBodySize.mV[VZ]) - mPelvisToFoot; +		root_pos += LLVector3d(mHoverOffset);  		LLVector3 newPosition = gAgent.getPosAgentFromGlobal(root_pos); +  		if (newPosition != mRoot->getXform()->getWorldPosition())  		{		  			mRoot->touch(); @@ -3575,7 +3597,9 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  	}  	else if (mDrawable.notNull())  	{ -		mRoot->setPosition(mDrawable->getPosition()); +		LLVector3 pos = mDrawable->getPosition(); +		pos += mHoverOffset * mDrawable->getRotation(); +		mRoot->setPosition(pos);  		mRoot->setRotation(mDrawable->getRotation());  	} @@ -7117,6 +7141,17 @@ void LLVOAvatar::parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMe  		// For future use:  		//mesgsys->getU32Fast(_PREHASH_AppearanceData, _PREHASH_Flags, appearance_flags, 0);  	} + +	// Parse the AppearanceData field, if any. +	contents.mHoverOffsetWasSet = false; +	if (mesgsys->has(_PREHASH_AppearanceHover)) +	{ +		LLVector3 hover; +		mesgsys->getVector3Fast(_PREHASH_AppearanceHover, _PREHASH_HoverHeight, hover); +		LL_DEBUGS("Avatar") << avString() << " hover received " << hover.mV[ VX ] << "," << hover.mV[ VY ] << "," << hover.mV[ VZ ] << LL_ENDL; +		contents.mHoverOffset = hover; +		contents.mHoverOffsetWasSet = true; +	}  	// Parse visual params, if any.  	S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_VisualParam); @@ -7234,6 +7269,8 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  		return;  	} +	mLastAppearanceMessageTimer.reset(); +  	ESex old_sex = getSex();  	LLAppearanceMessageContents contents; @@ -7418,6 +7455,27 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )  		}  	} +	if (isSelf()) +	{ +		LL_INFOS("Avatar") << "hover was set: " << contents.mHoverOffsetWasSet << " value_z " << contents.mHoverOffset[2] << LL_ENDL; +	} +	 +	if (contents.mHoverOffsetWasSet && !isSelf()) +	{ +		// Got an update for some other avatar. +		// (Ignore updates for self because they may be out of date.) +		mHoverOffset = contents.mHoverOffset; +	} + +	if (!contents.mHoverOffsetWasSet) +	{ +		// If we don't get a value at all, we are presumably in a +		// region that does not support hover height. +// FIXME RESTORE AFTER TESTING +		LL_WARNS() << "zeroing hover because not defined in appearance message" << LL_ENDL; +		mHoverOffset = LLVector3(0.0, 0.0, 0.0); +	} +  	setCompositeUpdatesEnabled( TRUE );  	// If all of the avatars are completely baked, release the global image caches to conserve memory. diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 9a2aaf8aa3..a3f599e2d7 100755 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -213,6 +213,7 @@ public:  	/*virtual*/ LLVector3		getPosAgentFromGlobal(const LLVector3d &position);  	virtual void				updateVisualParams(); +	LLVector3 mHoverOffset;  /**                    Inherited   **                                                                            ** @@ -987,6 +988,7 @@ public:  protected:  	LLFrameTimer	mRuthDebugTimer; // For tracking how long it takes for av to rez  	LLFrameTimer	mDebugExistenceTimer; // Debugging for how long the avatar has been in memory. +	LLFrameTimer	mLastAppearanceMessageTimer; // Time since last appearance message received.  	//--------------------------------------------------------------------  	// COF monitoring diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 0be8df349d..3d82a6dab6 100755 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -127,6 +127,25 @@ struct LocalTextureData  	LLTextureEntry *mTexEntry;  }; +// TODO - this class doesn't really do anything, could just use a base +// class responder if nothing else gets added. +class LLHoverHeightResponder: public LLHTTPClient::Responder +{ +public: +	LLHoverHeightResponder(): LLHTTPClient::Responder() {} + +private: +	void httpFailure() +	{ +		LL_WARNS() << dumpResponse() << LL_ENDL; +	} + +	void httpSuccess() +	{ +		LL_INFOS() << dumpResponse() << LL_ENDL; +	} +}; +  //-----------------------------------------------------------------------------  // Callback data  //----------------------------------------------------------------------------- @@ -220,6 +239,8 @@ void LLVOAvatarSelf::initInstance()  		return;  	} +	mHoverOffset = gSavedSettings.getVector3("AvatarPosFinalOffset"); +  	//doPeriodically(output_self_av_texture_diagnostics, 30.0);  	doPeriodically(update_avatar_rez_metrics, 5.0);  	doPeriodically(boost::bind(&LLVOAvatarSelf::checkStuckAppearance, this), 30.0); @@ -2701,6 +2722,22 @@ bool LLVOAvatarSelf::sendAppearanceMessage(LLMessageSystem *mesgsys) const  	return success;  } +//------------------------------------------------------------------------ +// sendHoverHeight() +//------------------------------------------------------------------------ +void LLVOAvatarSelf::sendHoverHeight() const +{ +	std::string url = gAgent.getRegion()->getCapability("AgentPreferences"); + +	if (!url.empty()) +	{ +		LLSD update = LLSD::emptyMap(); +		update["hover_height"] = mHoverOffset[2]; + +		LL_DEBUGS("Avatar") << "sending hover height value " << mHoverOffset[2] << LL_ENDL; +		LLHTTPClient::post(url, update, new LLHoverHeightResponder); +	} +}  //------------------------------------------------------------------------  // needsRenderBeam() diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 13ffc057b0..a47b6c3463 100755 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -327,6 +327,8 @@ public:  public:  	bool			sendAppearanceMessage(LLMessageSystem *mesgsys) const; +	void			sendHoverHeight() const; +  /**                    Appearance   **                                                                            **   *******************************************************************************/ diff --git a/indra/newview/skins/default/xui/en/floater_edit_hover_height.xml b/indra/newview/skins/default/xui/en/floater_edit_hover_height.xml new file mode 100755 index 0000000000..29d06b9b4e --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_edit_hover_height.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + positioning="cascading" + ignore_ui_scale="false" + legacy_header_height="225" + can_minimize="true" + can_close="true" + can_resize="true" + min_height="65" + min_width="515" + height="65" + layout="topleft" + name="HoverHeight" + single_instance="true" + help_topic="hover_height" + save_rect="true" + save_visibility="true" + title="SET HOVER HEIGHT" + width="515"> +      <slider +     control_name="HoverHeightSlider" +     decimal_digits="3" +     follows="top|left" +     height="15" +     increment="0.001" +     max_val="2" +     min_val="-2" +     initial_value="0.0" +     label="Height" +     label_width="60" +     left="10" +     width="501" +     layout="topleft" +     name="HoverHeightSlider" +     top="35" +     can_edit_text="true" +     > +    </slider> +</floater> diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml index bcbc8d5b86..c6ae844d67 100755 --- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml @@ -91,6 +91,14 @@ name="Edit Outfit">      <menu_item_call.on_enable       function="Edit.EnableEditShape" />    </menu_item_call> +  <menu_item_call label="Hover Height" +     layout="topleft" +     name="Hover Height"> +     <menu_item_call.on_click +      function="HoverHeight" /> +     <menu_item_call.on_enable +      function="Edit.EnableHoverHeight" /> +  </menu_item_call>    <menu_item_call      label="My Friends"      layout="topleft" diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml index ca0c9bd5e4..d3b0b07f70 100755 --- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml @@ -229,6 +229,14 @@         <menu_item_call.on_enable          function="Edit.EnableEditShape" />     </menu_item_call> +   <menu_item_call label="Hover Height" +     layout="topleft" +     name="Hover Height"> +     <menu_item_call.on_click +      function="HoverHeight" /> +     <menu_item_call.on_enable +      function="Edit.EnableHoverHeight" /> +   </menu_item_call>     <menu_item_call       label="My Friends"       layout="topleft" diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg index 6702de9b4a..3cec4ada1c 100755 --- a/scripts/messages/message_template.msg +++ b/scripts/messages/message_template.msg @@ -3594,6 +3594,10 @@ version 2.0  		{	CofVersion			S32	}  		{	Flags				U32	}  	} +	{ +		AppearanceHover		Variable +		{	HoverHeight	LLVector3	} +	}  }  // AvatarSitResponse - response to a request to sit on an object diff --git a/scripts/messages/message_template.msg.sha1 b/scripts/messages/message_template.msg.sha1 index 7a31177f11..e699efb03c 100755 --- a/scripts/messages/message_template.msg.sha1 +++ b/scripts/messages/message_template.msg.sha1 @@ -1 +1 @@ -4dbf88396c3188ad4c54c4f847a7d8817793668d
\ No newline at end of file +2286adc795b1b06eb86fdda431a71a6f0874b4f1
\ No newline at end of file | 
