fix rain delay when exiting water

When the particle system updates its internal state noting that it's
been culled, it stops emitting any further particles. Prevent it from
having that knowledge.

v2: Fix off-by-one-frame error following review by @AnyOldName3
pull/2020/head
Stanislaw Halik 6 years ago
parent c114e1278e
commit 8fd71fe4ad

@ -1,6 +1,7 @@
0.46.0
------
Bug #4540: Rain delay when exiting water
Feature #2229: Improve pathfinding AI
Feature #3442: Default values for fallbacks from ini file
Task #4686: Upgrade media decoder to a more current FFmpeg API

@ -401,11 +401,15 @@ public:
{
}
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
bool isUnderwater()
{
osg::Vec3f eyePoint = mCameraRelativeTransform->getLastEyePoint();
return mEnabled && eyePoint.z() < mWaterLevel;
}
if (mEnabled && eyePoint.z() < mWaterLevel)
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
{
if (isUnderwater())
return;
traverse(node, nv);
@ -1575,6 +1579,8 @@ void SkyManager::update(float duration)
mRainIntensityUniform->set((float) mWeatherAlpha);
}
switchUnderwaterRain();
if (mIsStorm)
{
osg::Quat quat;
@ -1626,6 +1632,15 @@ void SkyManager::updateRainParameters()
}
}
void SkyManager::switchUnderwaterRain()
{
if (!mRainParticleSystem)
return;
bool freeze = mUnderwaterSwitch->isUnderwater();
mRainParticleSystem->setFrozen(freeze);
}
void SkyManager::setWeather(const WeatherResult& weather)
{
if (!mCreated) return;

@ -180,6 +180,7 @@ namespace MWRender
void createRain();
void destroyRain();
void switchUnderwaterRain();
void updateRainParameters();
Resource::SceneManager* mSceneManager;

Loading…
Cancel
Save