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::updateEffects(float duration) { for (std::vector<EffectParams>::iterator it = mEffects.begin(); it != mEffects.end(); ) { NifOgre::ObjectScenePtr objects = it->mObjects; for(size_t i = 0; i < objects->mControllers.size() ;i++) { EffectAnimationTime* value = dynamic_cast<EffectAnimationTime*>(objects->mControllers[i].getSource().get()); if (value) value->addTime(duration); objects->mControllers[i].update(); } if (objects->mControllers[0].getSource()->getValue() >= objects->mMaxControllerLength) { if (it->mLoop) { // Start from the beginning again; carry over the remainder float remainder = objects->mControllers[0].getSource()->getValue() - objects->mMaxControllerLength; for(size_t i = 0; i < objects->mControllers.size() ;i++) { EffectAnimationTime* value = dynamic_cast<EffectAnimationTime*>(objects->mControllers[i].getSource().get()); if (value) value->resetTime(remainder); } } else { it = mEffects.erase(it); continue; } } ++it; } }