Skip to content

Commit

Permalink
added new conditions from 3.17 update
Browse files Browse the repository at this point in the history
- HasSearingExarchImplicit
- HasEaterOfWorldsImplicit
  • Loading branch information
Xeverous committed Feb 4, 2022
1 parent 0107a37 commit 6fa6f5c
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 36 deletions.
2 changes: 2 additions & 0 deletions doc/user/how_filters_work.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ BaseArmour [CMP] Integer+
BaseEvasion [CMP] Integer+
BaseEnergyShield [CMP] Integer+
BaseWard [CMP] Integer+
HasSearingExarchImplicit [CMP] Integer+
HasEaterOfWorldsImplicit [CMP] Integer+
Class [EQ] String+
BaseType [EQ] String+
Expand Down
6 changes: 6 additions & 0 deletions src/lib/fs/compiler/detail/conditions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,12 @@ add_numeric_comparison_condition(
case lang::numeric_comparison_condition_property::base_ward: {
return add_range_condition(cmp, intgr, condition_origin, set.base_ward, diagnostics);
}
case lang::numeric_comparison_condition_property::has_searing_exarch_implicit: {
return add_range_condition(cmp, intgr, condition_origin, set.has_searing_exarch_implicit, diagnostics);
}
case lang::numeric_comparison_condition_property::has_eater_of_worlds_implicit: {
return add_range_condition(cmp, intgr, condition_origin, set.has_eater_of_worlds_implicit, diagnostics);
}
}

push_error_internal_compiler_error(__func__, condition_origin, diagnostics);
Expand Down
4 changes: 3 additions & 1 deletion src/lib/fs/lang/condition_properties.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ enum class numeric_comparison_condition_property
base_armour,
base_evasion,
base_energy_shield,
base_ward
base_ward,
has_searing_exarch_implicit,
has_eater_of_worlds_implicit
};

// conditions which work with array of strings
Expand Down
38 changes: 20 additions & 18 deletions src/lib/fs/lang/condition_set.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -312,24 +312,26 @@ const lang::string* strings_condition::find_match(std::string_view value) const

