WeatherResult added as member variable.

actorid
Miroslav Puda 12 years ago
parent f01aa8f55e
commit 8a45686e0a

@ -224,32 +224,31 @@ void WeatherManager::setWeather(Weather::Type weatherType, bool instant)
mFirstUpdate = false;
}
WeatherResult WeatherManager::getResult(Weather::Type weatherType)
void WeatherManager::setResult(Weather::Type weatherType)
{
const Weather& current = mWeatherSettings[weatherType];
WeatherResult result;
result.mCloudTexture = current.mCloudTexture;
result.mCloudBlendFactor = 0;
result.mCloudOpacity = current.mCloudsMaximumPercent;
result.mWindSpeed = current.mWindSpeed;
result.mCloudSpeed = current.mCloudSpeed;
result.mGlareView = current.mGlareView;
result.mAmbientLoopSoundID = current.mAmbientLoopSoundID;
result.mSunColor = current.mSunDiscSunsetColor;
mResult.mCloudTexture = current.mCloudTexture;
mResult.mCloudBlendFactor = 0;
mResult.mCloudOpacity = current.mCloudsMaximumPercent;
mResult.mWindSpeed = current.mWindSpeed;
mResult.mCloudSpeed = current.mCloudSpeed;
mResult.mGlareView = current.mGlareView;
mResult.mAmbientLoopSoundID = current.mAmbientLoopSoundID;
mResult.mSunColor = current.mSunDiscSunsetColor;
result.mNight = (mHour < mSunriseTime || mHour > mNightStart - 1);
mResult.mNight = (mHour < mSunriseTime || mHour > mNightStart - 1);
result.mFogDepth = result.mNight ? current.mLandFogNightDepth : current.mLandFogDayDepth;
mResult.mFogDepth = mResult.mNight ? current.mLandFogNightDepth : current.mLandFogDayDepth;
// night
if (mHour <= mNightEnd || mHour >= mNightStart + 1)
{
result.mFogColor = current.mFogNightColor;
result.mAmbientColor = current.mAmbientNightColor;
result.mSunColor = current.mSunNightColor;
result.mSkyColor = current.mSkyNightColor;
result.mNightFade = 1.f;
mResult.mFogColor = current.mFogNightColor;
mResult.mAmbientColor = current.mAmbientNightColor;
mResult.mSunColor = current.mSunNightColor;
mResult.mSkyColor = current.mSkyNightColor;
mResult.mNightFade = 1.f;
}
// sunrise
@ -260,31 +259,31 @@ WeatherResult WeatherManager::getResult(Weather::Type weatherType)
// fade in
float advance = mSunriseTime - mHour;
float factor = advance / 0.5f;
result.mFogColor = lerp(current.mFogSunriseColor, current.mFogNightColor, factor);
result.mAmbientColor = lerp(current.mAmbientSunriseColor, current.mAmbientNightColor, factor);
result.mSunColor = lerp(current.mSunSunriseColor, current.mSunNightColor, factor);
result.mSkyColor = lerp(current.mSkySunriseColor, current.mSkyNightColor, factor);
result.mNightFade = factor;
mResult.mFogColor = lerp(current.mFogSunriseColor, current.mFogNightColor, factor);
mResult.mAmbientColor = lerp(current.mAmbientSunriseColor, current.mAmbientNightColor, factor);
mResult.mSunColor = lerp(current.mSunSunriseColor, current.mSunNightColor, factor);
mResult.mSkyColor = lerp(current.mSkySunriseColor, current.mSkyNightColor, factor);
mResult.mNightFade = factor;
}
else //if (mHour >= 6)
{
// fade out
float advance = mHour - mSunriseTime;
float factor = advance / 3.f;
result.mFogColor = lerp(current.mFogSunriseColor, current.mFogDayColor, factor);
result.mAmbientColor = lerp(current.mAmbientSunriseColor, current.mAmbientDayColor, factor);
result.mSunColor = lerp(current.mSunSunriseColor, current.mSunDayColor, factor);
result.mSkyColor = lerp(current.mSkySunriseColor, current.mSkyDayColor, factor);
mResult.mFogColor = lerp(current.mFogSunriseColor, current.mFogDayColor, factor);
mResult.mAmbientColor = lerp(current.mAmbientSunriseColor, current.mAmbientDayColor, factor);
mResult.mSunColor = lerp(current.mSunSunriseColor, current.mSunDayColor, factor);
mResult.mSkyColor = lerp(current.mSkySunriseColor, current.mSkyDayColor, factor);
}
}
// day
else if (mHour >= mDayStart + 1 && mHour <= mDayEnd - 1)
{
result.mFogColor = current.mFogDayColor;
result.mAmbientColor = current.mAmbientDayColor;
result.mSunColor = current.mSunDayColor;
result.mSkyColor = current.mSkyDayColor;
mResult.mFogColor = current.mFogDayColor;
mResult.mAmbientColor = current.mAmbientDayColor;
mResult.mSunColor = current.mSunDayColor;
mResult.mSkyColor = current.mSkyDayColor;
}
// sunset
@ -295,54 +294,51 @@ WeatherResult WeatherManager::getResult(Weather::Type weatherType)
// fade in
float advance = (mDayEnd + 1) - mHour;
float factor = (advance / 2);
result.mFogColor = lerp(current.mFogSunsetColor, current.mFogDayColor, factor);
result.mAmbientColor = lerp(current.mAmbientSunsetColor, current.mAmbientDayColor, factor);
result.mSunColor = lerp(current.mSunSunsetColor, current.mSunDayColor, factor);
result.mSkyColor = lerp(current.mSkySunsetColor, current.mSkyDayColor, factor);
mResult.mFogColor = lerp(current.mFogSunsetColor, current.mFogDayColor, factor);
mResult.mAmbientColor = lerp(current.mAmbientSunsetColor, current.mAmbientDayColor, factor);
mResult.mSunColor = lerp(current.mSunSunsetColor, current.mSunDayColor, factor);
mResult.mSkyColor = lerp(current.mSkySunsetColor, current.mSkyDayColor, factor);
}
else //if (mHour >= 19)
{
// fade out
float advance = mHour - (mDayEnd + 1);
float factor = advance / 2.f;
result.mFogColor = lerp(current.mFogSunsetColor, current.mFogNightColor, factor);
result.mAmbientColor = lerp(current.mAmbientSunsetColor, current.mAmbientNightColor, factor);
result.mSunColor = lerp(current.mSunSunsetColor, current.mSunNightColor, factor);
result.mSkyColor = lerp(current.mSkySunsetColor, current.mSkyNightColor, factor);
result.mNightFade = factor;
mResult.mFogColor = lerp(current.mFogSunsetColor, current.mFogNightColor, factor);
mResult.mAmbientColor = lerp(current.mAmbientSunsetColor, current.mAmbientNightColor, factor);
mResult.mSunColor = lerp(current.mSunSunsetColor, current.mSunNightColor, factor);
mResult.mSkyColor = lerp(current.mSkySunsetColor, current.mSkyNightColor, factor);
mResult.mNightFade = factor;
}
}
return result;
}
WeatherResult WeatherManager::transition(float factor)
void WeatherManager::transition(float factor)
{
const WeatherResult& current = getResult(mCurrentWeather);
const WeatherResult& other = getResult(mNextWeather);
WeatherResult result;
result.mCloudTexture = current.mCloudTexture;
result.mNextCloudTexture = other.mCloudTexture;
result.mCloudBlendFactor = factor;
result.mCloudOpacity = lerp(current.mCloudOpacity, other.mCloudOpacity, factor);
result.mFogColor = lerp(current.mFogColor, other.mFogColor, factor);
result.mSunColor = lerp(current.mSunColor, other.mSunColor, factor);
result.mSkyColor = lerp(current.mSkyColor, other.mSkyColor, factor);
result.mAmbientColor = lerp(current.mAmbientColor, other.mAmbientColor, factor);
result.mSunDiscColor = lerp(current.mSunDiscColor, other.mSunDiscColor, factor);
result.mFogDepth = lerp(current.mFogDepth, other.mFogDepth, factor);
result.mWindSpeed = lerp(current.mWindSpeed, other.mWindSpeed, factor);
result.mCloudSpeed = lerp(current.mCloudSpeed, other.mCloudSpeed, factor);
result.mCloudOpacity = lerp(current.mCloudOpacity, other.mCloudOpacity, factor);
result.mGlareView = lerp(current.mGlareView, other.mGlareView, factor);
result.mNightFade = lerp(current.mNightFade, other.mNightFade, factor);
result.mNight = current.mNight;
return result;
setResult(mCurrentWeather);
const WeatherResult current = mResult;
setResult(mNextWeather);
const WeatherResult other = mResult;
mResult.mCloudTexture = current.mCloudTexture;
mResult.mNextCloudTexture = other.mCloudTexture;
mResult.mCloudBlendFactor = factor;
mResult.mCloudOpacity = lerp(current.mCloudOpacity, other.mCloudOpacity, factor);
mResult.mFogColor = lerp(current.mFogColor, other.mFogColor, factor);
mResult.mSunColor = lerp(current.mSunColor, other.mSunColor, factor);
mResult.mSkyColor = lerp(current.mSkyColor, other.mSkyColor, factor);
mResult.mAmbientColor = lerp(current.mAmbientColor, other.mAmbientColor, factor);
mResult.mSunDiscColor = lerp(current.mSunDiscColor, other.mSunDiscColor, factor);
mResult.mFogDepth = lerp(current.mFogDepth, other.mFogDepth, factor);
mResult.mWindSpeed = lerp(current.mWindSpeed, other.mWindSpeed, factor);
mResult.mCloudSpeed = lerp(current.mCloudSpeed, other.mCloudSpeed, factor);
mResult.mCloudOpacity = lerp(current.mCloudOpacity, other.mCloudOpacity, factor);
mResult.mGlareView = lerp(current.mGlareView, other.mGlareView, factor);
mResult.mNightFade = lerp(current.mNightFade, other.mNightFade, factor);
mResult.mNight = current.mNight;
}
void WeatherManager::update(float duration)
@ -411,8 +407,6 @@ void WeatherManager::update(float duration)
setWeather(weatherType, false);
}
WeatherResult result;
if (mNextWeather != Weather::Type_Unknown)
{
mRemainingTransitionTime -= timePassed;
@ -424,13 +418,13 @@ void WeatherManager::update(float duration)
}
if (mNextWeather != Weather::Type_Unknown)
result = transition(1 - (mRemainingTransitionTime / (mWeatherSettings[mCurrentWeather].mTransitionDelta * 24.f * 3600)));
transition(1 - (mRemainingTransitionTime / (mWeatherSettings[mCurrentWeather].mTransitionDelta * 24.f * 3600)));
else
result = getResult(mCurrentWeather);
setResult(mCurrentWeather);
mWindSpeed = result.mWindSpeed;
mWindSpeed = mResult.mWindSpeed;
mRendering->configureFog(result.mFogDepth, result.mFogColor);
mRendering->configureFog(mResult.mFogDepth, mResult.mFogColor);
// disable sun during night
if (mHour >= mNightStart || mHour <= mSunriseTime)
@ -562,11 +556,11 @@ void WeatherManager::update(float duration)
else
mRendering->getSkyManager()->setLightningStrength(0.f);
mRendering->setAmbientColour(result.mAmbientColor);
mRendering->setAmbientColour(mResult.mAmbientColor);
mRendering->sunEnable(false);
mRendering->setSunColour(result.mSunColor);
mRendering->setSunColour(mResult.mSunColor);
mRendering->getSkyManager()->setWeather(result);
mRendering->getSkyManager()->setWeather(mResult);
}
else
{

@ -188,13 +188,14 @@ namespace MWWorld
double mTimePassed; // time passed since last update
WeatherResult transition(const float factor);
WeatherResult getResult(Weather::Type weatherType);
void transition(const float factor);
void setResult(Weather::Type weatherType);
float calculateHourFade (const std::string& moonName) const;
float calculateAngleFade (const std::string& moonName, float angle) const;
void setWeather(Weather::Type weatherType, bool instant=false);
WeatherResult mResult;
float mSunriseTime;
float mSunsetTime;
float mSunriseDuration;

Loading…
Cancel
Save