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); } }
//++++++++++++++++++++++++++++++++++++++++++++++++ //更新 //--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); } }