summaryrefslogtreecommitdiff
path: root/src/clouds.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/clouds.cpp')
-rw-r--r--src/clouds.cpp25
1 files changed, 19 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");
+}
+