Merge remote-tracking branch 'lgro/issue417_apply_weather_instantly_when_teleporting'

This commit is contained in:
Marc Zinnschlag 2014-01-01 19:47:11 +01:00
commit 1f4c192bf6

View file

@ -324,6 +324,17 @@ void WeatherManager::update(float duration)
mWeatherUpdateTime -= timePassed; mWeatherUpdateTime -= timePassed;
MWBase::World* world = MWBase::Environment::get().getWorld();
const bool exterior = (world->isCellExterior() || world->isCellQuasiExterior());
if (!exterior)
{
mRendering->sunDisable(false);
mRendering->skyDisable();
mRendering->getSkyManager()->setLightningStrength(0.f);
stopSounds(true);
return;
}
switchToNextWeather(false); switchToNextWeather(false);
if (mNextWeather != "") if (mNextWeather != "")
@ -683,41 +694,33 @@ bool WeatherManager::isDark() const
void WeatherManager::switchToNextWeather(bool instantly) void WeatherManager::switchToNextWeather(bool instantly)
{ {
MWBase::World* world = MWBase::Environment::get().getWorld(); MWBase::World* world = MWBase::Environment::get().getWorld();
const bool exterior = (world->isCellExterior() || world->isCellQuasiExterior()); if (world->isCellExterior() || world->isCellQuasiExterior())
if (!exterior)
{ {
mRendering->sunDisable(false); std::string regionstr = Misc::StringUtils::lowerCase(world->getPlayer().getPlayer().getCell()->mCell->mRegion);
mRendering->skyDisable();
mRendering->getSkyManager()->setLightningStrength(0.f);
stopSounds(true);
return;
}
// Exterior if (mWeatherUpdateTime <= 0 || regionstr != mCurrentRegion)
std::string regionstr = Misc::StringUtils::lowerCase(world->getPlayer().getPlayer().getCell()->mCell->mRegion);
if (mWeatherUpdateTime <= 0 || regionstr != mCurrentRegion)
{
mCurrentRegion = regionstr;
mWeatherUpdateTime = mHoursBetweenWeatherChanges * 3600;
std::string weatherType = "clear";
if (mRegionOverrides.find(regionstr) != mRegionOverrides.end())
{ {
weatherType = mRegionOverrides[regionstr]; mCurrentRegion = regionstr;
} mWeatherUpdateTime = mHoursBetweenWeatherChanges * 3600;
else
{
// get weather probabilities for the current region
const ESM::Region *region = world->getStore().get<ESM::Region>().search (regionstr);
if (region != 0) std::string weatherType = "clear";
if (mRegionOverrides.find(regionstr) != mRegionOverrides.end())
{ {
weatherType = nextWeather(region); weatherType = mRegionOverrides[regionstr];
} }
} else
{
// get weather probabilities for the current region
const ESM::Region *region = world->getStore().get<ESM::Region>().search (regionstr);
setWeather(weatherType, instantly); if (region != 0)
{
weatherType = nextWeather(region);
}
}
setWeather(weatherType, instantly);
}
} }
} }