From 782e851eb11972decc1af212baecf84378f772b1 Mon Sep 17 00:00:00 2001 From: Internecine Date: Thu, 9 Oct 2014 19:41:51 +1300 Subject: [PATCH] Better fix, now allows for teleporting to change weather while still paused. --- apps/openmw/mwworld/weather.cpp | 7 ++++++- apps/openmw/mwworld/weather.hpp | 1 + apps/openmw/mwworld/worldimp.cpp | 14 +++++++++----- apps/openmw/mwworld/worldimp.hpp | 1 + 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwworld/weather.cpp b/apps/openmw/mwworld/weather.cpp index 525352e7f6..6eb21e255d 100644 --- a/apps/openmw/mwworld/weather.cpp +++ b/apps/openmw/mwworld/weather.cpp @@ -349,6 +349,11 @@ void WeatherManager::transition(float factor) } void WeatherManager::update(float duration) +{ + this->update(duration, false); +} + +void WeatherManager::update(float duration, bool paused) { float timePassed = mTimePassed; mTimePassed = 0; @@ -483,7 +488,7 @@ void WeatherManager::update(float duration) mRendering->getSkyManager()->secundaDisable(); } - if (mCurrentWeather == "thunderstorm" && mNextWeather == "") + if (mCurrentWeather == "thunderstorm" && mNextWeather == "" && !paused) { if (mThunderFlash > 0) { diff --git a/apps/openmw/mwworld/weather.hpp b/apps/openmw/mwworld/weather.hpp index 292d06747f..05b4439d49 100644 --- a/apps/openmw/mwworld/weather.hpp +++ b/apps/openmw/mwworld/weather.hpp @@ -171,6 +171,7 @@ namespace MWWorld * @param duration */ void update(float duration); + void update(float duration, bool paused); void stopSounds(bool stopAll); diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index 3015746eaf..88c203d6f3 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -1489,12 +1489,10 @@ namespace MWWorld if (mGoToJail && !paused) goToJail(); + updateWeather(duration, paused); if (!paused) - { - updateWeather(duration); doPhysics (duration); - } mWorldScene->update (duration, paused); @@ -2638,14 +2636,20 @@ namespace MWWorld } void World::updateWeather(float duration) + { + // Implement original behavior: + this->updateWeather(duration, false); + } + + void World::updateWeather(float duration, bool paused) { if (mPlayer->wasTeleported()) { mPlayer->setTeleported(false); mWeatherManager->switchToNextWeather(true); } - - mWeatherManager->update(duration); + + mWeatherManager->update(duration, paused); } struct AddDetectedReference diff --git a/apps/openmw/mwworld/worldimp.hpp b/apps/openmw/mwworld/worldimp.hpp index 1a25edbe5b..71afad37fa 100644 --- a/apps/openmw/mwworld/worldimp.hpp +++ b/apps/openmw/mwworld/worldimp.hpp @@ -100,6 +100,7 @@ namespace MWWorld std::string mStartCell; void updateWeather(float duration); + void updateWeather(float duration, bool paused); int getDaysPerMonth (int month) const; void rotateObjectImp (const Ptr& ptr, Ogre::Vector3 rot, bool adjust);