void MovieClip::gotoFrame(int frame) { std::map<int, std::vector<Frame*> >::iterator iter; for (iter = activeFrames_.begin(); iter != activeFrames_.end(); ++iter) { const std::vector<Frame*>& frames = iter->second; for (std::size_t i = 0; i < frames.size(); ++i) removeChild2(frames[i]->sprite); } activeFrames_.clear(); frame_ = frame; for (std::size_t i = 0; i < frames_.size(); ++i) { int start = frames_[i].start; int end = frames_[i].end; if (start <= frame_ && frame_ <= end) { activeFrames_[end].push_back(&frames_[i]); addChild2(frames_[i].sprite); } } interpolateParameters(); }
bool Particle::update(float deltaTime) { const Model* model = group->getModel(); data->age += deltaTime; if (!model->immortal) { // computes the ratio between the life of the particle and its lifetime float ratio = std::min(1.0f,deltaTime / data->life); data->life -= deltaTime; // updates mutable parameters for (size_t i = 0; i < model->nbMutableParams; ++i) { size_t index = model->mutableParams[i]; size_t enableIndex = model->particleEnableIndices[index]; currentParams[enableIndex] += (extendedParams[i] - currentParams[enableIndex]) * ratio; } } // updates interpolated parameters interpolateParameters(); // updates position oldPosition() = position(); position() += velocity() * deltaTime; // updates velocity velocity() += group->getGravity() * deltaTime; std::vector<Modifier*>::const_iterator end = group->activeModifiers.end(); for (std::vector<Modifier*>::const_iterator it = group->activeModifiers.begin(); it != end; ++it) (*it)->process(*this,deltaTime); if (group->getFriction() != 0.0f) velocity() *= 1.0f - std::min(1.0f,group->getFriction() * deltaTime / getParamCurrentValue(PARAM_MASS)); return data->life <= 0.0f; }
void MovieClip::oneFrame() { if (!playing_) { return; } if (passoneframe_ == true) { passoneframe_ = false; return; } std::map<int, int>::iterator iter2 = actions_.find(frame_); if (iter2 != actions_.end()) { if (iter2->second == -1) { stop(); CompleteEvent event(CompleteEvent::COMPLETE); dispatchEvent(&event); } else gotoFrame(iter2->second); return; } if (frame_ == maxframe_) { stop(); CompleteEvent event(CompleteEvent::COMPLETE); dispatchEvent(&event); return; } std::map<int, std::vector<Frame*> >::iterator iter; iter = activeFrames_.find(frame_); if (iter != activeFrames_.end()) { const std::vector<Frame*>& frames = iter->second; for (std::size_t i = 0; i < frames.size(); ++i) removeChild2(frames[i]->sprite); activeFrames_.erase(iter); } frame_ = frame_ + 1; iter = allFrames_.find(frame_); if (iter != allFrames_.end()) { const std::vector<Frame*>& frames = iter->second; for (std::size_t i = 0; i < frames.size(); ++i) { activeFrames_[frames[i]->end].push_back(frames[i]); addChild2(frames[i]->sprite); } } interpolateParameters(); }