@@ -30,6 +30,11 @@ class Clouds;
30
30
Clouds *g_menuclouds = NULL ;
31
31
irr::scene::ISceneManager *g_menucloudsmgr = NULL ;
32
32
33
+ static void cloud_3d_setting_changed (const std::string settingname, void *data)
34
+ {
35
+ ((Clouds *)data)->readSettings ();
36
+ }
37
+
33
38
Clouds::Clouds (
34
39
scene::ISceneNode* parent,
35
40
scene::ISceneManager* mgr,
@@ -52,12 +57,10 @@ Clouds::Clouds(
52
57
// m_material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA;
53
58
m_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
54
59
55
- m_cloud_y = BS * (cloudheight ? cloudheight :
56
- g_settings->getS16 (" cloud_height" ));
57
-
58
- m_cloud_radius_i = g_settings->getU16 (" cloud_radius" );
59
-
60
- m_enable_3d = g_settings->getBool (" enable_3d_clouds" );
60
+ m_passed_cloud_y = cloudheight;
61
+ readSettings ();
62
+ g_settings->registerChangedCallback (" enable_3d_clouds" ,
63
+ &cloud_3d_setting_changed, this );
61
64
62
65
m_box = core::aabbox3d<f32>(-BS*1000000 ,m_cloud_y-BS,-BS*1000000 ,
63
66
BS*1000000 ,m_cloud_y+BS,BS*1000000 );
@@ -66,6 +69,8 @@ Clouds::Clouds(
66
69
67
70
Clouds::~Clouds ()
68
71
{
72
+ g_settings->deregisterChangedCallback (" enable_3d_clouds" ,
73
+ &cloud_3d_setting_changed, this );
69
74
}
70
75
71
76
void Clouds::OnRegisterSceneNode ()
@@ -351,3 +356,11 @@ void Clouds::update(v2f camera_p, video::SColorf color)
351
356
// dstream<<"m_brightness="<<m_brightness<<std::endl;
352
357
}
353
358
359
+ void Clouds::readSettings ()
360
+ {
361
+ m_cloud_y = BS * (m_passed_cloud_y ? m_passed_cloud_y :
362
+ g_settings->getS16 (" cloud_height" ));
363
+ m_cloud_radius_i = g_settings->getU16 (" cloud_radius" );
364
+ m_enable_3d = g_settings->getBool (" enable_3d_clouds" );
365
+ }
366
+
0 commit comments