@@ -71,7 +71,7 @@ void VoxelManipulator::print(std::ostream &o, INodeDefManager *ndef,
71
71
v3s16 of = m_area.MinEdge ;
72
72
o<<" size: " <<em.X <<" x" <<em.Y <<" x" <<em.Z
73
73
<<" offset: (" <<of.X <<" ," <<of.Y <<" ," <<of.Z <<" )" <<std::endl;
74
-
74
+
75
75
for (s32 y=m_area.MaxEdge .Y ; y>=m_area.MinEdge .Y ; y--)
76
76
{
77
77
if (em.X >= 3 && em.Y >= 3 )
@@ -88,10 +88,8 @@ void VoxelManipulator::print(std::ostream &o, INodeDefManager *ndef,
88
88
{
89
89
u8 f = m_flags[m_area.index (x,y,z)];
90
90
char c;
91
- if (f & VOXELFLAG_NOT_LOADED )
91
+ if (f & VOXELFLAG_NO_DATA )
92
92
c = ' N' ;
93
- else if (f & VOXELFLAG_INEXISTENT)
94
- c = ' I' ;
95
93
else
96
94
{
97
95
c = ' X' ;
@@ -149,11 +147,11 @@ void VoxelManipulator::addArea(VoxelArea area)
149
147
// Cancel if requested area has zero volume
150
148
if (area.getExtent () == v3s16 (0 ,0 ,0 ))
151
149
return ;
152
-
150
+
153
151
// Cancel if m_area already contains the requested area
154
152
if (m_area.contains (area))
155
153
return ;
156
-
154
+
157
155
TimeTaker timer (" addArea" , &addarea_time);
158
156
159
157
// Calculate new area
@@ -186,28 +184,26 @@ void VoxelManipulator::addArea(VoxelArea area)
186
184
assert (new_data);
187
185
u8 *new_flags = new u8[new_size];
188
186
assert (new_flags);
189
- memset (new_flags, VOXELFLAG_NOT_LOADED , new_size);
190
-
187
+ memset (new_flags, VOXELFLAG_NO_DATA , new_size);
188
+
191
189
// Copy old data
192
-
190
+ s32 old_x_width = m_area. MaxEdge . X - m_area. MinEdge . X + 1 ;
193
191
for (s32 z=m_area.MinEdge .Z ; z<=m_area.MaxEdge .Z ; z++)
194
192
for (s32 y=m_area.MinEdge .Y ; y<=m_area.MaxEdge .Y ; y++)
195
- for (s32 x=m_area.MinEdge .X ; x<=m_area.MaxEdge .X ; x++)
196
193
{
197
- unsigned int old_index = m_area.index (x,y,z);
198
- // If loaded, copy data and flags
199
- if ((m_flags[old_index] & VOXELFLAG_NOT_LOADED) == false )
200
- {
201
- unsigned int new_index = new_area.index (x,y,z);
202
- new_data[new_index] = m_data[old_index];
203
- new_flags[new_index] = m_flags[old_index];
204
- }
194
+ unsigned int old_index = m_area.index (m_area.MinEdge .X ,y,z);
195
+ unsigned int new_index = new_area.index (m_area.MinEdge .X ,y,z);
196
+
197
+ memcpy (&new_data[new_index], &m_data[old_index],
198
+ old_x_width * sizeof (MapNode));
199
+ memcpy (&new_flags[new_index], &m_flags[old_index],
200
+ old_x_width * sizeof (u8));
205
201
}
206
202
207
203
// Replace area, data and flags
208
-
204
+
209
205
m_area = new_area;
210
-
206
+
211
207
MapNode *old_data = m_data;
212
208
u8 *old_flags = m_flags;
213
209
@@ -216,7 +212,7 @@ void VoxelManipulator::addArea(VoxelArea area)
216
212
217
213
m_data = new_data;
218
214
m_flags = new_flags;
219
-
215
+
220
216
if (old_data)
221
217
delete[] old_data;
222
218
if (old_flags)
@@ -225,7 +221,7 @@ void VoxelManipulator::addArea(VoxelArea area)
225
221
// dstream<<"addArea done"<<std::endl;
226
222
}
227
223
228
- void VoxelManipulator::copyFrom (MapNode *src, VoxelArea src_area,
224
+ void VoxelManipulator::copyFrom (MapNode *src, const VoxelArea& src_area,
229
225
v3s16 from_pos, v3s16 to_pos, v3s16 size)
230
226
{
231
227
for (s16 z=0 ; z<size.Z ; z++)
@@ -238,7 +234,7 @@ void VoxelManipulator::copyFrom(MapNode *src, VoxelArea src_area,
238
234
}
239
235
}
240
236
241
- void VoxelManipulator::copyTo (MapNode *dst, VoxelArea dst_area,
237
+ void VoxelManipulator::copyTo (MapNode *dst, const VoxelArea& dst_area,
242
238
v3s16 dst_pos, v3s16 from_pos, v3s16 size)
243
239
{
244
240
for (s16 z=0 ; z<size.Z ; z++)
@@ -252,7 +248,6 @@ void VoxelManipulator::copyTo(MapNode *dst, VoxelArea dst_area,
252
248
i_dst++;
253
249
i_local++;
254
250
}
255
- // memcpy(&dst[i_dst], &m_data[i_local], size.X*sizeof(MapNode));
256
251
}
257
252
}
258
253
@@ -314,22 +309,22 @@ void VoxelManipulator::unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight,
314
309
v3s16 (0 ,-1 ,0 ), // bottom
315
310
v3s16 (-1 ,0 ,0 ), // left
316
311
};
317
-
318
- emerge (VoxelArea (p - v3s16 (1 ,1 ,1 ), p + v3s16 (1 ,1 ,1 )));
312
+
313
+ addArea (VoxelArea (p - v3s16 (1 ,1 ,1 ), p + v3s16 (1 ,1 ,1 )));
319
314
320
315
// Loop through 6 neighbors
321
316
for (u16 i=0 ; i<6 ; i++)
322
317
{
323
318
// Get the position of the neighbor node
324
319
v3s16 n2pos = p + dirs[i];
325
-
320
+
326
321
u32 n2i = m_area.index (n2pos);
327
322
328
- if (m_flags[n2i] & VOXELFLAG_INEXISTENT )
323
+ if (m_flags[n2i] & VOXELFLAG_NO_DATA )
329
324
continue ;
330
325
331
326
MapNode &n2 = m_data[n2i];
332
-
327
+
333
328
/*
334
329
If the neighbor is dimmer than what was specified
335
330
as oldlight (the light of the previous node)
@@ -347,9 +342,9 @@ void VoxelManipulator::unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight,
347
342
*/
348
343
349
344
n2.setLight (bank, 0 , nodemgr);
350
-
345
+
351
346
unspreadLight (bank, n2pos, light2, light_sources, nodemgr);
352
-
347
+
353
348
/*
354
349
Remove from light_sources if it is there
355
350
NOTE: This doesn't happen nearly at all
@@ -391,7 +386,7 @@ void VoxelManipulator::unspreadLight(enum LightBank bank,
391
386
{
392
387
if (from_nodes.size () == 0 )
393
388
return ;
394
-
389
+
395
390
for (std::map<v3s16, u8>::iterator j = from_nodes.begin ();
396
391
j != from_nodes.end (); ++j)
397
392
{
@@ -430,37 +425,37 @@ void VoxelManipulator::unspreadLight(enum LightBank bank,
430
425
v3s16(0,-1,0), // bottom
431
426
v3s16(-1,0,0), // left
432
427
};
433
-
428
+
434
429
if(from_nodes.size() == 0)
435
430
return;
436
-
431
+
437
432
core::map<v3s16, u8> unlighted_nodes;
438
433
core::map<v3s16, u8>::Iterator j;
439
434
j = from_nodes.getIterator();
440
435
441
436
for(; j.atEnd() == false; j++)
442
437
{
443
438
v3s16 pos = j.getNode()->getKey();
444
-
445
- emerge (VoxelArea(pos - v3s16(1,1,1), pos + v3s16(1,1,1)));
439
+
440
+ addArea (VoxelArea(pos - v3s16(1,1,1), pos + v3s16(1,1,1)));
446
441
447
442
//MapNode &n = m_data[m_area.index(pos)];
448
-
443
+
449
444
u8 oldlight = j.getNode()->getValue();
450
-
445
+
451
446
// Loop through 6 neighbors
452
447
for(u16 i=0; i<6; i++)
453
448
{
454
449
// Get the position of the neighbor node
455
450
v3s16 n2pos = pos + dirs[i];
456
-
451
+
457
452
u32 n2i = m_area.index(n2pos);
458
453
459
- if(m_flags[n2i] & VOXELFLAG_INEXISTENT )
454
+ if(m_flags[n2i] & VOXELFLAG_NO_DATA )
460
455
continue;
461
456
462
457
MapNode &n2 = m_data[n2i];
463
-
458
+
464
459
/*
465
460
If the neighbor is dimmer than what was specified
466
461
as oldlight (the light of the previous node)
@@ -480,7 +475,7 @@ void VoxelManipulator::unspreadLight(enum LightBank bank,
480
475
n2.setLight(bank, 0);
481
476
482
477
unlighted_nodes.insert(n2pos, current_light);
483
-
478
+
484
479
/*
485
480
Remove from light_sources if it is there
486
481
NOTE: This doesn't happen nearly at all
@@ -502,7 +497,7 @@ void VoxelManipulator::unspreadLight(enum LightBank bank,
502
497
<<blockchangecount<<" times"
503
498
<<" for "<<from_nodes.size()<<" nodes"
504
499
<<std::endl;*/
505
-
500
+
506
501
if(unlighted_nodes.size() > 0)
507
502
unspreadLight(bank, unlighted_nodes, light_sources);
508
503
}
@@ -520,11 +515,11 @@ void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p,
520
515
v3s16 (-1 ,0 ,0 ), // left
521
516
};
522
517
523
- emerge (VoxelArea (p - v3s16 (1 ,1 ,1 ), p + v3s16 (1 ,1 ,1 )));
518
+ addArea (VoxelArea (p - v3s16 (1 ,1 ,1 ), p + v3s16 (1 ,1 ,1 )));
524
519
525
520
u32 i = m_area.index (p);
526
-
527
- if (m_flags[i] & VOXELFLAG_INEXISTENT )
521
+
522
+ if (m_flags[i] & VOXELFLAG_NO_DATA )
528
523
return ;
529
524
530
525
MapNode &n = m_data[i];
@@ -537,16 +532,16 @@ void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p,
537
532
{
538
533
// Get the position of the neighbor node
539
534
v3s16 n2pos = p + dirs[i];
540
-
535
+
541
536
u32 n2i = m_area.index (n2pos);
542
537
543
- if (m_flags[n2i] & VOXELFLAG_INEXISTENT )
538
+ if (m_flags[n2i] & VOXELFLAG_NO_DATA )
544
539
continue ;
545
540
546
541
MapNode &n2 = m_data[n2i];
547
542
548
543
u8 light2 = n2.getLight (bank, nodemgr);
549
-
544
+
550
545
/*
551
546
If the neighbor is brighter than the current node,
552
547
add to list (it will light up this node on its turn)
@@ -583,7 +578,7 @@ void VoxelManipulator::spreadLight(enum LightBank bank,
583
578
{
584
579
if(from_nodes.size() == 0)
585
580
return;
586
-
581
+
587
582
core::map<v3s16, bool> lighted_nodes;
588
583
core::map<v3s16, bool>::Iterator j;
589
584
j = from_nodes.getIterator();
@@ -616,19 +611,19 @@ void VoxelManipulator::spreadLight(enum LightBank bank,
616
611
617
612
if (from_nodes.size () == 0 )
618
613
return ;
619
-
614
+
620
615
std::set<v3s16> lighted_nodes;
621
616
622
617
for (std::set<v3s16>::iterator j = from_nodes.begin ();
623
618
j != from_nodes.end (); ++j)
624
619
{
625
620
v3s16 pos = *j;
626
621
627
- emerge (VoxelArea (pos - v3s16 (1 ,1 ,1 ), pos + v3s16 (1 ,1 ,1 )));
622
+ addArea (VoxelArea (pos - v3s16 (1 ,1 ,1 ), pos + v3s16 (1 ,1 ,1 )));
628
623
629
624
u32 i = m_area.index (pos);
630
-
631
- if (m_flags[i] & VOXELFLAG_INEXISTENT )
625
+
626
+ if (m_flags[i] & VOXELFLAG_NO_DATA )
632
627
continue ;
633
628
634
629
MapNode &n = m_data[i];
@@ -641,18 +636,18 @@ void VoxelManipulator::spreadLight(enum LightBank bank,
641
636
{
642
637
// Get the position of the neighbor node
643
638
v3s16 n2pos = pos + dirs[i];
644
-
639
+
645
640
try
646
641
{
647
642
u32 n2i = m_area.index (n2pos);
648
643
649
- if (m_flags[n2i] & VOXELFLAG_INEXISTENT )
644
+ if (m_flags[n2i] & VOXELFLAG_NO_DATA )
650
645
continue ;
651
646
652
647
MapNode &n2 = m_data[n2i];
653
648
654
649
u8 light2 = n2.getLight (bank, nodemgr);
655
-
650
+
656
651
/*
657
652
If the neighbor is brighter than the current node,
658
653
add to list (it will light up this node on its turn)
@@ -685,7 +680,7 @@ void VoxelManipulator::spreadLight(enum LightBank bank,
685
680
<<blockchangecount<<" times"
686
681
<<" for "<<from_nodes.size()<<" nodes"
687
682
<<std::endl;*/
688
-
683
+
689
684
if (lighted_nodes.size () > 0 )
690
685
spreadLight (bank, lighted_nodes, nodemgr);
691
686
}
0 commit comments