#include "MenuPropertySequences.h" #include "GenericBoolPropertySequence.h" #include "GenericColorPropertySequence.h" #include "GenericExpressionPropertySequence.h" #include "GenericFloatingPointPropertySequence.h" #include "GenericIntPropertySequence.h" #include "GenericKeywordPropertySequence.h" #include "GenericStringPropertySequence.h" #include "Parsing/Menu/Matcher/MenuMatcherFactory.h" #include "Parsing/Menu/Domain/CommonMenuTypes.h" #include "Parsing/Menu/Matcher/MenuCommonMatchers.h" using namespace menu; namespace menu::menu_properties { class SequenceRect final : public MenuFileParser::sequence_t { static constexpr auto CAPTURE_X = 1; static constexpr auto CAPTURE_Y = 2; static constexpr auto CAPTURE_W = 3; static constexpr auto CAPTURE_H = 4; static constexpr auto CAPTURE_ALIGN_HORIZONTAL = 5; static constexpr auto CAPTURE_ALIGN_VERTICAL = 6; public: SequenceRect() { const MenuMatcherFactory create(this); AddMatchers({ create.KeywordIgnoreCase("rect"), create.Numeric().Capture(CAPTURE_X), create.Numeric().Capture(CAPTURE_Y), create.Numeric().Capture(CAPTURE_W), create.Numeric().Capture(CAPTURE_H), create.Optional(create.And({ create.Integer().Capture(CAPTURE_ALIGN_HORIZONTAL), create.Integer().Capture(CAPTURE_ALIGN_VERTICAL) })) }); } protected: void ProcessMatch(MenuFileParserState* state, SequenceResult& result) const override { assert(state->m_current_menu); CommonRect rect { MenuMatcherFactory::TokenNumericFloatingPointValue(result.NextCapture(CAPTURE_X)), MenuMatcherFactory::TokenNumericFloatingPointValue(result.NextCapture(CAPTURE_Y)), MenuMatcherFactory::TokenNumericFloatingPointValue(result.NextCapture(CAPTURE_W)), MenuMatcherFactory::TokenNumericFloatingPointValue(result.NextCapture(CAPTURE_H)), 0, 0 }; if (result.HasNextCapture(CAPTURE_ALIGN_HORIZONTAL) && result.HasNextCapture(CAPTURE_ALIGN_VERTICAL)) { rect.horizontalAlign = result.NextCapture(CAPTURE_ALIGN_HORIZONTAL).IntegerValue(); rect.verticalAlign = result.NextCapture(CAPTURE_ALIGN_VERTICAL).IntegerValue(); } state->m_current_menu->m_rect = rect; } }; } using namespace menu_properties; MenuPropertySequences::MenuPropertySequences(std::vector>& allSequences, std::vector& scopeSequences) : AbstractPropertySequenceHolder(allSequences, scopeSequences) { } void MenuPropertySequences::AddSequences(FeatureLevel featureLevel) { AddSequence(std::make_unique("name", [](const MenuFileParserState* state, const std::string& value) { state->m_current_menu->m_name = value; })); AddSequence(std::make_unique("fullScreen", [](const MenuFileParserState* state, const bool value) { state->m_current_menu->m_full_screen = value; })); AddSequence(std::make_unique("screenSpace", [](const MenuFileParserState* state) { state->m_current_menu->m_screen_space = true; })); AddSequence(std::make_unique("decoration", [](const MenuFileParserState* state) { state->m_current_menu->m_decoration = true; })); AddSequence(std::make_unique()); AddSequence(std::make_unique("style", [](const MenuFileParserState* state, const int value) { state->m_current_menu->m_style = value; })); AddSequence(std::make_unique("border", [](const MenuFileParserState* state, const int value) { state->m_current_menu->m_border = value; })); AddSequence(std::make_unique("borderSize", [](const MenuFileParserState* state, const double value) { state->m_current_menu->m_border_size = value; })); AddSequence(std::make_unique("backcolor", [](const MenuFileParserState* state, const CommonColor value) { state->m_current_menu->m_back_color = value; })); AddSequence(std::make_unique("forecolor", [](const MenuFileParserState* state, const CommonColor value) { state->m_current_menu->m_fore_color = value; })); AddSequence(std::make_unique("bordercolor", [](const MenuFileParserState* state, const CommonColor value) { state->m_current_menu->m_border_color = value; })); AddSequence(std::make_unique("focuscolor", [](const MenuFileParserState* state, const CommonColor value) { state->m_current_menu->m_focus_color = value; })); AddSequence(std::make_unique("background", [](const MenuFileParserState* state, const std::string& value) { state->m_current_menu->m_background = value; })); AddSequence(std::make_unique("ownerdraw", [](const MenuFileParserState* state, const int value) { state->m_current_menu->m_owner_draw = value; })); AddSequence(std::make_unique("ownerdrawFlag", [](const MenuFileParserState* state, const int value) { state->m_current_menu->m_owner_draw_flags |= value; })); AddSequence(std::make_unique("outOfBoundsClick", [](const MenuFileParserState* state) { state->m_current_menu->m_out_of_bounds_click = true; })); AddSequence(std::make_unique("soundLoop", [](const MenuFileParserState* state, const std::string& value) { state->m_current_menu->m_sound_loop = value; })); AddSequence(std::make_unique("popup", [](const MenuFileParserState* state) { state->m_current_menu->m_popup = true; })); AddSequence(std::make_unique("fadeClamp", [](const MenuFileParserState* state, const double value) { state->m_current_menu->m_fade_clamp = value; })); AddSequence(std::make_unique("fadeCycle", [](const MenuFileParserState* state, const int value) { state->m_current_menu->m_fade_cycle = value; })); AddSequence(std::make_unique("fadeAmount", [](const MenuFileParserState* state, const double value) { state->m_current_menu->m_fade_amount = value; })); AddSequence(std::make_unique("fadeInAmount", [](const MenuFileParserState* state, const double value) { state->m_current_menu->m_fade_in_amount = value; })); AddSequence(std::make_unique("blurWorld", [](const MenuFileParserState* state, const double value) { state->m_current_menu->m_blur_radius = value; })); AddSequence(std::make_unique("legacySplitScreenScale", [](const MenuFileParserState* state) { state->m_current_menu->m_legacy_split_screen_scale = true; })); AddSequence(std::make_unique("hiddenDuringScope", [](const MenuFileParserState* state) { state->m_current_menu->m_hidden_during_scope = true; })); AddSequence(std::make_unique("hiddenDuringFlashbang", [](const MenuFileParserState* state) { state->m_current_menu->m_hidden_during_flashbang = true; })); AddSequence(std::make_unique("hiddenDuringUI", [](const MenuFileParserState* state) { state->m_current_menu->m_hidden_during_ui = true; })); AddSequence(std::make_unique("allowedBinding", [](const MenuFileParserState* state, const std::string& value) { state->m_current_menu->m_allowed_binding = value; })); AddSequence(std::make_unique("textOnlyFocus", [](const MenuFileParserState* state) { state->m_current_menu->m_text_only_focus = true; })); AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("visible", [](const MenuFileParserState* state, std::unique_ptr value) { state->m_current_menu->m_visible_expression = std::move(value); })); AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "X"}, [](const MenuFileParserState* state, std::unique_ptr value) { state->m_current_menu->m_rect_x_exp = std::move(value); })); AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "Y"}, [](const MenuFileParserState* state, std::unique_ptr value) { state->m_current_menu->m_rect_y_exp = std::move(value); })); AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "W"}, [](const MenuFileParserState* state, std::unique_ptr value) { state->m_current_menu->m_rect_w_exp = std::move(value); })); AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "H"}, [](const MenuFileParserState* state, std::unique_ptr value) { state->m_current_menu->m_rect_h_exp = std::move(value); })); }