diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp index 9d43c4f5bd..d62c424c4a 100644 --- a/indra/newview/llfloaterscriptdebug.cpp +++ b/indra/newview/llfloaterscriptdebug.cpp @@ -124,6 +124,9 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std: if (objectp) { objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, LLGLTexture::BOOST_UI)); + // Mark script error icons + objectp->getIcon()->setScriptError(); + // Mark script error icons floater_label = llformat("%s (%.0f, %.0f, %.0f)", user_name.c_str(), objectp->getPositionRegion().mV[VX], diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp index 7e1025c41b..35d8aeeadb 100644 --- a/indra/newview/llhudicon.cpp +++ b/indra/newview/llhudicon.cpp @@ -61,6 +61,10 @@ static F32 calc_bouncy_animation(F32 x) //----------------------------------------------------------------------------- LLHUDIcon::icon_instance_t LLHUDIcon::sIconInstances; +// Mark script error icons +LLHUDIcon::icon_instance_t LLHUDIcon::sScriptErrorIconInstances; +// Mark script error icons + LLHUDIcon::LLHUDIcon(const U8 type) : LLHUDObject(type), mImagep(NULL), @@ -390,6 +394,17 @@ void LLHUDIcon::cleanupDeadIcons() { sIconInstances.erase(found_it); } + + // Mark script error icons + if ((*icon_it)->mScriptError) + { + icon_instance_t::iterator found_script_it = std::find(sScriptErrorIconInstances.begin(), sScriptErrorIconInstances.end(), *icon_it); + if (found_script_it != sScriptErrorIconInstances.end()) + { + sScriptErrorIconInstances.erase(found_script_it); + } + } + // Mark script error icons } } @@ -398,3 +413,17 @@ S32 LLHUDIcon::getNumInstances() { return (S32)sIconInstances.size(); } + +// Mark script error icons +void LLHUDIcon::setScriptError() +{ + mScriptError = true; + sScriptErrorIconInstances.push_back(this); +} + +//static +BOOL LLHUDIcon::scriptIconsNearby() +{ + return !sScriptErrorIconInstances.empty(); +} +// Mark script error icons \ No newline at end of file diff --git a/indra/newview/llhudicon.h b/indra/newview/llhudicon.h index 644daa0299..3eaa041634 100644 --- a/indra/newview/llhudicon.h +++ b/indra/newview/llhudicon.h @@ -75,6 +75,11 @@ public: BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3* intersection); + // Mark script error icons + void setScriptError(); + static BOOL scriptIconsNearby(); + // Mark script error icons + protected: LLHUDIcon(const U8 type); ~LLHUDIcon(); @@ -92,6 +97,11 @@ private: typedef std::vector > icon_instance_t; static icon_instance_t sIconInstances; + + // Mark script error icons + bool mScriptError; + static icon_instance_t sScriptErrorIconInstances; + // Mark script error icons }; #endif // LL_LLHUDICON_H diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 25faef5ff3..9cf139f2e5 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -362,7 +362,7 @@ BOOL LLStatusBar::postBuild() //mScriptOut = getChildView("scriptout"); mScriptOut = getChild("scriptout"); mScriptOut->setMouseDownCallback(boost::bind(&LLFloaterScriptDebug::show, LLUUID::null)); - mNearbyIcons = LLHUDIcon::iconsNearby(); + mNearbyIcons = LLHUDIcon::scriptIconsNearby(); // Script debug mParcelInfoPanel = getChild("parcel_info_panel"); @@ -559,9 +559,9 @@ void LLStatusBar::refresh() mParcelInfoText->setEnabled(!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)); // Script debug - if (mNearbyIcons != LLHUDIcon::iconsNearby()) + if (mNearbyIcons != LLHUDIcon::scriptIconsNearby()) { - mNearbyIcons = LLHUDIcon::iconsNearby(); + mNearbyIcons = LLHUDIcon::scriptIconsNearby(); updateParcelIcons(); } // Script debug @@ -1135,7 +1135,7 @@ void LLStatusBar::updateParcelIcons() mLightshareBtn->setEnabled(has_lightshare); // // Script debug - mScriptOut->setVisible(LLHUDIcon::iconsNearby()); + mScriptOut->setVisible(LLHUDIcon::scriptIconsNearby()); // Script debug } else diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index b369454a09..5ecc9f7f46 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -388,6 +388,9 @@ public: void setIcon(LLViewerTexture* icon_image); void clearIcon(); + // Getter for HUD icon attached to the object + LLPointer getIcon() const { return mIcon; }; + void markForUpdate(BOOL priority); void updateVolume(const LLVolumeParams& volume_params); virtual void updateSpatialExtents(LLVector4a& min, LLVector4a& max);