49
49
#include " vpart_range.h"
50
50
#include " wcwidth.h"
51
51
52
+ class emit ;
53
+
52
54
namespace
53
55
{
54
56
generic_factory<vehicle_prototype> vehicle_prototype_factory ( " vehicle" , " id" );
@@ -273,29 +275,29 @@ void vpart_info::load( const JsonObject &jo, const std::string &src )
273
275
{
274
276
const bool strict = src == " dda" ;
275
277
276
- assign ( jo, " name" , name_, strict );
277
- assign ( jo, " item" , base_item, strict );
278
- assign ( jo, " remove_as" , removed_item, strict );
279
- assign ( jo, " location" , location, strict );
280
- assign ( jo, " durability" , durability, strict );
281
- assign ( jo, " damage_modifier" , dmg_mod, strict );
282
- assign ( jo, " energy_consumption" , energy_consumption, strict );
283
- assign ( jo, " power" , power, strict );
284
- assign ( jo, " epower" , epower, strict );
285
- assign ( jo, " emissions" , emissions, strict );
286
- assign ( jo, " exhaust" , exhaust, strict );
287
- assign ( jo, " fuel_type" , fuel_type, strict );
288
- assign ( jo, " default_ammo" , default_ammo, strict );
289
- assign ( jo, " folded_volume" , folded_volume, strict );
290
- optional ( jo, was_loaded, " size" , size );
291
- assign ( jo, " bonus" , bonus, strict );
292
- assign ( jo, " cargo_weight_modifier" , cargo_weight_modifier, strict );
293
- assign ( jo, " categories" , categories, strict );
294
- assign ( jo, " flags" , flags, strict );
295
- assign ( jo, " description" , description, strict );
296
- optional ( jo, was_loaded, " color" , color, nc_color_reader{} );
297
- optional ( jo, was_loaded, " broken_color" , color_broken, nc_color_reader{} );
298
- assign ( jo, " comfort" , comfort, strict );
278
+ optional ( jo, was_loaded, " name" , name_ );
279
+ optional ( jo, was_loaded, " item" , base_item );
280
+ optional ( jo, was_loaded, " remove_as" , removed_item );
281
+ optional ( jo, was_loaded, " location" , location );
282
+ optional ( jo, was_loaded, " durability" , durability, 0 );
283
+ optional ( jo, was_loaded, " damage_modifier" , dmg_mod, 100 );
284
+ optional ( jo, was_loaded, " energy_consumption" , energy_consumption, 0_W );
285
+ optional ( jo, was_loaded, " power" , power, 0_W );
286
+ optional ( jo, was_loaded, " epower" , epower, 0_W );
287
+ optional ( jo, was_loaded, " emissions" , emissions, string_id_reader<emit> {} );
288
+ optional ( jo, was_loaded, " exhaust" , exhaust, string_id_reader<emit> {} );
289
+ optional ( jo, was_loaded, " fuel_type" , fuel_type, itype_id::NULL_ID () );
290
+ optional ( jo, was_loaded, " default_ammo" , default_ammo, itype_id::NULL_ID () );
291
+ optional ( jo, was_loaded, " folded_volume" , folded_volume, std:: nullopt );
292
+ optional ( jo, was_loaded, " size" , size, 0_ml );
293
+ optional ( jo, was_loaded, " bonus" , bonus, 0 );
294
+ optional ( jo, was_loaded, " cargo_weight_modifier" , cargo_weight_modifier, 100 );
295
+ optional ( jo, was_loaded, " categories" , categories, string_reader{} );
296
+ optional ( jo, was_loaded, " flags" , flags, string_reader{} );
297
+ optional ( jo, was_loaded, " description" , description );
298
+ optional ( jo, was_loaded, " color" , color, nc_color_reader{}, c_light_gray );
299
+ optional ( jo, was_loaded, " broken_color" , color_broken, nc_color_reader{}, c_light_gray );
300
+ optional ( jo, was_loaded, " comfort" , comfort, 0 );
299
301
int legacy_floor_bedding_warmth = units::to_legacy_bodypart_temp_delta ( floor_bedding_warmth );
300
302
assign ( jo, " floor_bedding_warmth" , legacy_floor_bedding_warmth, strict );
301
303
floor_bedding_warmth = units::from_legacy_bodypart_temp_delta ( legacy_floor_bedding_warmth );
@@ -343,20 +345,14 @@ void vpart_info::load( const JsonObject &jo, const std::string &src )
343
345
parse_vp_control_reqs ( reqs, id, " land" , control_land );
344
346
}
345
347
346
- assign ( jo, " looks_like" , looks_like, strict );
348
+ optional ( jo, was_loaded, " looks_like" , looks_like, looks_like );
347
349
348
350
if ( jo.has_member ( " breaks_into" ) ) {
349
351
breaks_into_group = item_group::load_item_group (
350
352
jo.get_member ( " breaks_into" ), " collection" , " breaks_into for vpart " + id.str () );
351
353
}
352
354
353
- JsonArray qual = jo.get_array ( " qualities" );
354
- if ( !qual.empty () ) {
355
- qualities.clear ();
356
- for ( JsonArray pair : qual ) {
357
- qualities[ quality_id ( pair.get_string ( 0 ) ) ] = pair.get_int ( 1 );
358
- }
359
- }
355
+ optional ( jo, was_loaded, " qualities" , qualities, weighted_string_id_reader<quality_id, int > {std::nullopt } );
360
356
361
357
JsonArray tools = jo.get_array ( " pseudo_tools" );
362
358
if ( !tools.empty () ) {
@@ -371,10 +367,10 @@ void vpart_info::load( const JsonObject &jo, const std::string &src )
371
367
}
372
368
}
373
369
}
374
- assign ( jo, " folding_tools" , folding_tools, strict );
375
- assign ( jo, " unfolding_tools" , unfolding_tools, strict );
376
- assign ( jo, " folding_time" , folding_time, strict );
377
- assign ( jo, " unfolding_time" , unfolding_time, strict );
370
+ optional ( jo, was_loaded, " folding_tools" , folding_tools, string_id_reader<itype> {} );
371
+ optional ( jo, was_loaded, " unfolding_tools" , unfolding_tools, string_id_reader<itype> {} );
372
+ optional ( jo, was_loaded, " folding_time" , folding_time, 10_seconds );
373
+ optional ( jo, was_loaded, " unfolding_time" , unfolding_time, 10_seconds );
378
374
379
375
if ( jo.has_member ( " damage_reduction" ) ) {
380
376
JsonObject dred = jo.get_object ( " damage_reduction" );
0 commit comments