diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index d1811ed67d..c8080cf166 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -118,6 +118,7 @@ namespace MWRender : mViewer(viewer) , mRootNode(rootNode) , mResourceSystem(resourceSystem) + , mNightEyeFactor(0.f) { osg::ref_ptr 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); diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 8ed590df49..a37203cc22 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -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 mViewer; @@ -175,6 +178,9 @@ namespace MWRender osg::Vec4f mFogColor; + osg::Vec4f mAmbientColor; + float mNightEyeFactor; + float mNearClip; float mViewDistance; float mFieldOfView; diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index 7b4c33fd87..16dcadb231 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -1608,6 +1608,8 @@ namespace MWWorld int blind = static_cast(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(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())