#ifndef OPENMW_MWRENDER_SKY_H #define OPENMW_MWRENDER_SKY_H #include #include "../mwworld/weather.hpp" namespace osg { class Group; class Node; class Material; } namespace Resource { class SceneManager; } namespace MWRender { class AtmosphereUpdater; class CloudUpdater; class Sun; class Moon; class SkyManager { public: SkyManager(osg::Group* parentNode, Resource::SceneManager* sceneManager); ~SkyManager(); void update(float duration); void setEnabled(bool enabled); void setHour (double hour); ///< will be called even when sky is disabled. void setDate (int day, int month); ///< will be called even when sky is disabled. int getMasserPhase() const; ///< 0 new moon, 1 waxing or waning cresecent, 2 waxing or waning half, /// 3 waxing or waning gibbous, 4 full moon int getSecundaPhase() const; ///< 0 new moon, 1 waxing or waning cresecent, 2 waxing or waning half, /// 3 waxing or waning gibbous, 4 full moon void setMoonColour (bool red); ///< change Secunda colour to red void setWeather(const MWWorld::WeatherResult& weather); void sunEnable(); void sunDisable(); void setRainSpeed(float speed); void setStormDirection(const osg::Vec3f& direction); void setSunDirection(const osg::Vec3f& direction); void setMasserDirection(const osg::Vec3f& direction); void setSecundaDirection(const osg::Vec3f& direction); void setMasserFade(const float fade); void setSecundaFade(const float fade); void masserEnable(); void masserDisable(); void secundaEnable(); void secundaDisable(); void setLightningStrength(const float factor); void setGlare(const float glare); void setGlareEnabled(bool enabled); private: void create(); ///< no need to call this, automatically done on first enable() void updateRain(float dt); void clearRain(); Resource::SceneManager* mSceneManager; osg::ref_ptr mRootNode; osg::ref_ptr mParticleEffect; osg::ref_ptr mCloudNode; osg::ref_ptr mCloudUpdater; osg::ref_ptr mAtmosphereDay; osg::ref_ptr mAtmosphereNight; osg::ref_ptr mAtmosphereUpdater; std::auto_ptr mSun; std::auto_ptr mMasser; std::auto_ptr mSecunda; bool mCreated; bool mMoonRed; bool mIsStorm; float mHour; int mDay; int mMonth; float mCloudAnimationTimer; float mRainTimer; osg::Vec3f mStormDirection; // remember some settings so we don't have to apply them again if they didnt change std::string mClouds; std::string mNextClouds; float mCloudBlendFactor; float mCloudOpacity; float mCloudSpeed; float mStarsOpacity; osg::Vec4f mCloudColour; osg::Vec4f mSkyColour; osg::Vec4f mFogColour; std::string mCurrentParticleEffect; float mRemainingTransitionTime; float mGlare; // target float mGlareFade; // actual bool mRainEnabled; std::string mRainEffect; float mRainSpeed; float mRainFrequency; bool mEnabled; bool mSunEnabled; bool mMasserEnabled; bool mSecundaEnabled; }; } #endif // GAME_RENDER_SKY_H