Skip to content
Snippets Groups Projects
Commit db154bd7 authored by Kitty Barnett's avatar Kitty Barnett
Browse files

Merge branch 'world/effect-base' into rlva/development

parents 38444462 a0ff6c35
No related branches found
No related tags found
No related merge requests found
...@@ -75,30 +75,25 @@ LLVfxManager::LLVfxManager() ...@@ -75,30 +75,25 @@ LLVfxManager::LLVfxManager()
bool LLVfxManager::addEffect(LLVisualEffect* pEffectInst) bool LLVfxManager::addEffect(LLVisualEffect* pEffectInst)
{ {
if (m_Effects.end() != m_Effects.find(pEffectInst)) // Effect IDs can be reused across effects but should be unique for all effect instances sharing the same effect code
auto itEffect = std::find_if(m_Effects.begin(), m_Effects.end(), [pEffectInst](const LLVisualEffect* pEffect) { return pEffect->getCode() == pEffectInst->getCode() && pEffect->getId() == pEffectInst->getId(); });
llassert(m_Effects.end() == itEffect);
if (m_Effects.end() != itEffect)
return false; return false;
m_Effects.insert(pEffectInst); m_Effects.insert(pEffectInst);
return true; return true;
} }
LLVisualEffect* LLVfxManager::getEffect(const LLUUID& idEffect) const LLVisualEffect* LLVfxManager::getEffect(EVisualEffect eCode, const LLUUID& idEffect) const
{
auto itEffect = std::find_if(m_Effects.begin(), m_Effects.end(), [&idEffect](const LLVisualEffect* pEffect) { return pEffect->getId() == idEffect; });
return (m_Effects.end() != itEffect) ? *itEffect : nullptr;
}
LLVisualEffect* LLVfxManager::getEffect(EVisualEffect eCode) const
{ {
// NOTE: returns the first found but there could be more auto itEffect = std::find_if(m_Effects.begin(), m_Effects.end(), [eCode, &idEffect](const LLVisualEffect* pEffect) { return pEffect->getCode() == eCode && pEffect->getId() == idEffect; });
auto itEffect = std::find_if(m_Effects.begin(), m_Effects.end(), [eCode](const LLVisualEffect* pEffect) { return pEffect->getCode() == eCode; });
return (m_Effects.end() != itEffect) ? *itEffect : nullptr; return (m_Effects.end() != itEffect) ? *itEffect : nullptr;
} }
bool LLVfxManager::removeEffect(const LLUUID& idEffect) bool LLVfxManager::removeEffect(EVisualEffect eCode, const LLUUID& idEffect)
{ {
auto itEffect = std::find_if(m_Effects.begin(), m_Effects.end(), [&idEffect](const LLVisualEffect* pEffect) { return pEffect->getId() == idEffect; }); auto itEffect = std::find_if(m_Effects.begin(), m_Effects.end(), [eCode, &idEffect](const LLVisualEffect* pEffect) { return pEffect->getCode() == eCode && pEffect->getId() == idEffect; });
if (m_Effects.end() == itEffect) if (m_Effects.end() == itEffect)
return false; return false;
......
...@@ -159,12 +159,11 @@ class LLVfxManager : public LLSingleton<LLVfxManager> ...@@ -159,12 +159,11 @@ class LLVfxManager : public LLSingleton<LLVfxManager>
*/ */
public: public:
bool addEffect(LLVisualEffect* pEffectInst); bool addEffect(LLVisualEffect* pEffectInst);
LLVisualEffect* getEffect(const LLUUID& idEffect) const; LLVisualEffect* getEffect(EVisualEffect eCode, const LLUUID& idEffect) const;
template<typename T> T* getEffect(const LLUUID& idEffect) const { return dynamic_cast<T*>(getEffect(idEffect)); } template<typename T> T* getEffect(const LLUUID& idEffect) const { return dynamic_cast<T*>(getEffect(T::EffectCode, idEffect)); }
LLVisualEffect* getEffect(EVisualEffect eCode) const; bool hasEffect(EVisualEffect eCode) const;
template<typename T> T* getEffect(EVisualEffect eCode) const { return dynamic_cast<T*>(getEffect(eCode)); } bool removeEffect(EVisualEffect eCode, const LLUUID& idEffect);
bool hasEffect(EVisualEffect eCode) const { return getEffect(eCode); } template<typename T> bool removeEffect(const LLUUID& idEffect) { return removeEffect(T::EffectCode, idEffect); }
bool removeEffect(const LLUUID& idEffect);
void runEffect(EVisualEffect eCode, LLVisualEffectParams* pParams = nullptr); void runEffect(EVisualEffect eCode, LLVisualEffectParams* pParams = nullptr);
void runEffect(EVisualEffectType eType, LLVisualEffectParams* pParams = nullptr); void runEffect(EVisualEffectType eType, LLVisualEffectParams* pParams = nullptr);
protected: protected:
...@@ -177,3 +176,12 @@ class LLVfxManager : public LLSingleton<LLVfxManager> ...@@ -177,3 +176,12 @@ class LLVfxManager : public LLSingleton<LLVfxManager>
}; };
// ============================================================================ // ============================================================================
// Inlined member functions
//
inline bool LLVfxManager::hasEffect(EVisualEffect eCode) const
{
return m_Effects.end() != std::find_if(m_Effects.begin(), m_Effects.end(), [eCode](const LLVisualEffect* pEffect) { return pEffect->getCode() == eCode; });
}
// ============================================================================
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment