Exemple #1
0
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;
    }
}
Exemple #2
0
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;
    }
}