@@ -55,6 +55,8 @@ Clouds::Clouds(
55
55
m_cloud_y = BS * (cloudheight ? cloudheight :
56
56
g_settings->getS16 (" cloud_height" ));
57
57
58
+ m_cloud_radius_i = g_settings->getU16 (" cloud_radius" );
59
+
58
60
m_box = core::aabbox3d<f32>(-BS*1000000 ,m_cloud_y-BS,-BS*1000000 ,
59
61
BS*1000000 ,m_cloud_y+BS,BS*1000000 );
60
62
@@ -96,14 +98,13 @@ void Clouds::render()
96
98
driver->setMaterial (m_material);
97
99
98
100
/*
99
- Clouds move from X + towards X -
101
+ Clouds move from Z + towards Z -
100
102
*/
101
103
102
- const s16 cloud_radius_i = 12 ;
103
104
const float cloud_size = BS * 64 ;
104
105
const v2f cloud_speed (0 , -BS * 2 );
105
106
106
- const float cloud_full_radius = cloud_size * cloud_radius_i ;
107
+ const float cloud_full_radius = cloud_size * m_cloud_radius_i ;
107
108
108
109
// Position of cloud noise origin in world coordinates
109
110
v2f world_cloud_origin_pos_f = m_time * cloud_speed;
@@ -165,14 +166,14 @@ void Clouds::render()
165
166
166
167
// Read noise
167
168
168
- bool *grid = new bool [cloud_radius_i * 2 * cloud_radius_i * 2 ];
169
+ bool *grid = new bool [m_cloud_radius_i * 2 * m_cloud_radius_i * 2 ];
169
170
170
171
float cloud_size_noise = cloud_size / BS / 200 ;
171
172
172
- for (s16 zi = -cloud_radius_i ; zi < cloud_radius_i ; zi++) {
173
- u32 si = (zi + cloud_radius_i ) * cloud_radius_i * 2 + cloud_radius_i ;
173
+ for (s16 zi = -m_cloud_radius_i ; zi < m_cloud_radius_i ; zi++) {
174
+ u32 si = (zi + m_cloud_radius_i ) * m_cloud_radius_i * 2 + m_cloud_radius_i ;
174
175
175
- for (s16 xi = -cloud_radius_i ; xi < cloud_radius_i ; xi++) {
176
+ for (s16 xi = -m_cloud_radius_i ; xi < m_cloud_radius_i ; xi++) {
176
177
u32 i = si + xi;
177
178
178
179
v2s16 p_in_noise_i (
@@ -192,23 +193,23 @@ void Clouds::render()
192
193
#define INAREA (x, z, radius ) \
193
194
((x) >= -(radius) && (x) < (radius) && (z) >= -(radius) && (z) < (radius))
194
195
195
- for (s16 zi0=-cloud_radius_i ; zi0<cloud_radius_i ; zi0++)
196
- for (s16 xi0=-cloud_radius_i ; xi0<cloud_radius_i ; xi0++)
196
+ for (s16 zi0= -m_cloud_radius_i ; zi0 < m_cloud_radius_i ; zi0++)
197
+ for (s16 xi0= -m_cloud_radius_i ; xi0 < m_cloud_radius_i ; xi0++)
197
198
{
198
199
s16 zi = zi0;
199
200
s16 xi = xi0;
200
201
// Draw from front to back (needed for transparency)
201
202
/* if(zi <= 0)
202
- zi = -cloud_radius_i - zi;
203
+ zi = -m_cloud_radius_i - zi;
203
204
if(xi <= 0)
204
- xi = -cloud_radius_i - xi;*/
205
+ xi = -m_cloud_radius_i - xi;*/
205
206
// Draw from back to front
206
207
if (zi >= 0 )
207
- zi = cloud_radius_i - zi - 1 ;
208
+ zi = m_cloud_radius_i - zi - 1 ;
208
209
if (xi >= 0 )
209
- xi = cloud_radius_i - xi - 1 ;
210
+ xi = m_cloud_radius_i - xi - 1 ;
210
211
211
- u32 i = GETINDEX (xi, zi, cloud_radius_i );
212
+ u32 i = GETINDEX (xi, zi, m_cloud_radius_i );
212
213
213
214
if (grid[i] == false )
214
215
continue ;
@@ -247,8 +248,8 @@ void Clouds::render()
247
248
v[3 ].Pos .set ( rx, ry,-rz);
248
249
break ;
249
250
case 1 : // back
250
- if (INAREA (xi, zi- 1 , cloud_radius_i)) {
251
- u32 j = GETINDEX (xi, zi- 1 , cloud_radius_i );
251
+ if (INAREA (xi, zi - 1 , m_cloud_radius_i)) {
252
+ u32 j = GETINDEX (xi, zi - 1 , m_cloud_radius_i );
252
253
if (grid[j])
253
254
continue ;
254
255
}
@@ -262,8 +263,8 @@ void Clouds::render()
262
263
v[3 ].Pos .set (-rx,-ry,-rz);
263
264
break ;
264
265
case 2 : // right
265
- if (INAREA (xi+ 1 , zi, cloud_radius_i)) {
266
- u32 j = GETINDEX (xi+1 , zi, cloud_radius_i );
266
+ if (INAREA (xi + 1 , zi, m_cloud_radius_i)) {
267
+ u32 j = GETINDEX (xi+1 , zi, m_cloud_radius_i );
267
268
if (grid[j])
268
269
continue ;
269
270
}
@@ -277,8 +278,8 @@ void Clouds::render()
277
278
v[3 ].Pos .set ( rx,-ry,-rz);
278
279
break ;
279
280
case 3 : // front
280
- if (INAREA (xi, zi+ 1 , cloud_radius_i)) {
281
- u32 j = GETINDEX (xi, zi+ 1 , cloud_radius_i );
281
+ if (INAREA (xi, zi + 1 , m_cloud_radius_i)) {
282
+ u32 j = GETINDEX (xi, zi + 1 , m_cloud_radius_i );
282
283
if (grid[j])
283
284
continue ;
284
285
}
@@ -292,8 +293,8 @@ void Clouds::render()
292
293
v[3 ].Pos .set ( rx,-ry, rz);
293
294
break ;
294
295
case 4 : // left
295
- if (INAREA (xi-1 , zi, cloud_radius_i)) {
296
- u32 j = GETINDEX (xi-1 , zi, cloud_radius_i );
296
+ if (INAREA (xi-1 , zi, m_cloud_radius_i)) {
297
+ u32 j = GETINDEX (xi-1 , zi, m_cloud_radius_i );
297
298
if (grid[j])
298
299
continue ;
299
300
}
0 commit comments