Allow effect ids to be reused for each visual effect (but enforce uniqueness across all instances of the same effect)
parent
110b89e485
commit
a0ff6c3542
|
|
@ -75,30 +75,25 @@ LLVfxManager::LLVfxManager()
|
|||
|
||||
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;
|
||||
|
||||
m_Effects.insert(pEffectInst);
|
||||
|
||||
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; });
|
||||
auto itEffect = std::find_if(m_Effects.begin(), m_Effects.end(), [eCode, &idEffect](const LLVisualEffect* pEffect) { return pEffect->getCode() == eCode && pEffect->getId() == idEffect; });
|
||||
return (m_Effects.end() != itEffect) ? *itEffect : nullptr;
|
||||
}
|
||||
|
||||
LLVisualEffect* LLVfxManager::getEffect(EVisualEffect eCode) const
|
||||
bool LLVfxManager::removeEffect(EVisualEffect eCode, const LLUUID& idEffect)
|
||||
{
|
||||
// NOTE: returns the first found but there could be more
|
||||
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;
|
||||
}
|
||||
|
||||
bool LLVfxManager::removeEffect(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)
|
||||
return false;
|
||||
|
||||
|
|
|
|||
|
|
@ -159,12 +159,11 @@ protected:
|
|||
*/
|
||||
public:
|
||||
bool addEffect(LLVisualEffect* pEffectInst);
|
||||
LLVisualEffect* getEffect(const LLUUID& idEffect) const;
|
||||
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);
|
||||
LLVisualEffect* getEffect(EVisualEffect eCode, const LLUUID& idEffect) const;
|
||||
template<typename T> T* getEffect(const LLUUID& idEffect) const { return dynamic_cast<T*>(getEffect(T::EffectCode, idEffect)); }
|
||||
bool hasEffect(EVisualEffect eCode) const;
|
||||
bool removeEffect(EVisualEffect eCode, const LLUUID& idEffect);
|
||||
template<typename T> bool removeEffect(const LLUUID& idEffect) { return removeEffect(T::EffectCode, idEffect); }
|
||||
void runEffect(EVisualEffect eCode, LLVisualEffectParams* pParams = nullptr);
|
||||
void runEffect(EVisualEffectType eType, LLVisualEffectParams* pParams = nullptr);
|
||||
protected:
|
||||
|
|
@ -177,3 +176,12 @@ protected:
|
|||
};
|
||||
|
||||
// ============================================================================
|
||||
// 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; });
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
|
|
|||
Loading…
Reference in New Issue