void particle_controller::DestroyFirstParticleAtMouse()
{
	for (int i = maxParticles - 1; i >= 0; i--) {
		if (!spaces[i]) {
			if (particles[i]->OnClick(mouseX, mouseY)){
				DeleteParticle(i);
				break;
			}
		}
	}
}
void LocalizationManager::update(double deltaX, double deltaY, double deltaYaw)
{
	double maxBelief = 0;
	Particle* bestParticle = NULL;
	vector<int> parIndexToDelete;

	for (int currParticle = 0; currParticle < _particles_count; currParticle++)
	{
		_particles[currParticle]->update(deltaX, deltaY, deltaYaw, _rob, _map);
		double particleBelief = _particles[currParticle]->getBelief();

		if (particleBelief < MIN_BELIEF)
		{
			parIndexToDelete.push_back(particleBelief);
			//DeleteParticle(currParticle);
		}
		else
		{
			if (maxBelief < particleBelief)
			{
				maxBelief = particleBelief;
				bestParticle = _particles[currParticle];
			}
		}
	}

	for (int i=0; i< parIndexToDelete.size(); i++)
	{
		DeleteParticle(parIndexToDelete[i]);
	}

	if (_particles_count == 0)
	{
		bestParticle = new Particle(_rob->GetXPos(), _rob->GetYPos(), _rob->GetYaw(), 1);
	}

	this->CreateParticle(bestParticle);
	while(_particles_count < PARTICLES_MIN)
	{
		this->CreateParticle(bestParticle);
	}

}
Exemple #3
0
//++++++++++++++++++++++++++++++++++++++++++++++++
//更新
//--in--------------------------------------------
//
//--out-------------------------------------------
//
//++++++++++++++++++++++++++++++++++++++++++++++++
void EMITTER::UpDate()
{

	if(m_LifeTime > 0)
		CreatePrticle();

	for(int i = 0; i < MAX_PARTICLE; i++)
	{
		if(!m_Particle[i].m_Live)
			continue;
		m_Particle[i].UpDate();

		if(!m_Particle[i].m_Live)
			DeleteParticle(&m_Particle[i]);
	}

	if(m_ParticleCount <= 0)
	{
		m_Enable = false;
		Init();
	}

	m_LifeTime--;
}
void particle_controller::DeleteParticles()
{
	for (int i = 0; i < maxParticles; i++) {
		DeleteParticle(i);
	}
}