diff --git a/indra/newview/llvisualeffect.cpp b/indra/newview/llvisualeffect.cpp index af68a5741360138001127e503e6f7f21d0a7aa80..efa0cbf2b111177105e9826a819a69ac3f9c5899 100644 --- a/indra/newview/llvisualeffect.cpp +++ b/indra/newview/llvisualeffect.cpp @@ -114,11 +114,12 @@ void LLVfxManager::runEffect(EVisualEffect eCode, LLVisualEffectParams* pParams) auto itEffect = boost::make_filter_iterator(pred, m_Effects.begin(), m_Effects.end()), endEffect = boost::make_filter_iterator(pred, m_Effects.end(), m_Effects.end()); - for (; itEffect != endEffect; ++itEffect) + while (itEffect != endEffect) { + LLVisualEffect* pEffect = *itEffect; if (pParams) - pParams->step(itEffect == endEffect); - (*itEffect)->run(pParams); + pParams->step(++itEffect == endEffect); + pEffect->run(pParams); } } diff --git a/indra/newview/llvisualeffect.h b/indra/newview/llvisualeffect.h index 6419e26b297016a159207b1e83f39c3acd4fe486..69387d49af895fe6971acdc1410b78e116cf0e8f 100644 --- a/indra/newview/llvisualeffect.h +++ b/indra/newview/llvisualeffect.h @@ -163,6 +163,7 @@ class LLVfxManager : public LLSingleton<LLVfxManager> template<typename T> T* getEffect(const LLUUID& idEffect) const { return dynamic_cast<T*>(getEffect(idEffect)); } LLVisualEffect* getEffect(EVisualEffect eCode) const; template<typename T> T* getEffect(EVisualEffect eCode) const { return dynamic_cast<T*>(getEffect(eCode)); } + bool hasEffect(EVisualEffect eCode) const { return getEffect(eCode); } bool removeEffect(const LLUUID& idEffect); void runEffect(EVisualEffect eCode, LLVisualEffectParams* pParams = nullptr); void runEffect(EVisualEffectType eType, LLVisualEffectParams* pParams = nullptr);