@@ -862,58 +862,10 @@ void mtype::load( const JsonObject &jo, const std::string &src )
862
862
// Load each set of weakpoints.
863
863
// Each subsequent weakpoint set overwrites
864
864
// matching weakpoints from the previous set.
865
- if ( jo.has_array ( " weakpoint_sets" ) ) {
866
- weakpoints_deferred.clear ();
867
- for ( JsonValue jval : jo.get_array ( " weakpoint_sets" ) ) {
868
- weakpoints_deferred.emplace_back ( jval.get_string () );
869
- }
870
- }
871
-
865
+ optional ( jo, was_loaded, " weakpoint_sets" , weakpoints_deferred, auto_flags_reader<weakpoints_id> {} );
872
866
// Finally, inline weakpoints overwrite
873
867
// any matching weakpoints from the previous sets.
874
- if ( jo.has_array ( " weakpoints" ) ) {
875
- weakpoints_deferred_inline.clear ();
876
- ::weakpoints tmp_wp;
877
- tmp_wp.load ( jo.get_array ( " weakpoints" ) );
878
- weakpoints_deferred_inline.add_from_set ( tmp_wp, true );
879
- }
880
-
881
- if ( jo.has_object ( " extend" ) ) {
882
- JsonObject tmp = jo.get_object ( " extend" );
883
- tmp.allow_omitted_members ();
884
- if ( tmp.has_array ( " weakpoint_sets" ) ) {
885
- for ( JsonValue jval : tmp.get_array ( " weakpoint_sets" ) ) {
886
- weakpoints_deferred.emplace_back ( jval.get_string () );
887
- }
888
- }
889
- if ( tmp.has_array ( " weakpoints" ) ) {
890
- ::weakpoints tmp_wp;
891
- tmp_wp.load ( tmp.get_array ( " weakpoints" ) );
892
- weakpoints_deferred_inline.add_from_set ( tmp_wp, true );
893
- }
894
- }
895
-
896
- if ( jo.has_object ( " delete" ) ) {
897
- JsonObject tmp = jo.get_object ( " delete" );
898
- tmp.allow_omitted_members ();
899
- if ( tmp.has_array ( " weakpoint_sets" ) ) {
900
- for ( JsonValue jval : tmp.get_array ( " weakpoint_sets" ) ) {
901
- weakpoints_id set_id ( jval.get_string () );
902
- auto iter = std::find ( weakpoints_deferred.begin (), weakpoints_deferred.end (), set_id );
903
- if ( iter != weakpoints_deferred.end () ) {
904
- weakpoints_deferred.erase ( iter );
905
- }
906
- }
907
- }
908
- if ( tmp.has_array ( " weakpoints" ) ) {
909
- ::weakpoints tmp_wp;
910
- tmp_wp.load ( tmp.get_array ( " weakpoints" ) );
911
- for ( const weakpoint &wp_del : tmp_wp.weakpoint_list ) {
912
- weakpoints_deferred_deleted.emplace ( wp_del.id );
913
- }
914
- weakpoints_deferred_inline.del_from_set ( tmp_wp );
915
- }
916
- }
868
+ optional ( jo, was_loaded, " weakpoints" , weakpoints_deferred_inline, weakpoints_reader{weakpoints_deferred_deleted} );
917
869
918
870
optional ( jo, was_loaded, " status_chance_multiplier" , status_chance_multiplier, numeric_bound_reader{0 .0f , 5 .0f },
919
871
1 .f );
0 commit comments