void condition_set::generate(std::ostream& output_stream) const
{
output_range_condition(item_level, kw::item_level, output_stream);
output_range_condition(drop_level, kw::drop_level, output_stream);
output_range_condition(quality, kw::quality, output_stream);
output_range_condition(rarity, kw::rarity, output_stream);
output_range_condition(linked_sockets, kw::linked_sockets, output_stream);
output_range_condition(height, kw::height, output_stream);
output_range_condition(width, kw::width, output_stream);
output_range_condition(stack_size, kw::stack_size, output_stream);
output_range_condition(gem_level, kw::gem_level, output_stream);
output_range_condition(map_tier, kw::map_tier, output_stream);
output_range_condition(area_level, kw::area_level, output_stream);
output_range_condition(corrupted_mods, kw::corrupted_mods, output_stream);
output_range_condition(enchantment_passive_num, kw::enchantment_passive_num, output_stream);
output_range_condition(base_defence_percentile, kw::base_defence_percentile, output_stream);
output_range_condition(base_armour, kw::base_armour, output_stream);
output_range_condition(base_evasion, kw::base_evasion, output_stream);
output_range_condition(base_energy_shield, kw::base_energy_shield, output_stream);
output_range_condition(base_ward, kw::base_ward, output_stream);
output_range_condition(item_level, kw::item_level, output_stream);
output_range_condition(drop_level, kw::drop_level, output_stream);
output_range_condition(quality, kw::quality, output_stream);
output_range_condition(rarity, kw::rarity, output_stream);
output_range_condition(linked_sockets, kw::linked_sockets, output_stream);
output_range_condition(height, kw::height, output_stream);
output_range_condition(width, kw::width, output_stream);
output_range_condition(stack_size, kw::stack_size, output_stream);
output_range_condition(gem_level, kw::gem_level, output_stream);
output_range_condition(map_tier, kw::map_tier, output_stream);
output_range_condition(area_level, kw::area_level, output_stream);
output_range_condition(corrupted_mods, kw::corrupted_mods, output_stream);
output_range_condition(enchantment_passive_num, kw::enchantment_passive_num, output_stream);
output_range_condition(base_defence_percentile, kw::base_defence_percentile, output_stream);
output_range_condition(base_armour, kw::base_armour, output_stream);
output_range_condition(base_evasion, kw::base_evasion, output_stream);
output_range_condition(base_energy_shield, kw::base_energy_shield, output_stream);
output_range_condition(base_ward, kw::base_ward, output_stream);
output_range_condition(has_searing_exarch_implicit, kw::has_searing_exarch_implicit, output_stream);
output_range_condition(has_eater_of_worlds_implicit, kw::has_eater_of_worlds_implicit, output_stream);

output_gem_quality_type_condition(gem_quality_type, output_stream);

Expand Down
6 changes: 6 additions & 0 deletions src/lib/fs/lang/condition_set.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,8 @@ struct condition_set
integer_range_condition base_evasion;
integer_range_condition base_energy_shield;
integer_range_condition base_ward;
integer_range_condition has_searing_exarch_implicit;
integer_range_condition has_eater_of_worlds_implicit;
std::optional<boolean_condition> is_identified;
std::optional<boolean_condition> is_corrupted;
std::optional<boolean_condition> is_mirrored;
Expand Down Expand Up @@ -351,6 +353,8 @@ struct condition_set_match_result
&& is_not_failure_range(base_evasion)
&& is_not_failure_range(base_energy_shield)
&& is_not_failure_range(base_ward)
&& is_not_failure_range(has_searing_exarch_implicit)
&& is_not_failure_range(has_eater_of_worlds_implicit)
&& is_not_failure(class_)
&& is_not_failure(base_type)
&& is_not_failure(sockets)
Expand Down Expand Up @@ -395,6 +399,8 @@ struct condition_set_match_result
range_condition_match_result base_evasion;
range_condition_match_result base_energy_shield;
range_condition_match_result base_ward;
range_condition_match_result has_searing_exarch_implicit;
range_condition_match_result has_eater_of_worlds_implicit;
std::optional<condition_match_result> class_;
std::optional<condition_match_result> base_type;
std::optional<condition_match_result> sockets;
Expand Down
2 changes: 2 additions & 0 deletions src/lib/fs/lang/keywords.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ namespace rf
constexpr auto base_ward = "BaseWard";
constexpr auto scourged = "Scourged";
constexpr auto uber_blighted_map = "UberBlightedMap";
constexpr auto has_searing_exarch_implicit = "HasSearingExarchImplicit";
constexpr auto has_eater_of_worlds_implicit = "HasEaterOfWorldsImplicit";

constexpr auto r = 'R';
constexpr auto g = 'G';
Expand Down
36 changes: 19 additions & 17 deletions src/lib/fs/parser/detail/symbols.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,23 +144,25 @@ namespace rf
numeric_comparison_condition_properties_()
{
add
(lang::keywords::rf::item_level, lang::numeric_comparison_condition_property::item_level)
(lang::keywords::rf::drop_level, lang::numeric_comparison_condition_property::drop_level)
(lang::keywords::rf::quality, lang::numeric_comparison_condition_property::quality)
(lang::keywords::rf::linked_sockets, lang::numeric_comparison_condition_property::linked_sockets)
(lang::keywords::rf::height, lang::numeric_comparison_condition_property::height)
(lang::keywords::rf::width, lang::numeric_comparison_condition_property::width)
(lang::keywords::rf::stack_size, lang::numeric_comparison_condition_property::stack_size)
(lang::keywords::rf::gem_level, lang::numeric_comparison_condition_property::gem_level)
(lang::keywords::rf::map_tier, lang::numeric_comparison_condition_property::map_tier)
(lang::keywords::rf::area_level, lang::numeric_comparison_condition_property::area_level)
(lang::keywords::rf::corrupted_mods, lang::numeric_comparison_condition_property::corrupted_mods)
(lang::keywords::rf::enchantment_passive_num, lang::numeric_comparison_condition_property::enchantment_passive_num)
(lang::keywords::rf::base_defence_percentile, lang::numeric_comparison_condition_property::base_defence_percentile)
(lang::keywords::rf::base_armour, lang::numeric_comparison_condition_property::base_armour)
(lang::keywords::rf::base_evasion, lang::numeric_comparison_condition_property::base_evasion)
(lang::keywords::rf::base_energy_shield, lang::numeric_comparison_condition_property::base_energy_shield)
(lang::keywords::rf::base_ward, lang::numeric_comparison_condition_property::base_ward)
(lang::keywords::rf::item_level, lang::numeric_comparison_condition_property::item_level)
(lang::keywords::rf::drop_level, lang::numeric_comparison_condition_property::drop_level)
(lang::keywords::rf::quality, lang::numeric_comparison_condition_property::quality)
(lang::keywords::rf::linked_sockets, lang::numeric_comparison_condition_property::linked_sockets)
(lang::keywords::rf::height, lang::numeric_comparison_condition_property::height)
(lang::keywords::rf::width, lang::numeric_comparison_condition_property::width)
(lang::keywords::rf::stack_size, lang::numeric_comparison_condition_property::stack_size)
(lang::keywords::rf::gem_level, lang::numeric_comparison_condition_property::gem_level)
(lang::keywords::rf::map_tier, lang::numeric_comparison_condition_property::map_tier)
(lang::keywords::rf::area_level, lang::numeric_comparison_condition_property::area_level)
(lang::keywords::rf::corrupted_mods, lang::numeric_comparison_condition_property::corrupted_mods)
(lang::keywords::rf::enchantment_passive_num, lang::numeric_comparison_condition_property::enchantment_passive_num)
(lang::keywords::rf::base_defence_percentile, lang::numeric_comparison_condition_property::base_defence_percentile)
(lang::keywords::rf::base_armour, lang::numeric_comparison_condition_property::base_armour)
(lang::keywords::rf::base_evasion, lang::numeric_comparison_condition_property::base_evasion)
(lang::keywords::rf::base_energy_shield, lang::numeric_comparison_condition_property::base_energy_shield)
(lang::keywords::rf::base_ward, lang::numeric_comparison_condition_property::base_ward)
(lang::keywords::rf::has_searing_exarch_implicit, lang::numeric_comparison_condition_property::has_searing_exarch_implicit)
(lang::keywords::rf::has_eater_of_worlds_implicit, lang::numeric_comparison_condition_property::has_eater_of_worlds_implicit)
;
}
};
Expand Down
26 changes: 26 additions & 0 deletions src/test/compiler/filter_generation_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1435,6 +1435,32 @@ Show
Show
UberBlightedMap True
)";

BOOST_TEST(compare_strings(expected_filter, actual_filter));
}

BOOST_AUTO_TEST_CASE(siege_of_the_atlas_new_conditions)
{
const std::string actual_filter = generate_filter(minimal_input() + R"(
HasSearingExarchImplicit 5 { Show }
HasSearingExarchImplicit >= 4 { Show }
HasEaterOfWorldsImplicit 6 { Show }
HasEaterOfWorldsImplicit > 4 { Show }
)");
const std::string_view expected_filter =
R"(Show
HasSearingExarchImplicit = 5
Show
HasSearingExarchImplicit >= 4
Show
HasEaterOfWorldsImplicit = 6
Show
HasEaterOfWorldsImplicit > 4
)";

BOOST_TEST(compare_strings(expected_filter, actual_filter));
Expand Down

0 comments on commit 6fa6f5c

Please sign in to comment.