Merge remote-tracking branch 'internecine/master'

deque
Marc Zinnschlag 10 years ago
commit 528dcf761d

@ -348,7 +348,7 @@ void WeatherManager::transition(float factor)
mResult.mRainFrequency = current.mRainFrequency; mResult.mRainFrequency = current.mRainFrequency;
} }
void WeatherManager::update(float duration) void WeatherManager::update(float duration, bool paused)
{ {
float timePassed = mTimePassed; float timePassed = mTimePassed;
mTimePassed = 0; mTimePassed = 0;
@ -483,52 +483,56 @@ void WeatherManager::update(float duration)
mRendering->getSkyManager()->secundaDisable(); mRendering->getSkyManager()->secundaDisable();
} }
if (mCurrentWeather == "thunderstorm" && mNextWeather == "") if (!paused)
{ {
if (mThunderFlash > 0) if (mCurrentWeather == "thunderstorm" && mNextWeather == "")
{ {
// play the sound after a delay
mThunderSoundDelay -= duration;
if (mThunderSoundDelay <= 0)
{
// pick a random sound
int sound = rand() % 4;
std::string* soundName = NULL;
if (sound == 0) soundName = &mThunderSoundID0;
else if (sound == 1) soundName = &mThunderSoundID1;
else if (sound == 2) soundName = &mThunderSoundID2;
else if (sound == 3) soundName = &mThunderSoundID3;
if (soundName)
MWBase::Environment::get().getSoundManager()->playSound(*soundName, 1.0, 1.0);
mThunderSoundDelay = 1000;
}
mThunderFlash -= duration;
if (mThunderFlash > 0) if (mThunderFlash > 0)
mRendering->getSkyManager()->setLightningStrength( mThunderFlash / mThunderThreshold );
else
{ {
mThunderChanceNeeded = rand() % 100; // play the sound after a delay
mThunderChance = 0; mThunderSoundDelay -= duration;
mRendering->getSkyManager()->setLightningStrength( 0.f ); if (mThunderSoundDelay <= 0)
{
// pick a random sound
int sound = rand() % 4;
std::string* soundName = NULL;
if (sound == 0) soundName = &mThunderSoundID0;
else if (sound == 1) soundName = &mThunderSoundID1;
else if (sound == 2) soundName = &mThunderSoundID2;
else if (sound == 3) soundName = &mThunderSoundID3;
if (soundName)
MWBase::Environment::get().getSoundManager()->playSound(*soundName, 1.0, 1.0);
mThunderSoundDelay = 1000;
}
mThunderFlash -= duration;
if (mThunderFlash > 0)
mRendering->getSkyManager()->setLightningStrength( mThunderFlash / mThunderThreshold );
else
{
mThunderChanceNeeded = rand() % 100;
mThunderChance = 0;
mRendering->getSkyManager()->setLightningStrength( 0.f );
}
} }
} else
else
{
// no thunder active
mThunderChance += duration*4; // chance increases by 4 percent every second
if (mThunderChance >= mThunderChanceNeeded)
{ {
mThunderFlash = mThunderThreshold; // no thunder active
mThunderChance += duration*4; // chance increases by 4 percent every second
if (mThunderChance >= mThunderChanceNeeded)
{
mThunderFlash = mThunderThreshold;
mRendering->getSkyManager()->setLightningStrength( mThunderFlash / mThunderThreshold ); mRendering->getSkyManager()->setLightningStrength( mThunderFlash / mThunderThreshold );
mThunderSoundDelay = 0.25; mThunderSoundDelay = 0.25;
}
} }
} }
else
mRendering->getSkyManager()->setLightningStrength(0.f);
} }
else
mRendering->getSkyManager()->setLightningStrength(0.f);
mRendering->setAmbientColour(mResult.mAmbientColor); mRendering->setAmbientColour(mResult.mAmbientColor);
mRendering->sunEnable(false); mRendering->sunEnable(false);

@ -169,8 +169,9 @@ namespace MWWorld
/** /**
* Per-frame update * Per-frame update
* @param duration * @param duration
* @param paused
*/ */
void update(float duration); void update(float duration, bool paused = false);
void stopSounds(bool stopAll); void stopSounds(bool stopAll);

@ -1489,7 +1489,7 @@ namespace MWWorld
if (mGoToJail && !paused) if (mGoToJail && !paused)
goToJail(); goToJail();
updateWeather(duration); updateWeather(duration, paused);
if (!paused) if (!paused)
doPhysics (duration); doPhysics (duration);
@ -2665,16 +2665,16 @@ namespace MWWorld
MWWorld::ActionTeleport action("", closestMarker.getRefData().getPosition()); MWWorld::ActionTeleport action("", closestMarker.getRefData().getPosition());
action.execute(ptr); action.execute(ptr);
} }
void World::updateWeather(float duration) void World::updateWeather(float duration, bool paused)
{ {
if (mPlayer->wasTeleported()) if (mPlayer->wasTeleported())
{ {
mPlayer->setTeleported(false); mPlayer->setTeleported(false);
mWeatherManager->switchToNextWeather(true); mWeatherManager->switchToNextWeather(true);
} }
mWeatherManager->update(duration); mWeatherManager->update(duration, paused);
} }
struct AddDetectedReference struct AddDetectedReference

@ -99,7 +99,7 @@ namespace MWWorld
std::string mStartCell; std::string mStartCell;
void updateWeather(float duration); void updateWeather(float duration, bool paused = false);
int getDaysPerMonth (int month) const; int getDaysPerMonth (int month) const;
void rotateObjectImp (const Ptr& ptr, Ogre::Vector3 rot, bool adjust); void rotateObjectImp (const Ptr& ptr, Ogre::Vector3 rot, bool adjust);

Loading…
Cancel
Save