void EffectManager::update(float dt, Ogre::Camera* camera) { for (std::vector<std::pair<Ogre::SceneNode*, NifOgre::ObjectScenePtr> >::iterator it = mEffects.begin(); it != mEffects.end(); ) { NifOgre::ObjectScenePtr objects = it->second; for(size_t i = 0; i < objects->mControllers.size() ;i++) { EffectAnimationTime* value = dynamic_cast<EffectAnimationTime*>(objects->mControllers[i].getSource().get()); if (value) value->addTime(dt); objects->mControllers[i].update(); } objects->rotateBillboardNodes(camera); // Finished playing? if (objects->mControllers[0].getSource()->getValue() >= objects->mMaxControllerLength) { Ogre::SceneNode* node = it->first; it = mEffects.erase(it); mSceneMgr->destroySceneNode(node); continue; } ++it; } }
void Animation::preRender(Ogre::Camera *camera) { for (std::vector<EffectParams>::iterator it = mEffects.begin(); it != mEffects.end(); ++it) { NifOgre::ObjectScenePtr objects = it->mObjects; objects->rotateBillboardNodes(camera); } mObjectRoot->rotateBillboardNodes(camera); }