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; 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 class RainShooter : public osgParticle::Shooter
{ {
public: public:
@ -1473,7 +1485,7 @@ void SkyManager::createRain()
placer->setZRange(300, 300); placer->setZRange(300, 300);
emitter->setPlacer(placer); emitter->setPlacer(placer);
osg::ref_ptr<osgParticle::ConstantRateCounter> counter (new osgParticle::ConstantRateCounter); osg::ref_ptr<RainCounter> counter (new RainCounter);
counter->setNumberOfParticlesPerSecondToCreate(600.0); counter->setNumberOfParticlesPerSecondToCreate(600.0);
emitter->setCounter(counter); emitter->setCounter(counter);

Loading…
Cancel
Save