diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-09-24 23:35:12 +0300 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-11-12 17:32:28 +0200 | 
| commit | 2b543f92fac5df04d1c0dfce0606998a600f947f (patch) | |
| tree | 35beb4a6dbbebdcf91d453e8c1c3857d5adeda9b | |
| parent | c1c2830f9b7bf4d91977133ffbcd8d0240bcc7fe (diff) | |
SL-16056 Improve 'avatar cloud' behavior
Make avatar cloud delay longer proportionally to load time
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 35 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.h | 3 | 
2 files changed, 32 insertions, 6 deletions
| diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4a179146f8..04356e6507 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -126,6 +126,9 @@ const F32 MIN_HOVER_Z = -2.0;  const F32 MIN_ATTACHMENT_COMPLEXITY = 0.f;  const F32 DEFAULT_MAX_ATTACHMENT_COMPLEXITY = 1.0e6f; +const F32 FIRST_APPEARANCE_CLOUD_MIN_DELAY = 3.f; // seconds +const F32 FIRST_APPEARANCE_CLOUD_MAX_DELAY = 45.f; +  using namespace LLAvatarAppearanceDefines;  //----------------------------------------------------------------------------- @@ -667,6 +670,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,  	mVisuallyMuteSetting(AV_RENDER_NORMALLY),  	mMutedAVColor(LLColor4::white /* used for "uninitialize" */),  	mFirstFullyVisible(TRUE), +	mFirstUseDelaySeconds(FIRST_APPEARANCE_CLOUD_MIN_DELAY),  	mFullyLoaded(FALSE),  	mPreviousFullyLoaded(FALSE),  	mFullyLoadedInitialized(FALSE), @@ -741,7 +745,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,  	mCurrentGesticulationLevel = 0; -     +	mFirstSeenTimer.reset();  	mRuthTimer.reset();  	mRuthDebugTimer.reset();  	mDebugExistenceTimer.reset(); @@ -8126,16 +8130,35 @@ void LLVOAvatar::updateRuthTimer(bool loading)  BOOL LLVOAvatar::processFullyLoadedChange(bool loading)  {  	// We wait a little bit before giving the 'all clear', to let things to -	// settle down (models to snap into place, textures to get first packets) +	// settle down (models to snap into place, textures to get first packets). +    // And if viewer isn't aware of some parts yet, this gives them a chance +    // to arrive.  	const F32 LOADED_DELAY = 1.f; -	const F32 FIRST_USE_DELAY = 3.f; -	if (loading) -		mFullyLoadedTimer.reset(); +    if (loading) +    { +        mFullyLoadedTimer.reset(); +    }  	if (mFirstFullyVisible)  	{ -		mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > FIRST_USE_DELAY); +        if (!isSelf() && loading) +        { +                // Note that textures can causes 60s delay on thier own +                // so this delay might end up on top of textures' delay +                mFirstUseDelaySeconds = llclamp( +                    mFirstSeenTimer.getElapsedTimeF32(), +                    FIRST_APPEARANCE_CLOUD_MIN_DELAY, +                    FIRST_APPEARANCE_CLOUD_MAX_DELAY); + +                if (shouldImpostor()) +                { +                    // Impostors are less of a priority, +                    // let them stay cloud longer +                    mFirstUseDelaySeconds *= 1.25; +                } +        } +		mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > mFirstUseDelaySeconds);  	}  	else  	{ diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 7042406091..aeac23ad92 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -376,6 +376,9 @@ protected:  private:  	BOOL			mFirstFullyVisible; +	F32				mFirstUseDelaySeconds; +	LLFrameTimer	mFirstSeenTimer; +  	BOOL			mFullyLoaded;  	BOOL			mPreviousFullyLoaded;  	BOOL			mFullyLoadedInitialized; | 
