diff options
-rw-r--r-- | indra/newview/llavatarrendernotifier.cpp | 106 | ||||
-rw-r--r-- | indra/newview/llavatarrendernotifier.h | 1 |
2 files changed, 41 insertions, 66 deletions
diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp index da8bfae1a9..a0e3e86eea 100644 --- a/indra/newview/llavatarrendernotifier.cpp +++ b/indra/newview/llavatarrendernotifier.cpp @@ -99,6 +99,7 @@ std::string LLAvatarRenderNotifier::overLimitMessage() void LLAvatarRenderNotifier::displayNotification() { + mAgentComplexity = mLatestAgentComplexity; static LLCachedControl<U32> expire_delay(gSavedSettings, "ShowMyComplexityChanges", 20); LLDate expire_date(LLDate::now().secondsSinceEpoch() + expire_delay); @@ -107,6 +108,10 @@ void LLAvatarRenderNotifier::displayNotification() std::string notification_name; if (mShowOverLimitAgents) { + mAgentsCount = mLatestAgentsCount; + mOverLimitAgents = mLatestOverLimitAgents; + mOverLimitPct = mLatestOverLimitPct; + std::string notification_message = overLimitMessage(); notification_name = "RegionAndAgentComplexity"; args["OVERLIMIT_MSG"] = notification_message; @@ -134,69 +139,6 @@ bool LLAvatarRenderNotifier::isNotificationVisible() return mNotificationPtr != NULL && mNotificationPtr->isActive(); } -void LLAvatarRenderNotifier::updateNotification() -{ - if (mAgentsCount == mLatestAgentsCount - && mOverLimitAgents == mLatestOverLimitAgents - && mAgentComplexity == mLatestAgentComplexity) - { - //no changes since last notification - return; - } - - if (mLatestAgentComplexity == 0 - || !gAgentWearables.areWearablesLoaded()) - { - // data not ready, nothing to show. - return; - } - - bool display_notification = false; - bool is_visible = isNotificationVisible(); - - if (mLatestOverLimitPct > 0 || mOverLimitPct > 0) - { - //include 'over limit' information into notification - mShowOverLimitAgents = true; - } - else - { - // make sure that 'over limit' won't be displayed only to be hidden in a second - mShowOverLimitAgents &= is_visible; - } - - if (mAgentComplexity != mLatestAgentComplexity) - { - // if we have an agent complexity update, we always display it - display_notification = true; - - // next 'over limit' update should be displayed after delay to make sure information got updated at server side - mPopUpDelayTimer.resetWithExpiry(OVER_LIMIT_UPDATE_DELAY); - } - else if ( (mPopUpDelayTimer.hasExpired() || is_visible) - && (mOverLimitPct > 0 || mLatestOverLimitPct > 0) - && std::abs(mOverLimitPct - mLatestOverLimitPct) > mLatestOverLimitPct * RENDER_ALLOWED_CHANGE_PCT - ) - { - // display in case of drop to/from zero and in case of significant (RENDER_ALLOWED_CHANGE_PCT) changes - display_notification = true; - - // default timeout before next notification - static LLCachedControl<U32> pop_up_delay(gSavedSettings, "ComplexityChangesPopUpDelay", 300); - mPopUpDelayTimer.resetWithExpiry(pop_up_delay); - } - - if (display_notification) - { - mAgentComplexity = mLatestAgentComplexity; - mAgentsCount = mLatestAgentsCount; - mOverLimitAgents = mLatestOverLimitAgents; - mOverLimitPct = mLatestOverLimitPct; - - displayNotification(); - } -} - void LLAvatarRenderNotifier::updateNotificationRegion(U32 agentcount, U32 overLimit) { if (agentcount == 0) @@ -210,7 +152,27 @@ void LLAvatarRenderNotifier::updateNotificationRegion(U32 agentcount, U32 overLi mLatestOverLimitAgents = overLimit; mLatestOverLimitPct = mLatestAgentsCount != 0 ? ((F32)overLimit / (F32)mLatestAgentsCount) * 100.0 : 0; - updateNotification(); + if (mAgentsCount == mLatestAgentsCount + && mOverLimitAgents == mLatestOverLimitAgents) + { + //no changes since last notification + return; + } + + if ((mPopUpDelayTimer.hasExpired() || (isNotificationVisible() && mShowOverLimitAgents)) + && (mOverLimitPct > 0 || mLatestOverLimitPct > 0) + && std::abs(mOverLimitPct - mLatestOverLimitPct) > mLatestOverLimitPct * RENDER_ALLOWED_CHANGE_PCT + ) + { + // display in case of drop to/from zero and in case of significant (RENDER_ALLOWED_CHANGE_PCT) changes + + mShowOverLimitAgents = true; + displayNotification(); + + // default timeout before next notification + static LLCachedControl<U32> pop_up_delay(gSavedSettings, "ComplexityChangesPopUpDelay", 300); + mPopUpDelayTimer.resetWithExpiry(pop_up_delay); + } } void LLAvatarRenderNotifier::updateNotificationAgent(U32 agentComplexity) @@ -218,6 +180,12 @@ void LLAvatarRenderNotifier::updateNotificationAgent(U32 agentComplexity) // save the value for use in following messages mLatestAgentComplexity = agentComplexity; + if (!gAgentWearables.areWearablesLoaded()) + { + // data not ready, nothing to show. + return; + } + if (!mNotifyOutfitLoading) { // We should not notify about initial outfit and it's load process without reason @@ -244,6 +212,14 @@ void LLAvatarRenderNotifier::updateNotificationAgent(U32 agentComplexity) } } - updateNotification(); + if (mAgentComplexity != mLatestAgentComplexity) + { + // if we have an agent complexity change, we always display it and hide 'over limit' + mShowOverLimitAgents = false; + displayNotification(); + + // next 'over limit' update should be displayed after delay to make sure information got updated at server side + mPopUpDelayTimer.resetWithExpiry(OVER_LIMIT_UPDATE_DELAY); + } } diff --git a/indra/newview/llavatarrendernotifier.h b/indra/newview/llavatarrendernotifier.h index 20fcc5d277..509bc64b20 100644 --- a/indra/newview/llavatarrendernotifier.h +++ b/indra/newview/llavatarrendernotifier.h @@ -43,7 +43,6 @@ public: void displayNotification(); bool isNotificationVisible(); - void updateNotification(); void updateNotificationRegion(U32 agentcount, U32 overLimit); void updateNotificationAgent(U32 agentComplexity); |