SL-92 WIP - more on region notification and managing hover

meow-7.2.2
Brad Payne (Vir Linden) 2015-01-14 17:40:44 -05:00
parent ae6eef4b83
commit be83e48fc1
5 changed files with 59 additions and 15 deletions

View File

@ -52,6 +52,7 @@ void LLFloaterHoverHeight::syncFromPreferenceSetting(void *user_data)
{
LLVector3 offset(0.0, 0.0, llclamp(value,MIN_HOVER_Z,MAX_HOVER_Z));
gAgentAvatarp->mHoverOffset = offset;
LL_INFOS("Avatar") << "set hover from preference setting" << offset[2] << LL_ENDL;
gAgentAvatarp->sendHoverHeight();
}
}
@ -79,9 +80,9 @@ BOOL LLFloaterHoverHeight::postBuild()
updateEditEnabled();
if (!mRegionBoundarySlot.connected())
if (!mRegionChangedSlot.connected())
{
mRegionBoundarySlot = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterHoverHeight::onRegionChanged,this));
mRegionChangedSlot = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterHoverHeight::onRegionChanged,this));
}
return TRUE;
@ -93,6 +94,7 @@ void LLFloaterHoverHeight::onSliderMoved(LLUICtrl* ctrl, void* userData)
LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
F32 value = sldrCtrl->getValueF32();
LLVector3 offset(0.0, 0.0, llclamp(value,MIN_HOVER_Z,MAX_HOVER_Z));
LL_INFOS("Avatar") << "set hover from slider moved" << offset[2] << LL_ENDL;
gAgentAvatarp->mHoverOffset = offset;
}

View File

@ -46,7 +46,7 @@ public:
void updateEditEnabled();
boost::signals2::connection mRegionBoundarySlot;
boost::signals2::connection mRegionChangedSlot;
};
#endif

View File

@ -722,7 +722,6 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
mUseLocalAppearance(FALSE),
mLastUpdateRequestCOFVersion(-1),
mLastUpdateReceivedCOFVersion(-1)
//mHoverOffset(0.0, 0.0, 0.0)
{
//VTResume(); // VTune
mHoverOffset = LLVector3(0.0, 0.0, 0.0);
@ -7460,19 +7459,15 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
}
}
if (isSelf())
{
LL_INFOS("Avatar") << avString() << "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.)
// Got an update for some other avatar
// Ignore updates for self, because we have a more authoritative value in the preferences.
mHoverOffset = contents.mHoverOffset;
LL_INFOS("Avatar") << avString() << "setting hover from message" << mHoverOffset[2] << LL_ENDL;
}
if (!contents.mHoverOffsetWasSet)
if (!contents.mHoverOffsetWasSet && !isSelf())
{
// If we don't get a value at all, we are presumably in a
// region that does not support hover height.

View File

@ -239,15 +239,40 @@ void LLVOAvatarSelf::initInstance()
return;
}
F32 hover_z = gSavedPerAccountSettings.getF32("AvatarHoverOffsetZ");
mHoverOffset = LLVector3(0.0, 0.0, llclamp(hover_z,MIN_HOVER_Z,MAX_HOVER_Z));
LL_INFOS("Avatar") << avString() << " set hover height from debug setting " << mHoverOffset[2] << LL_ENDL;
setHoverIfRegionEnabled();
//doPeriodically(output_self_av_texture_diagnostics, 30.0);
doPeriodically(update_avatar_rez_metrics, 5.0);
doPeriodically(boost::bind(&LLVOAvatarSelf::checkStuckAppearance, this), 30.0);
}
void LLVOAvatarSelf::setHoverIfRegionEnabled()
{
if (getRegion() && getRegion()->simulatorFeaturesReceived())
{
if (getRegion()->avatarHoverHeightEnabled())
{
F32 hover_z = gSavedPerAccountSettings.getF32("AvatarHoverOffsetZ");
mHoverOffset = LLVector3(0.0, 0.0, llclamp(hover_z,MIN_HOVER_Z,MAX_HOVER_Z));
LL_INFOS("Avatar") << avString() << " set hover height from debug setting " << mHoverOffset[2] << LL_ENDL;
}
else
{
mHoverOffset = LLVector3(0.0, 0.0, 0.0);
LL_INFOS("Avatar") << avString() << " zeroing hover height, region does not support" << LL_ENDL;
}
}
else
{
LL_INFOS("Avatar") << avString() << " region or simulator features not known, no change on hover" << LL_ENDL;
if (getRegion())
{
getRegion()->setSimulatorFeaturesReceivedCallback(boost::bind(&LLVOAvatarSelf::onSimulatorFeaturesReceived,this,_1));
}
}
}
bool LLVOAvatarSelf::checkStuckAppearance()
{
const F32 CONDITIONAL_UNSTICK_INTERVAL = 300.0;
@ -850,6 +875,12 @@ void LLVOAvatarSelf::removeMissingBakedTextures()
}
}
void LLVOAvatarSelf::onSimulatorFeaturesReceived(const LLUUID& region_id)
{
LL_INFOS("Avatar") << "simulator features received, setting hover based on region props" << LL_ENDL;
setHoverIfRegionEnabled();
}
//virtual
void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
{
@ -868,6 +899,17 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
//LL_INFOS() << "pos_from_old_region is " << global_pos_from_old_region
// << " while pos_from_new_region is " << pos_from_new_region
// << LL_ENDL;
// Update hover height, or schedule callback, based on whether
// it's supported in this region.
if (regionp->simulatorFeaturesReceived())
{
setHoverIfRegionEnabled();
}
else
{
regionp->setSimulatorFeaturesReceivedCallback(boost::bind(&LLVOAvatarSelf::onSimulatorFeaturesReceived,this,_1));
}
}
if (!regionp || (regionp->getHandle() != mLastRegionHandle))

View File

@ -75,6 +75,9 @@ protected:
// LLViewerObject interface and related
//--------------------------------------------------------------------
public:
boost::signals2::connection mRegionChangedSlot;
void onSimulatorFeaturesReceived(const LLUUID& region_id);
/*virtual*/ void updateRegion(LLViewerRegion *regionp);
/*virtual*/ void idleUpdate(LLAgent &agent, const F64 &time);
@ -327,6 +330,8 @@ public:
public:
bool sendAppearanceMessage(LLMessageSystem *mesgsys) const;
// -- care and feeding of hover height.
void setHoverIfRegionEnabled();
void sendHoverHeight() const;
/** Appearance