void AnimationController::update(long elapsedTime) { if (_state != RUNNING) return; // Loop through running clips and call update() on them. std::list<AnimationClip*>::iterator clipIter = _runningClips.begin(); while (clipIter != _runningClips.end()) { AnimationClip* clip = (*clipIter); if (clip->isClipStateBitSet(AnimationClip::CLIP_IS_RESTARTED_BIT)) { // If the CLIP_IS_RESTARTED_BIT is set, we should end the clip and // move it from where it is in the running clips list to the back. clip->onEnd(); clip->setClipStateBit(AnimationClip::CLIP_IS_PLAYING_BIT); _runningClips.push_back(clip); clipIter = _runningClips.erase(clipIter); } else if (clip->update(elapsedTime)) { SAFE_RELEASE(clip); clipIter = _runningClips.erase(clipIter); } else { clipIter++; } } if (_runningClips.empty()) _state = IDLE; }
void AnimationController::update(float elapsedTime) { if (_state != RUNNING) return; Transform::suspendTransformChanged(); // Loop through running clips and call update() on them. std::list<AnimationClip*>::iterator clipIter = _runningClips.begin(); while (clipIter != _runningClips.end()) { AnimationClip* clip = (*clipIter); GP_ASSERT(clip); clip->addRef(); if (clip->isClipStateBitSet(AnimationClip::CLIP_IS_RESTARTED_BIT)) { // If the CLIP_IS_RESTARTED_BIT is set, we should end the clip and // move it from where it is in the running clips list to the back. clip->onEnd(); clip->setClipStateBit(AnimationClip::CLIP_IS_PLAYING_BIT); _runningClips.push_back(clip); clipIter = _runningClips.erase(clipIter); } else if (clip->update(elapsedTime)) { clip->release(); clipIter = _runningClips.erase(clipIter); } else { clipIter++; } clip->release(); } Transform::resumeTransformChanged(); if (_runningClips.empty()) _state = IDLE; }