@@ -181,25 +181,11 @@ static void parse_vp_reqs( const JsonObject &obj, const vpart_id &id, const std:
181
181
}
182
182
JsonObject src = obj.get_object ( key );
183
183
184
- JsonArray sk = src.get_array ( " skills" );
185
- if ( !sk.empty () ) {
186
- skills.clear ();
187
- for ( JsonArray cur : sk ) {
188
- if ( cur.size () != 2 ) {
189
- debugmsg ( " vpart '%s' has requirement with invalid skill entry" , id.str () );
190
- continue ;
191
- }
192
- skills.emplace ( skill_id ( cur.get_string ( 0 ) ), cur.get_int ( 1 ) );
193
- }
194
- }
184
+ optional ( src, false , " skills" , skills, weighted_string_id_reader<skill_id, int > { std::nullopt } );
195
185
196
- if ( src.has_string ( " time" ) ) {
197
- assign ( src, " time" , time, /* strict = */ false );
198
- } else if ( src.has_int ( " time" ) ) { // remove in 0.H
199
- time = time_duration::from_moves ( src.get_int ( " time" ) );
200
- debugmsg ( " vpart '%s' defines requirement time as integer, use time units string" , id.str () );
201
- }
186
+ optional ( src, false , " time" , time, time );
202
187
188
+ // FIXME: generic typed reader for requirements
203
189
if ( src.has_string ( " using" ) ) {
204
190
reqs = { { requirement_id ( src.get_string ( " using" ) ), 1 } };
205
191
} else if ( src.has_array ( " using" ) ) {
0 commit comments