From 4ece2b9e32b5948628a20dece54ecfb369a17757 Mon Sep 17 00:00:00 2001
From: est31 <MTest31@outlook.com>
Date: Thu, 9 Jul 2015 08:07:59 +0200
Subject: [PATCH] Update clouds enable_3d_clouds when setting changed

---
 src/clouds.cpp | 25 +++++++++++++++++++------
 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 @@ class Clouds : public scene::ISceneNode
 			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;
-- 
GitLab