@@ -139,7 +139,7 @@ void TileDef::serialize(std::ostream &os, u16 protocol_version) const
139
139
}
140
140
}
141
141
142
- void TileDef::deSerialize (std::istream &is, bool culling_ignore )
142
+ void TileDef::deSerialize (std::istream &is, const u8 contenfeatures_version, const NodeDrawType drawtype )
143
143
{
144
144
int version = readU8 (is);
145
145
name = deSerializeString (is);
@@ -153,10 +153,12 @@ void TileDef::deSerialize(std::istream &is, bool culling_ignore)
153
153
tileable_horizontal = readU8 (is);
154
154
tileable_vertical = readU8 (is);
155
155
}
156
- // when connecting to old servers - do not use
157
- // provided values here since culling needs to be
158
- // disabled by default for these drawtypes
159
- if (culling_ignore)
156
+
157
+ if ((contenfeatures_version < 8 ) &&
158
+ ((drawtype == NDT_MESH) ||
159
+ (drawtype == NDT_FIRELIKE) ||
160
+ (drawtype == NDT_LIQUID) ||
161
+ (drawtype == NDT_PLANTLIKE)))
160
162
backface_culling = false ;
161
163
}
162
164
@@ -268,7 +270,8 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
268
270
return ;
269
271
}
270
272
271
- writeU8 (os, 7 ); // version
273
+ writeU8 (os, protocol_version < 27 ? 7 : 8 );
274
+
272
275
os<<serializeString (name);
273
276
writeU16 (os, groups.size ());
274
277
for (ItemGroupList::const_iterator
@@ -330,9 +333,11 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
330
333
void ContentFeatures::deSerialize (std::istream &is)
331
334
{
332
335
int version = readU8 (is);
333
- if (version != 7 ){
336
+ if (version < 7 ) {
334
337
deSerializeOld (is, version);
335
338
return ;
339
+ } else if (version > 8 ) {
340
+ throw SerializationError (" unsupported ContentFeatures version" );
336
341
}
337
342
338
343
name = deSerializeString (is);
@@ -345,21 +350,15 @@ void ContentFeatures::deSerialize(std::istream &is)
345
350
}
346
351
drawtype = (enum NodeDrawType)readU8 (is);
347
352
348
- bool ignore_culling = ((version <= 26 ) &&
349
- ((drawtype == NDT_MESH) ||
350
- (drawtype == NDT_PLANTLIKE) ||
351
- (drawtype == NDT_FIRELIKE) ||
352
- (drawtype == NDT_LIQUID)));
353
-
354
353
visual_scale = readF1000 (is);
355
354
if (readU8 (is) != 6 )
356
355
throw SerializationError (" unsupported tile count" );
357
356
for (u32 i = 0 ; i < 6 ; i++)
358
- tiledef[i].deSerialize (is, ignore_culling );
357
+ tiledef[i].deSerialize (is, version, drawtype );
359
358
if (readU8 (is) != CF_SPECIAL_COUNT)
360
359
throw SerializationError (" unsupported CF_SPECIAL_COUNT" );
361
360
for (u32 i = 0 ; i < CF_SPECIAL_COUNT; i++)
362
- tiledef_special[i].deSerialize (is, ignore_culling );
361
+ tiledef_special[i].deSerialize (is, version, drawtype );
363
362
alpha = readU8 (is);
364
363
post_effect_color.setAlpha (readU8 (is));
365
364
post_effect_color.setRed (readU8 (is));
@@ -1284,21 +1283,15 @@ void ContentFeatures::deSerializeOld(std::istream &is, int version)
1284
1283
}
1285
1284
drawtype = (enum NodeDrawType)readU8 (is);
1286
1285
1287
- bool ignore_culling = ((version <= 26 ) &&
1288
- ((drawtype == NDT_MESH) ||
1289
- (drawtype == NDT_PLANTLIKE) ||
1290
- (drawtype == NDT_FIRELIKE) ||
1291
- (drawtype == NDT_LIQUID)));
1292
-
1293
1286
visual_scale = readF1000 (is);
1294
1287
if (readU8 (is) != 6 )
1295
1288
throw SerializationError (" unsupported tile count" );
1296
1289
for (u32 i = 0 ; i < 6 ; i++)
1297
- tiledef[i].deSerialize (is, ignore_culling );
1290
+ tiledef[i].deSerialize (is, version, drawtype );
1298
1291
if (readU8 (is) != CF_SPECIAL_COUNT)
1299
1292
throw SerializationError (" unsupported CF_SPECIAL_COUNT" );
1300
1293
for (u32 i = 0 ; i < CF_SPECIAL_COUNT; i++)
1301
- tiledef_special[i].deSerialize (is, ignore_culling );
1294
+ tiledef_special[i].deSerialize (is, version, drawtype );
1302
1295
alpha = readU8 (is);
1303
1296
post_effect_color.setAlpha (readU8 (is));
1304
1297
post_effect_color.setRed (readU8 (is));
@@ -1342,12 +1335,12 @@ void ContentFeatures::deSerializeOld(std::istream &is, int version)
1342
1335
if (readU8 (is) != 6 )
1343
1336
throw SerializationError (" unsupported tile count" );
1344
1337
for (u32 i = 0 ; i < 6 ; i++)
1345
- tiledef[i].deSerialize (is, drawtype);
1338
+ tiledef[i].deSerialize (is, version, drawtype);
1346
1339
// CF_SPECIAL_COUNT in version 6 = 2
1347
1340
if (readU8 (is) != 2 )
1348
1341
throw SerializationError (" unsupported CF_SPECIAL_COUNT" );
1349
1342
for (u32 i = 0 ; i < 2 ; i++)
1350
- tiledef_special[i].deSerialize (is, drawtype);
1343
+ tiledef_special[i].deSerialize (is, version, drawtype);
1351
1344
alpha = readU8 (is);
1352
1345
post_effect_color.setAlpha (readU8 (is));
1353
1346
post_effect_color.setRed (readU8 (is));
0 commit comments