1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-29 16:41:34 +00:00

Add night-eye effect

This commit is contained in:
scrawl 2015-06-11 23:16:05 +02:00
parent 712cef36b0
commit 76bdf7a5b7
3 changed files with 30 additions and 1 deletions

View file

@ -118,6 +118,7 @@ namespace MWRender
: mViewer(viewer)
, mRootNode(rootNode)
, mResourceSystem(resourceSystem)
, mNightEyeFactor(0.f)
{
osg::ref_ptr<SceneUtil::LightManager> lightRoot = new SceneUtil::LightManager;
mLightRoot = lightRoot;
@ -203,9 +204,19 @@ namespace MWRender
return mResourceSystem;
}
void RenderingManager::setNightEyeFactor(float factor)
{
if (factor != mNightEyeFactor)
{
mNightEyeFactor = factor;
updateAmbient();
}
}
void RenderingManager::setAmbientColour(const osg::Vec4f &colour)
{
mStateUpdater->setAmbientColor(colour);
mAmbientColor = colour;
updateAmbient();
}
void RenderingManager::configureAmbient(const ESM::Cell *cell)
@ -653,6 +664,16 @@ namespace MWRender
mViewer->startThreading();
}
void RenderingManager::updateAmbient()
{
osg::Vec4f color = mAmbientColor;
if (mNightEyeFactor > 0.f)
color += osg::Vec4f(0.7, 0.7, 0.7, 0.0) * mNightEyeFactor;
mStateUpdater->setAmbientColor(color);
}
void RenderingManager::setFogColor(const osg::Vec4f &color)
{
mViewer->getCamera()->setClearColor(color);

View file

@ -59,6 +59,8 @@ namespace MWRender
Resource::ResourceSystem* getResourceSystem();
void setNightEyeFactor(float factor);
void setAmbientColour(const osg::Vec4f& colour);
void setSunDirection(const osg::Vec3f& direction);
@ -152,6 +154,7 @@ namespace MWRender
private:
void updateProjectionMatrix();
void updateTextureFiltering();
void updateAmbient();
void setFogColor(const osg::Vec4f& color);
osg::ref_ptr<osgViewer::Viewer> mViewer;
@ -175,6 +178,9 @@ namespace MWRender
osg::Vec4f mFogColor;
osg::Vec4f mAmbientColor;
float mNightEyeFactor;
float mNearClip;
float mViewDistance;
float mFieldOfView;

View file

@ -1608,6 +1608,8 @@ namespace MWWorld
int blind = static_cast<int>(player.getClass().getCreatureStats(player).getMagicEffects().get(ESM::MagicEffect::Blind).getMagnitude());
MWBase::Environment::get().getWindowManager()->setBlindness(std::max(0, std::min(100, blind)));
int nightEye = static_cast<int>(player.getClass().getCreatureStats(player).getMagicEffects().get(ESM::MagicEffect::NightEye).getMagnitude());
mRendering->setNightEyeFactor(std::min(1.f, (nightEye/100.f)));
mRendering->getCamera()->setCameraDistance();
if(!mRendering->getCamera()->isFirstPerson())