@@ -2832,32 +2832,23 @@ MapBlock* ServerMap::finishBlockMake(BlockMakeData *data,
2832
2832
Update weather data in blocks
2833
2833
*/
2834
2834
ServerEnvironment *senv = &((Server *)m_gamedef)->getEnv ();
2835
- if (senv->m_use_weather ) {
2836
- for (s16 x=blockpos_min.X -extra_borders.X ;
2837
- x<=blockpos_max.X +extra_borders.X ; x++)
2838
- for (s16 z=blockpos_min.Z -extra_borders.Z ;
2839
- z<=blockpos_max.Z +extra_borders.Z ; z++)
2840
- for (s16 y=blockpos_min.Y -extra_borders.Y ;
2841
- y<=blockpos_max.Y +extra_borders.Y ; y++)
2842
- {
2843
- v3s16 p (x, y, z);
2844
- MapBlock *block = getBlockNoCreateNoEx (p);
2845
- block->weather_update_time = 0 ;
2846
- updateBlockHeat (senv, p * MAP_BLOCKSIZE, NULL );
2847
- updateBlockHumidity (senv, p * MAP_BLOCKSIZE, NULL );
2848
- }
2849
- } else {
2850
- for (s16 x=blockpos_min.X -extra_borders.X ;
2851
- x<=blockpos_max.X +extra_borders.X ; x++)
2852
- for (s16 z=blockpos_min.Z -extra_borders.Z ;
2853
- z<=blockpos_max.Z +extra_borders.Z ; z++)
2854
- for (s16 y=blockpos_min.Y -extra_borders.Y ;
2855
- y<=blockpos_max.Y +extra_borders.Y ; y++)
2856
- {
2857
- MapBlock *block = getBlockNoCreateNoEx (v3s16 (x, y, z));
2835
+ for (s16 x=blockpos_min.X -extra_borders.X ;
2836
+ x<=blockpos_max.X +extra_borders.X ; x++)
2837
+ for (s16 z=blockpos_min.Z -extra_borders.Z ;
2838
+ z<=blockpos_max.Z +extra_borders.Z ; z++)
2839
+ for (s16 y=blockpos_min.Y -extra_borders.Y ;
2840
+ y<=blockpos_max.Y +extra_borders.Y ; y++)
2841
+ {
2842
+ v3s16 p (x, y, z);
2843
+ MapBlock *block = getBlockNoCreateNoEx (p);
2844
+ block->heat_last_update = 0 ;
2845
+ block->humidity_last_update = 0 ;
2846
+ if (senv->m_use_weather ) {
2847
+ updateBlockHeat (senv, p * MAP_BLOCKSIZE, block);
2848
+ updateBlockHumidity (senv, p * MAP_BLOCKSIZE, block);
2849
+ } else {
2858
2850
block->heat = HEAT_UNDEFINED;
2859
2851
block->humidity = HUMIDITY_UNDEFINED;
2860
- block->weather_update_time = 0 ;
2861
2852
}
2862
2853
}
2863
2854
@@ -3181,6 +3172,22 @@ MapBlock * ServerMap::emergeBlock(v3s16 p, bool create_blank)
3181
3172
return NULL ;
3182
3173
}
3183
3174
3175
+ void ServerMap::prepareBlock (MapBlock *block) {
3176
+ ServerEnvironment *senv = &((Server *)m_gamedef)->getEnv ();
3177
+
3178
+ // Calculate weather conditions
3179
+ block->heat_last_update = 0 ;
3180
+ block->humidity_last_update = 0 ;
3181
+ if (senv->m_use_weather ) {
3182
+ v3s16 p = block->getPos () * MAP_BLOCKSIZE;
3183
+ updateBlockHeat (senv, p, block);
3184
+ updateBlockHumidity (senv, p, block);
3185
+ } else {
3186
+ block->heat = HEAT_UNDEFINED;
3187
+ block->humidity = HUMIDITY_UNDEFINED;
3188
+ }
3189
+ }
3190
+
3184
3191
s16 ServerMap::findGroundLevel (v2s16 p2d)
3185
3192
{
3186
3193
#if 0
@@ -3930,7 +3937,7 @@ s16 ServerMap::updateBlockHeat(ServerEnvironment *env, v3s16 p, MapBlock *block)
3930
3937
u32 gametime = env->getGameTime ();
3931
3938
3932
3939
if (block) {
3933
- if (gametime - block->weather_update_time < 10 )
3940
+ if (gametime - block->heat_last_update < 10 )
3934
3941
return block->heat ;
3935
3942
} else {
3936
3943
block = getBlockNoCreateNoEx (getNodeBlockPos (p));
@@ -3941,7 +3948,7 @@ s16 ServerMap::updateBlockHeat(ServerEnvironment *env, v3s16 p, MapBlock *block)
3941
3948
3942
3949
if (block) {
3943
3950
block->heat = heat;
3944
- block->weather_update_time = gametime;
3951
+ block->heat_last_update = gametime;
3945
3952
}
3946
3953
return heat;
3947
3954
}
@@ -3951,7 +3958,7 @@ s16 ServerMap::updateBlockHumidity(ServerEnvironment *env, v3s16 p, MapBlock *bl
3951
3958
u32 gametime = env->getGameTime ();
3952
3959
3953
3960
if (block) {
3954
- if (gametime - block->weather_update_time < 10 )
3961
+ if (gametime - block->humidity_last_update < 10 )
3955
3962
return block->humidity ;
3956
3963
} else {
3957
3964
block = getBlockNoCreateNoEx (getNodeBlockPos (p));
@@ -3962,7 +3969,7 @@ s16 ServerMap::updateBlockHumidity(ServerEnvironment *env, v3s16 p, MapBlock *bl
3962
3969
3963
3970
if (block) {
3964
3971
block->humidity = humidity;
3965
- block->weather_update_time = gametime;
3972
+ block->humidity_last_update = gametime;
3966
3973
}
3967
3974
return humidity;
3968
3975
}
0 commit comments