Мне нужно выбрать контейнер для хранения указателей на определенный мной тип ( Частица
). Я использую предварительно выделенный объект Particle Object Pool
(который содержит объекты, предварительно выделенные в std :: vector).
Мои эмиттеры частиц запрашивают частицы у Particle Pool, когда им нужно испускать, (чтобы избежать распределения частиц в игре). Когда срок действия частицы истекает, она возвращается в пул объектов частиц.
Как вы можете видеть, когда я просматриваю свой эталонный контейнер частиц (нужно выбрать один), чтобы обновить его, мне нужно будет проверить, какие частицы имеют expired ( life <= 0.0
) и вернуть их обратно в пул частиц, просроченные частицы могут находиться в любом месте контейнера.
Я думал об использовании std :: list
, вот почему:
Список (AFAIK) обеспечивает постоянную вставку времени в начале и постоянное удаление времени в любой момент (при условии, что вы выполнили итерацию до этой точки).
Любые предложения или улучшения моей системы, чтобы лучше разместить ваш контейнер предложения приветствуются.
РЕДАКТИРОВАТЬ :
Чтобы объяснить себя немного лучше:
Время жизни частиц в эмиттере не точно такое же, оно зависит от диапазон, например 5,0 секунд + - (от 0,0 до 0,5). Это сделано для того, чтобы дать частицам элемент случайности, и выглядит лучше, чем все в фиксированное время.
Псевдокод алгоритма:
// Assume typedef std::container_type<Particle *> ParticleContainer
void update(float delta)
{
ParticleContainer::iterator particle = m_particles.begin();
for(; particle != m_particles.end(); ++particle)
{
updateParticle(*particle, delta); //Update the particle
if ( (*particle)->lifeTime <= 0.0 )
{
ParticlePool.markAsFree(*particle); //Mark Particle as free in the object Pool
m_particles.remove(*particle); //Remove the Particle from my own ParticleContainer
}
}
}