Cap the rain emitter's frame time (Fixes #4314)

0.6.3
scrawl 7 years ago
parent f28024b541
commit 899d464b0d
No known key found for this signature in database
GPG Key ID: 2E6CC3676024C402

@ -1203,6 +1203,18 @@ void SkyManager::create()
mCreated = true;
}
class RainCounter : public osgParticle::ConstantRateCounter
{
public:
virtual int numParticlesToCreate(double dt) const
{
// limit dt to avoid large particle emissions if there are jumps in the simulation time
// 0.2 seconds is the same cap as used in Engine's frame loop
dt = std::min(dt, 0.2);
return ConstantRateCounter::numParticlesToCreate(dt);
}
};
class RainShooter : public osgParticle::Shooter
{
public:
@ -1473,7 +1485,7 @@ void SkyManager::createRain()
placer->setZRange(300, 300);
emitter->setPlacer(placer);
osg::ref_ptr<osgParticle::ConstantRateCounter> counter (new osgParticle::ConstantRateCounter);
osg::ref_ptr<RainCounter> counter (new RainCounter);
counter->setNumberOfParticlesPerSecondToCreate(600.0);
emitter->setCounter(counter);

Loading…
Cancel
Save