From 4d74f8137cc5876f5819151592db367c6817c2d4 Mon Sep 17 00:00:00 2001 From: Matt <3397065-ZehMatt@users.noreply.gitlab.com> Date: Thu, 9 Jun 2022 20:43:53 +0000 Subject: [PATCH] Use vector for EffectManager effects --- apps/openmw/mwrender/effectmanager.cpp | 33 ++++++++++++++------------ apps/openmw/mwrender/effectmanager.hpp | 10 ++++---- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/apps/openmw/mwrender/effectmanager.cpp b/apps/openmw/mwrender/effectmanager.cpp index d5d01a5e41..5513765dcd 100644 --- a/apps/openmw/mwrender/effectmanager.cpp +++ b/apps/openmw/mwrender/effectmanager.cpp @@ -11,6 +11,8 @@ #include "vismask.hpp" #include "util.hpp" +#include + namespace MWRender { @@ -43,6 +45,8 @@ void EffectManager::addEffect(const std::string &model, const std::string& textu trans->setScale(osg::Vec3f(scale, scale, scale)); trans->addChild(node); + effect.mTransform = trans; + SceneUtil::AssignControllerSourcesVisitor assignVisitor(effect.mAnimTime); node->accept(assignVisitor); @@ -53,30 +57,29 @@ void EffectManager::addEffect(const std::string &model, const std::string& textu mParentNode->addChild(trans); - mEffects[trans] = effect; + mEffects.push_back(std::move(effect)); } void EffectManager::update(float dt) { - for (EffectMap::iterator it = mEffects.begin(); it != mEffects.end(); ) - { - it->second.mAnimTime->addTime(dt); - - if (it->second.mAnimTime->getTime() >= it->second.mMaxControllerLength) - { - mParentNode->removeChild(it->first); - mEffects.erase(it++); - } - else - ++it; - } + mEffects.erase( + std::remove_if( + mEffects.begin(), + mEffects.end(), + [dt](Effect& effect) + { + effect.mAnimTime->addTime(dt); + return effect.mAnimTime->getTime() >= effect.mMaxControllerLength; + }), + mEffects.end() + ); } void EffectManager::clear() { - for (EffectMap::iterator it = mEffects.begin(); it != mEffects.end(); ++it) + for(const auto& effect : mEffects) { - mParentNode->removeChild(it->first); + mParentNode->removeChild(effect.mTransform); } mEffects.clear(); } diff --git a/apps/openmw/mwrender/effectmanager.hpp b/apps/openmw/mwrender/effectmanager.hpp index 5873c00dd8..0d94a63c8f 100644 --- a/apps/openmw/mwrender/effectmanager.hpp +++ b/apps/openmw/mwrender/effectmanager.hpp @@ -1,9 +1,9 @@ #ifndef OPENMW_MWRENDER_EFFECTMANAGER_H #define OPENMW_MWRENDER_EFFECTMANAGER_H -#include #include #include +#include #include @@ -29,6 +29,7 @@ namespace MWRender { public: EffectManager(osg::ref_ptr parent, Resource::ResourceSystem* resourceSystem); + EffectManager(const EffectManager&) = delete; ~EffectManager(); /// Add an effect. When it's finished playing, it will be removed automatically. @@ -44,16 +45,13 @@ namespace MWRender { float mMaxControllerLength; std::shared_ptr mAnimTime; + osg::ref_ptr mTransform; }; - typedef std::map, Effect> EffectMap; - EffectMap mEffects; + std::vector mEffects; osg::ref_ptr mParentNode; Resource::ResourceSystem* mResourceSystem; - - EffectManager(const EffectManager&); - void operator=(const EffectManager&); }; }