@@ -375,25 +375,14 @@ void vpart_info::load( const JsonObject &jo, const std::string &src )
375
375
if ( !wheel_info ) {
376
376
wheel_info.emplace ();
377
377
}
378
-
379
- assign ( jo, " rolling_resistance" , wheel_info->rolling_resistance , strict );
380
- assign ( jo, " contact_area" , wheel_info->contact_area , strict );
381
- assign ( jo, " wheel_offroad_rating" , wheel_info->offroad_rating , strict );
382
- if ( const std::optional<JsonValue> jo_termod = jo.get_member_opt ( " wheel_terrain_modifiers" ) ) {
383
- wheel_info->terrain_modifiers .clear ();
384
- for ( const JsonMember jo_mod : static_cast <JsonObject>( *jo_termod ) ) {
385
- const JsonArray jo_mod_values = jo_mod.get_array ();
386
- veh_ter_mod mod { jo_mod.name (), jo_mod_values.get_int ( 0 ), jo_mod_values.get_int ( 1 ) };
387
- wheel_info->terrain_modifiers .emplace_back ( std::move ( mod ) );
388
- }
389
- }
378
+ wheel_info->deserialize ( jo );
390
379
}
391
380
392
381
if ( has_flag ( " ROTOR" ) ) {
393
382
if ( !rotor_info ) {
394
383
rotor_info.emplace ();
395
384
}
396
- assign ( jo, " rotor_diameter " , rotor_info->rotor_diameter , strict );
385
+ rotor_info->deserialize ( jo );
397
386
}
398
387
399
388
if ( has_flag ( " WORKBENCH" ) ) {
@@ -445,6 +434,38 @@ void vpslot_engine::deserialize( const JsonObject &jo )
445
434
was_loaded = true ;
446
435
}
447
436
437
+ void veh_ter_mod::deserialize ( const JsonValue &jv )
438
+ {
439
+ if ( !jv.is_member () ) {
440
+ jv.throw_error ( " Invalid format" );
441
+ }
442
+
443
+ const JsonMember &jm = dynamic_cast <const JsonMember &>( jv );
444
+ JsonArray ja = jm.get_array ();
445
+
446
+ terrain_flag = jm.name ();
447
+ move_override = ja.get_int ( 0 );
448
+ move_penalty = ja.get_int ( 1 );
449
+ }
450
+
451
+ void vpslot_wheel::deserialize ( const JsonObject &jo )
452
+ {
453
+ optional ( jo, was_loaded, " rolling_resistance" , rolling_resistance, 1 .f );
454
+ optional ( jo, was_loaded, " contact_area" , contact_area, 1 );
455
+ optional ( jo, was_loaded, " wheel_offroad_rating" , offroad_rating, 0 .5f );
456
+ optional ( jo, was_loaded, " wheel_terrain_modifiers" , terrain_modifiers,
457
+ json_read_reader<veh_ter_mod> {} );
458
+
459
+ was_loaded = true ;
460
+ }
461
+
462
+ void vpslot_rotor::deserialize ( const JsonObject &jo )
463
+ {
464
+ optional ( jo, was_loaded, " rotor_diameter" , rotor_diameter, 1 );
465
+
466
+ was_loaded = true ;
467
+ }
468
+
448
469
void vpart_info::set_flag ( const std::string &flag )
449
470
{
450
471
flags.insert ( flag );
0 commit comments