diff options
-rw-r--r-- | src/clouds.cpp | 25 | ||||
-rw-r--r-- | src/clouds.h | 3 |
2 files changed, 22 insertions, 6 deletions
diff --git a/src/clouds.cpp b/src/clouds.cpp index a42e588aa..e213d118f 100644 --- a/src/clouds.cpp +++ b/src/clouds.cpp @@ -30,6 +30,11 @@ class Clouds; Clouds *g_menuclouds = NULL; irr::scene::ISceneManager *g_menucloudsmgr = NULL; +static void cloud_3d_setting_changed(const std::string settingname, void *data) +{ + ((Clouds *)data)->readSettings(); +} + Clouds::Clouds( scene::ISceneNode* parent, scene::ISceneManager* mgr, @@ -52,12 +57,10 @@ Clouds::Clouds( //m_material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA; m_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - m_cloud_y = BS * (cloudheight ? cloudheight : - g_settings->getS16("cloud_height")); - - m_cloud_radius_i = g_settings->getU16("cloud_radius"); - - m_enable_3d = g_settings->getBool("enable_3d_clouds"); + m_passed_cloud_y = cloudheight; + readSettings(); + g_settings->registerChangedCallback("enable_3d_clouds", + &cloud_3d_setting_changed, this); m_box = core::aabbox3d<f32>(-BS*1000000,m_cloud_y-BS,-BS*1000000, BS*1000000,m_cloud_y+BS,BS*1000000); @@ -66,6 +69,8 @@ Clouds::Clouds( Clouds::~Clouds() { + g_settings->deregisterChangedCallback("enable_3d_clouds", + &cloud_3d_setting_changed, this); } void Clouds::OnRegisterSceneNode() @@ -351,3 +356,11 @@ void Clouds::update(v2f camera_p, video::SColorf color) //dstream<<"m_brightness="<<m_brightness<<std::endl; } +void Clouds::readSettings() +{ + m_cloud_y = BS * (m_passed_cloud_y ? m_passed_cloud_y : + g_settings->getS16("cloud_height")); + m_cloud_radius_i = g_settings->getU16("cloud_radius"); + m_enable_3d = g_settings->getBool("enable_3d_clouds"); +} + diff --git a/src/clouds.h b/src/clouds.h index 348220fb1..195f48de0 100644 --- a/src/clouds.h +++ b/src/clouds.h @@ -83,9 +83,12 @@ public: BS * 1000000, m_cloud_y + BS - BS * camera_offset.Y, BS * 1000000); } + void readSettings(); + private: video::SMaterial m_material; core::aabbox3d<f32> m_box; + s16 m_passed_cloud_y; float m_cloud_y; u16 m_cloud_radius_i; bool m_enable_3d; |