36 const int DustPool::MAX_DUSTS;
39 DustPool::DustPool(Ogre::SceneManager* sm,
const char* dname,
int dsize):
41 size(std::min(dsize, static_cast<int>(MAX_DUSTS))),
46 for (
int i = 0; i <
size; i++)
49 sprintf(dename,
"Dust %s %i", dname, i);
51 pss[i] = sm->createParticleSystem(dename, dname);
54 sns[i]->attachObject(
pss[i]);
55 pss[i]->setCastShadows(
false);
57 if (
pss[i]->getNumEmitters() > 0)
59 pss[i]->getEmitter(0)->setEnabled(
false);
72 for (
int i = 0; i <
size; i++)
74 sns[i]->removeAndDestroyAllChildren();
75 sm->destroySceneNode(
sns[i]);
80 sm->destroyParticleSystem(
pss[i]);
90 for (
int i = 0; i <
size; i++)
92 pss[i]->setVisible(s);
137 if (vel.length() < 0.1)
200 ParticleEmitter* emit =
pss[i]->getEmitter(0);
202 Real vel = ndir.length();
209 emit->setEnabled(
true);
213 emit->setDirection(ndir);
214 emit->setParticleVelocity(vel);
224 emit->setTimeToLive(vel * 0.05 / 0.1);
239 col.a = sqrt(vel) * 0.1;
244 emit->setTimeToLive(vel * 0.025 / 0.1);
252 emit->setParticleVelocity(vel / 2.0);
254 col.a =
rates[i] * 0.03;
259 emit->setTimeToLive(
rates[i] * 0.03 / 0.1);
263 emit->setEmissionRate(
rates[i]);
268 ndir.y = -ndir.y / 2.0;
270 emit->setDirection(ndir);
272 col.a = sqrt(vel) * 0.04;
277 emit->setTimeToLive(vel * 0.025 / 0.1);
289 emit->setTimeToLive(vel * 0.04 / 0.1);
292 emit->setColour(col);
296 pss[i]->getEmitter(0)->setEnabled(
false);