Beispiel #1
0
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();
}
Beispiel #2
0
	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;
	}
Beispiel #3
0
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();
}