Skip to content

Commit 982b1e5

Browse files
committed
eoc: replace bootleg optional with proper one from generic_factory
1 parent 70f9c26 commit 982b1e5

14 files changed

+176
-449
lines changed

src/condition.cpp

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -831,9 +831,7 @@ conditional_t::func f_has_any_effect( const JsonObject &jo, std::string_view mem
831831
}
832832
dbl_or_var intensity = get_dbl_or_var( jo, "intensity", false, -1 );
833833
str_or_var bp;
834-
if( jo.has_member( "bodypart" ) ) {
835-
bp = get_str_or_var( jo.get_member( "bodypart" ), "bodypart", true );
836-
}
834+
optional( jo, false, "bodypart", bp );
837835

838836
return [effects_to_check, intensity, bp, is_npc]( const_dialogue const & d ) {
839837
bodypart_id bid = bp.evaluate( d ).empty() ? get_bp_from_str( d.reason ) :
@@ -854,9 +852,7 @@ conditional_t::func f_has_effect( const JsonObject &jo, std::string_view member,
854852
str_or_var effect_id = get_str_or_var( jo.get_member( member ), member, true );
855853
dbl_or_var intensity = get_dbl_or_var( jo, "intensity", false, -1 );
856854
str_or_var bp;
857-
if( jo.has_member( "bodypart" ) ) {
858-
bp = get_str_or_var( jo.get_member( "bodypart" ), "bodypart", true );
859-
}
855+
optional( jo, false, "bodypart", bp );
860856

861857
return [effect_id, intensity, bp, is_npc]( const_dialogue const & d ) {
862858
bodypart_id bid = bp.evaluate( d ).empty() ? get_bp_from_str( d.reason ) :
@@ -870,10 +866,8 @@ conditional_t::func f_need( const JsonObject &jo, std::string_view member, bool
870866
{
871867
str_or_var need = get_str_or_var( jo.get_member( member ), member, true );
872868
dbl_or_var dov;
873-
if( jo.has_int( "amount" ) ) {
874-
dov.min.deserialize( jo.get_member( "amount" ) );
875-
} else if( jo.has_object( "amount" ) ) {
876-
dov = get_dbl_or_var( jo, "amount" );
869+
if( jo.has_member( "amount" ) ) {
870+
mandatory( jo, false, "amount", dov );
877871
} else if( jo.has_string( "level" ) ) {
878872
const std::string &level = jo.get_string( "level" );
879873
auto flevel = sleepiness_level_strs.find( level );
@@ -922,9 +916,7 @@ conditional_t::func f_overmap_at_point( const JsonObject &jo, std::string_view m
922916
str_or_var location = get_str_or_var( jo.get_member( member ), member, true );
923917

924918
std::optional<var_info> loc_var;
925-
if( jo.has_object( "point" ) ) {
926-
loc_var = read_var_info( jo.get_object( "point" ) );
927-
}
919+
optional( jo, false, "point", loc_var );
928920

929921
return [loc_var, location]( const_dialogue const & d ) {
930922
tripoint_abs_ms target_location;
@@ -1602,9 +1594,7 @@ conditional_t::func f_is_outside( bool is_npc )
16021594
conditional_t::func f_tile_is_outside( const JsonObject &jo, std::string_view member )
16031595
{
16041596
std::optional<var_info> loc_var;
1605-
if( jo.has_object( member ) ) {
1606-
loc_var = read_var_info( jo.get_object( member ) );
1607-
}
1597+
optional( jo, false, member, loc_var );
16081598

16091599
return [loc_var]( const_dialogue const & d ) {
16101600
map &here = get_map();

src/condition.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,20 @@ struct enum_traits<jarg> {
3636
static constexpr bool is_flag_enum = true;
3737
};
3838

39+
// DEPRECATED. use mandatory/optional, deserialize, or JsonValue::read
3940
str_or_var get_str_or_var( const JsonValue &jv, std::string_view member, bool required = true,
4041
std::string_view default_val = "" );
42+
// DEPRECATED. use mandatory/optional, deserialize, or JsonValue::read
4143
translation_or_var get_translation_or_var( const JsonValue &jv, std::string_view member,
4244
bool required = true, const translation &default_val = {} );
45+
// DEPRECATED. use mandatory/optional, deserialize, or JsonValue::read
4346
dbl_or_var get_dbl_or_var( const JsonObject &jo, std::string_view member, bool required = true,
4447
double default_val = 0.0 );
48+
// DEPRECATED. use mandatory/optional, deserialize, or JsonValue::read
4549
duration_or_var get_duration_or_var( const JsonObject &jo, std::string_view member,
4650
bool required = true,
4751
time_duration default_val = 0_seconds );
52+
// DEPRECATED. use mandatory/optional, deserialize, or JsonValue::read
4853
var_info read_var_info( const JsonObject &jo );
4954
void write_var_value( var_type type, const std::string &name, dialogue *d,
5055
const std::string &value );

src/effect_on_condition.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ void effect_on_condition::load( const JsonObject &jo, std::string_view src )
8484
jo.throw_error( "A recurring effect_on_condition must be of type RECURRING." );
8585
}
8686
type = eoc_type::RECURRING;
87-
recurrence = get_duration_or_var( jo, "recurrence", false );
87+
optional( jo, was_loaded, "recurrence", recurrence );
8888
}
8989
if( type == eoc_type::NUM_EOC_TYPES ) {
9090
type = eoc_type::ACTIVATION;

src/emit.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
#include <map>
44
#include <utility>
55

6-
#include "condition.h"
76
#include "debug.h"
8-
#include "flexbuffer_json.h"
7+
#include "generic_factory.h"
98

109
static std::map<emit_id, emit> emits_all;
1110

@@ -41,11 +40,11 @@ void emit::load_emit( const JsonObject &jo )
4140
{
4241
emit et;
4342

44-
et.id_ = emit_id( jo.get_string( "id" ) );
45-
et.field_ = get_str_or_var( jo.get_member( "field" ), "field" );
46-
et.intensity_ = get_dbl_or_var( jo, "intensity", false, 1.0 );
47-
et.qty_ = get_dbl_or_var( jo, "qty", false, 1.0 );
48-
et.chance_ = get_dbl_or_var( jo, "chance", false, 100.0 );
43+
mandatory( jo, false, "id", et.id_ );
44+
mandatory( jo, false, "field", et.field_ );
45+
optional( jo, false, "intensity", et.intensity_, 1.0 );
46+
optional( jo, false, "qty", et.qty_, 1.0 );
47+
optional( jo, false, "chance", et.chance_, 100.0 );
4948

5049
emits_all[ et.id_ ] = et;
5150
}

src/iexamine_actors.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -428,9 +428,9 @@ void mortar_examine_actor::load( const JsonObject &jo, const std::string &src )
428428
optional( jo, false, "condition_fail_msg", condition_fail_msg,
429429
to_translation( "You can't use this mortar." ) );
430430

431-
aim_deviation = get_dbl_or_var( jo, "aim_deviation", false, 0.0f );
432-
aim_duration = get_duration_or_var( jo, "aim_duration", false, 0_seconds );
433-
flight_time = get_duration_or_var( jo, "flight_time", false, 0_seconds );
431+
optional( jo, false, "aim_deviation", aim_deviation, 0.0f );
432+
optional( jo, false, "aim_duration", aim_duration, 0_seconds );
433+
optional( jo, false, "flight_time", flight_time, 0_seconds );
434434

435435
for( JsonValue jv : jo.get_array( "effect_on_conditions" ) ) {
436436
eocs.emplace_back( effect_on_conditions::load_inline_eoc( jv, src ) );

src/magic.cpp

Lines changed: 44 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -393,122 +393,41 @@ void spell_type::load( const JsonObject &jo, std::string_view src )
393393
if( field_input != "none" ) {
394394
field = field_type_id( field_input );
395395
}
396-
if( !was_loaded || jo.has_member( "field_chance" ) ) {
397-
field_chance = get_dbl_or_var( jo, "field_chance", false, field_chance_default );
398-
}
399-
if( !was_loaded || jo.has_member( "min_field_intensity" ) ) {
400-
min_field_intensity = get_dbl_or_var( jo, "min_field_intensity", false,
401-
min_field_intensity_default );
402-
}
403-
if( !was_loaded || jo.has_member( "max_field_intensity" ) ) {
404-
max_field_intensity = get_dbl_or_var( jo, "max_field_intensity", false,
405-
max_field_intensity_default );
406-
}
407-
if( !was_loaded || jo.has_member( "field_intensity_increment" ) ) {
408-
field_intensity_increment = get_dbl_or_var( jo, "field_intensity_increment", false,
409-
field_intensity_increment_default );
410-
}
411-
if( !was_loaded || jo.has_member( "field_intensity_variance" ) ) {
412-
field_intensity_variance = get_dbl_or_var( jo, "field_intensity_variance", false,
413-
field_intensity_variance_default );
414-
}
415-
416-
if( !was_loaded || jo.has_member( "min_accuracy" ) ) {
417-
min_accuracy = get_dbl_or_var( jo, "min_accuracy", false, min_accuracy_default );
418-
}
419-
if( !was_loaded || jo.has_member( "accuracy_increment" ) ) {
420-
accuracy_increment = get_dbl_or_var( jo, "accuracy_increment", false,
421-
accuracy_increment_default );
422-
}
423-
if( !was_loaded || jo.has_member( "max_accuracy" ) ) {
424-
max_accuracy = get_dbl_or_var( jo, "max_accuracy", false, max_accuracy_default );
425-
}
426-
if( !was_loaded || jo.has_member( "min_damage" ) ) {
427-
min_damage = get_dbl_or_var( jo, "min_damage", false, min_damage_default );
428-
}
429-
if( !was_loaded || jo.has_member( "damage_increment" ) ) {
430-
damage_increment = get_dbl_or_var( jo, "damage_increment", false,
431-
damage_increment_default );
432-
}
433-
if( !was_loaded || jo.has_member( "max_damage" ) ) {
434-
max_damage = get_dbl_or_var( jo, "max_damage", false, max_damage_default );
435-
}
436-
437-
if( !was_loaded || jo.has_member( "min_range" ) ) {
438-
min_range = get_dbl_or_var( jo, "min_range", false, min_range_default );
439-
}
440-
if( !was_loaded || jo.has_member( "range_increment" ) ) {
441-
range_increment = get_dbl_or_var( jo, "range_increment", false, range_increment_default );
442-
}
443-
if( !was_loaded || jo.has_member( "max_range" ) ) {
444-
max_range = get_dbl_or_var( jo, "max_range", false, max_range_default );
445-
}
446-
447-
if( !was_loaded || jo.has_member( "min_aoe" ) ) {
448-
min_aoe = get_dbl_or_var( jo, "min_aoe", false, min_aoe_default );
449-
}
450-
if( !was_loaded || jo.has_member( "aoe_increment" ) ) {
451-
aoe_increment = get_dbl_or_var( jo, "aoe_increment", false, aoe_increment_default );
452-
}
453-
if( !was_loaded || jo.has_member( "max_aoe" ) ) {
454-
max_aoe = get_dbl_or_var( jo, "max_aoe", false, max_aoe_default );
455-
}
456-
if( !was_loaded || jo.has_member( "min_dot" ) ) {
457-
min_dot = get_dbl_or_var( jo, "min_dot", false, min_dot_default );
458-
}
459-
if( !was_loaded || jo.has_member( "dot_increment" ) ) {
460-
dot_increment = get_dbl_or_var( jo, "dot_increment", false, dot_increment_default );
461-
}
462-
if( !was_loaded || jo.has_member( "max_dot" ) ) {
463-
max_dot = get_dbl_or_var( jo, "max_dot", false, max_dot_default );
464-
}
465-
466-
if( !was_loaded || jo.has_member( "min_duration" ) ) {
467-
min_duration = get_dbl_or_var( jo, "min_duration", false, min_duration_default );
468-
}
469-
if( !was_loaded || jo.has_member( "duration_increment" ) ) {
470-
duration_increment = get_dbl_or_var( jo, "duration_increment", false,
471-
duration_increment_default );
472-
}
473-
if( !was_loaded || jo.has_member( "max_duration" ) ) {
474-
max_duration = get_dbl_or_var( jo, "max_duration", false, max_duration_default );
475-
}
476-
477-
if( !was_loaded || jo.has_member( "min_pierce" ) ) {
478-
min_pierce = get_dbl_or_var( jo, "min_pierce", false, min_pierce_default );
479-
}
480-
if( !was_loaded || jo.has_member( "pierce_increment" ) ) {
481-
pierce_increment = get_dbl_or_var( jo, "pierce_increment", false,
482-
pierce_increment_default );
483-
}
484-
if( !was_loaded || jo.has_member( "max_pierce" ) ) {
485-
max_pierce = get_dbl_or_var( jo, "max_pierce", false, max_pierce_default );
486-
}
487-
488-
if( !was_loaded || jo.has_member( "min_bash_scaling" ) ) {
489-
min_bash_scaling = get_dbl_or_var( jo, "min_bash_scaling", false, min_bash_scaling_default );
490-
}
491-
if( !was_loaded || jo.has_member( "bash_scaling_increment" ) ) {
492-
bash_scaling_increment = get_dbl_or_var( jo, "bash_scaling_increment", false,
493-
bash_scaling_increment_default );
494-
}
495-
if( !was_loaded || jo.has_member( "max_bash_scaling" ) ) {
496-
max_bash_scaling = get_dbl_or_var( jo, "max_bash_scaling", false, max_bash_scaling_default );
497-
}
498-
499-
if( !was_loaded || jo.has_member( "base_energy_cost" ) ) {
500-
base_energy_cost = get_dbl_or_var( jo, "base_energy_cost", false,
501-
base_energy_cost_default );
502-
}
503-
if( jo.has_member( "final_energy_cost" ) ) {
504-
final_energy_cost = get_dbl_or_var( jo, "final_energy_cost" );
505-
} else if( !was_loaded ) {
506-
final_energy_cost = base_energy_cost;
507-
}
508-
if( !was_loaded || jo.has_member( "energy_increment" ) ) {
509-
energy_increment = get_dbl_or_var( jo, "energy_increment", false,
510-
energy_increment_default );
511-
}
396+
optional( jo, was_loaded, "field_chance", field_chance, field_chance_default );
397+
optional( jo, was_loaded, "min_field_intensity", min_field_intensity, min_field_intensity_default );
398+
optional( jo, was_loaded, "max_field_intensity", max_field_intensity, max_field_intensity_default );
399+
optional( jo, was_loaded, "field_intensity_increment", field_intensity_increment,
400+
field_intensity_increment_default );
401+
optional( jo, was_loaded, "field_intensity_variance", field_intensity_variance,
402+
field_intensity_variance_default );
403+
optional( jo, was_loaded, "min_accuracy", min_accuracy, min_accuracy_default );
404+
optional( jo, was_loaded, "accuracy_increment", accuracy_increment, accuracy_increment_default );
405+
optional( jo, was_loaded, "max_accuracy", max_accuracy, max_accuracy_default );
406+
optional( jo, was_loaded, "min_damage", min_damage, min_damage_default );
407+
optional( jo, was_loaded, "damage_increment", damage_increment, damage_increment_default );
408+
optional( jo, was_loaded, "max_damage", max_damage, max_damage_default );
409+
optional( jo, was_loaded, "min_range", min_range, min_range_default );
410+
optional( jo, was_loaded, "range_increment", range_increment, range_increment_default );
411+
optional( jo, was_loaded, "max_range", max_range, max_range_default );
412+
optional( jo, was_loaded, "min_aoe", min_aoe, min_aoe_default );
413+
optional( jo, was_loaded, "aoe_increment", aoe_increment, aoe_increment_default );
414+
optional( jo, was_loaded, "max_aoe", max_aoe, max_aoe_default );
415+
optional( jo, was_loaded, "min_dot", min_dot, min_dot_default );
416+
optional( jo, was_loaded, "dot_increment", dot_increment, dot_increment_default );
417+
optional( jo, was_loaded, "max_dot", max_dot, max_dot_default );
418+
optional( jo, was_loaded, "min_duration", min_duration, min_duration_default );
419+
optional( jo, was_loaded, "duration_increment", duration_increment, duration_increment_default );
420+
optional( jo, was_loaded, "max_duration", max_duration, max_duration_default );
421+
optional( jo, was_loaded, "min_pierce", min_pierce, min_pierce_default );
422+
optional( jo, was_loaded, "pierce_increment", pierce_increment, pierce_increment_default );
423+
optional( jo, was_loaded, "max_pierce", max_pierce, max_pierce_default );
424+
optional( jo, was_loaded, "min_bash_scaling", min_bash_scaling, min_bash_scaling_default );
425+
optional( jo, was_loaded, "bash_scaling_increment", bash_scaling_increment,
426+
bash_scaling_increment_default );
427+
optional( jo, was_loaded, "max_bash_scaling", max_bash_scaling, max_bash_scaling_default );
428+
optional( jo, was_loaded, "base_energy_cost", base_energy_cost, base_energy_cost_default );
429+
optional( jo, was_loaded, "final_energy_cost", final_energy_cost, base_energy_cost );
430+
optional( jo, was_loaded, "energy_increment", energy_increment, energy_increment_default );
512431

513432
optional( jo, was_loaded, "spell_class", spell_class, spell_class_default );
514433
if( jo.has_string( "energy_source" ) ) {
@@ -529,33 +448,15 @@ void spell_type::load( const JsonObject &jo, std::string_view src )
529448
debugmsg( "spell id:%s has a get_level_formula_id or exp_for_level_formula_id but not the other! This breaks the calculations for xp/level!",
530449
id.c_str() );
531450
}
532-
if( !was_loaded || jo.has_member( "difficulty" ) ) {
533-
difficulty = get_dbl_or_var( jo, "difficulty", false, difficulty_default );
534-
}
535-
if( !was_loaded || jo.has_member( "multiple_projectiles" ) ) {
536-
multiple_projectiles = get_dbl_or_var( jo, "multiple_projectiles", false,
537-
multiple_projectiles_default );
538-
}
539-
if( !was_loaded || jo.has_member( "max_level" ) ) {
540-
max_level = get_dbl_or_var( jo, "max_level", false, max_level_default );
541-
}
542-
543-
if( !was_loaded || jo.has_member( "base_casting_time" ) ) {
544-
base_casting_time = get_dbl_or_var( jo, "base_casting_time", false,
545-
base_casting_time_default );
546-
}
547-
if( jo.has_member( "final_casting_time" ) ) {
548-
final_casting_time = get_dbl_or_var( jo, "final_casting_time" );
549-
} else if( !was_loaded ) {
550-
final_casting_time = base_casting_time;
551-
}
552-
if( !was_loaded || jo.has_member( "max_damage" ) ) {
553-
max_damage = get_dbl_or_var( jo, "max_damage", false, max_damage_default );
554-
}
555-
if( !was_loaded || jo.has_member( "casting_time_increment" ) ) {
556-
casting_time_increment = get_dbl_or_var( jo, "casting_time_increment", false,
557-
casting_time_increment_default );
558-
}
451+
optional( jo, was_loaded, "difficulty", difficulty, difficulty_default );
452+
optional( jo, was_loaded, "multiple_projectiles", multiple_projectiles,
453+
multiple_projectiles_default );
454+
optional( jo, was_loaded, "max_level", max_level, max_level_default );
455+
optional( jo, was_loaded, "base_casting_time", base_casting_time, base_casting_time_default );
456+
optional( jo, was_loaded, "final_casting_time", final_casting_time, base_casting_time );
457+
optional( jo, was_loaded, "max_damage", max_damage, max_damage_default );
458+
optional( jo, was_loaded, "casting_time_increment", casting_time_increment,
459+
casting_time_increment_default );
559460

560461
for( const JsonMember member : jo.get_object( "learn_spells" ) ) {
561462
learn_spells.insert( std::pair<std::string, int>( member.name(), member.get_int() ) );

src/magic_enchantment.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ void enchantment::load( const JsonObject &jo, std::string_view,
607607
}
608608
}
609609

610-
_vision.range = get_dbl_or_var( vision_obj, "distance" );
610+
mandatory( vision_obj, was_loaded, "distance", _vision.range );
611611
read_condition( vision_obj, "condition", _vision.condition, true );
612612
optional( vision_obj, was_loaded, "precise", _vision.precise );
613613
optional( vision_obj, was_loaded, "ignores_aiming_cone", _vision.ignores_aiming_cone );

src/magic_type.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "magic_type.h"
22

3-
#include "condition.h"
43
#include "debug.h"
54
#include "effect_on_condition.h"
65
#include "flexbuffer_json.h"
@@ -70,14 +69,9 @@ void magic_type::load( const JsonObject &jo, std::string_view src )
7069
}
7170
optional( jo, was_loaded, "cannot_cast_message", cannot_cast_message );
7271
optional( jo, was_loaded, "max_book_level", max_book_level );
73-
if( !was_loaded || jo.has_member( "failure_cost_percent" ) ) {
74-
failure_cost_percent = get_dbl_or_var( jo, "failure_cost_percent", false,
75-
0.0f );
76-
}
77-
if( !was_loaded || jo.has_member( "failure_exp_percent" ) ) {
78-
failure_exp_percent = get_dbl_or_var( jo, "failure_exp_percent", false,
79-
0.2f );
80-
}
72+
optional( jo, was_loaded, "failure_cost_percent", failure_cost_percent, 0.0f );
73+
optional( jo, was_loaded, "failure_exp_percent", failure_exp_percent, 0.2f );
74+
8175
if( !was_loaded ) {
8276
for( JsonValue jv : jo.get_array( "failure_eocs" ) ) {
8377
failure_eocs.emplace_back( effect_on_conditions::load_inline_eoc( jv, src ) );

0 commit comments

Comments
 (0)