Skip to content

Commit c88d0cd

Browse files
committed
vpart_info easy optional/mandatory conversion
1 parent 431b981 commit c88d0cd

File tree

1 file changed

+31
-35
lines changed

1 file changed

+31
-35
lines changed

src/veh_type.cpp

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
#include "vpart_range.h"
5050
#include "wcwidth.h"
5151

52+
class emit;
53+
5254
namespace
5355
{
5456
generic_factory<vehicle_prototype> vehicle_prototype_factory( "vehicle", "id" );
@@ -273,29 +275,29 @@ void vpart_info::load( const JsonObject &jo, const std::string &src )
273275
{
274276
const bool strict = src == "dda";
275277

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 );
299301
int legacy_floor_bedding_warmth = units::to_legacy_bodypart_temp_delta( floor_bedding_warmth );
300302
assign( jo, "floor_bedding_warmth", legacy_floor_bedding_warmth, strict );
301303
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 )
343345
parse_vp_control_reqs( reqs, id, "land", control_land );
344346
}
345347

346-
assign( jo, "looks_like", looks_like, strict );
348+
optional( jo, was_loaded, "looks_like", looks_like, looks_like );
347349

348350
if( jo.has_member( "breaks_into" ) ) {
349351
breaks_into_group = item_group::load_item_group(
350352
jo.get_member( "breaks_into" ), "collection", "breaks_into for vpart " + id.str() );
351353
}
352354

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} );
360356

361357
JsonArray tools = jo.get_array( "pseudo_tools" );
362358
if( !tools.empty() ) {
@@ -371,10 +367,10 @@ void vpart_info::load( const JsonObject &jo, const std::string &src )
371367
}
372368
}
373369
}
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 );
378374

379375
if( jo.has_member( "damage_reduction" ) ) {
380376
JsonObject dred = jo.get_object( "damage_reduction" );

0 commit comments

Comments
 (0)