From 5b087e0d31ca18d9eea3c9e65b2df1285536755e Mon Sep 17 00:00:00 2001 From: Jan Date: Thu, 25 Nov 2021 19:22:14 +0100 Subject: [PATCH] Add missing itemscope and menuscope sequences --- .../Parsing/Menu/Domain/CommonMenuDef.h | 1 + .../Menu/Sequence/ItemScopeSequences.cpp | 130 +++++++++++------- .../Menu/Sequence/MenuScopeSequences.cpp | 88 ++++++------ 3 files changed, 131 insertions(+), 88 deletions(-) diff --git a/src/ObjLoading/Parsing/Menu/Domain/CommonMenuDef.h b/src/ObjLoading/Parsing/Menu/Domain/CommonMenuDef.h index bac7f8a4..907742e3 100644 --- a/src/ObjLoading/Parsing/Menu/Domain/CommonMenuDef.h +++ b/src/ObjLoading/Parsing/Menu/Domain/CommonMenuDef.h @@ -24,6 +24,7 @@ namespace menu CommonColor m_fore_color; CommonColor m_border_color; CommonColor m_focus_color; + CommonColor m_outline_color; std::string m_background; int m_owner_draw; int m_owner_draw_flags; diff --git a/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp b/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp index 30a9a22a..28d5126b 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp @@ -191,6 +191,33 @@ namespace menu::item_scope_sequences } }; + class SequenceOrigin final : public MenuFileParser::sequence_t + { + static constexpr auto CAPTURE_X = 1; + static constexpr auto CAPTURE_Y = 2; + + public: + SequenceOrigin() + { + const MenuMatcherFactory create(this); + + AddMatchers({ + create.KeywordIgnoreCase("origin"), + create.Numeric().Capture(CAPTURE_X), + create.Numeric().Capture(CAPTURE_Y) + }); + } + + protected: + void ProcessMatch(MenuFileParserState* state, SequenceResult& result) const override + { + assert(state->m_current_item); + + state->m_current_item->m_rect.x = MenuMatcherFactory::TokenNumericFloatingPointValue(result.NextCapture(CAPTURE_X)); + state->m_current_item->m_rect.y = MenuMatcherFactory::TokenNumericFloatingPointValue(result.NextCapture(CAPTURE_Y)); + } + }; + class SequenceDecodeEffect final : public MenuFileParser::sequence_t { static constexpr auto CAPTURE_LETTER_TIME = 1; @@ -518,6 +545,7 @@ void ItemScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_item->m_text = value; })); + // textfile AddSequence(std::make_unique("textsavegame", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_item->m_text_save_game = true; @@ -531,6 +559,11 @@ void ItemScopeSequences::AddSequences(FeatureLevel featureLevel) state->m_current_item->m_group = value; })); AddSequence(std::make_unique()); + AddSequence(std::make_unique()); + // rect480 + // rect720 + // pos480 + // pos720 AddSequence(std::make_unique("style", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_style = value; @@ -559,6 +592,14 @@ void ItemScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_item->m_border_size = value; })); + AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("visible", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_visible_expression = std::move(value); + })); + AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("disabled", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_disabled_expression = std::move(value); + })); AddSequence(std::make_unique("ownerdraw", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_owner_draw = value; @@ -619,6 +660,43 @@ void ItemScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_item->m_background = value; })); + AddSequence(std::make_unique("onFocus", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_on_focus = std::move(value); + })); + AddSequence(std::make_unique("leaveFocus", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_on_leave_focus = std::move(value); + })); + AddSequence(std::make_unique("mouseEnter", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_on_mouse_enter = std::move(value); + })); + AddSequence(std::make_unique("mouseExit", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_on_mouse_exit = std::move(value); + })); + AddSequence(std::make_unique("mouseEnterText", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_on_mouse_enter_text = std::move(value); + })); + AddSequence(std::make_unique("mouseExitText", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_on_mouse_exit_text = std::move(value); + })); + AddSequence(std::make_unique("action", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_on_action = std::move(value); + })); + AddSequence(std::make_unique("accept", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_item->m_on_accept = std::move(value); + })); + // special + AddSequence(std::make_unique("dvar", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) + { + state->m_current_item->m_dvar = value; + })); AddSequence(std::make_unique("focusSound", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_item->m_focus_sound = value; @@ -627,18 +705,14 @@ void ItemScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_item->m_owner_draw_flags |= value; })); - AddSequence(std::make_unique("dvar", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) + AddSequence(std::make_unique("enableDvar", [](const MenuFileParserState* state, const TokenPos&, std::vector value) { - state->m_current_item->m_dvar = value; + state->m_current_item->m_enable_dvar = std::move(value); })); AddSequence(std::make_unique("dvarTest", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_item->m_dvar_test = value; })); - AddSequence(std::make_unique("enableDvar", [](const MenuFileParserState* state, const TokenPos&, std::vector value) - { - state->m_current_item->m_enable_dvar = std::move(value); - })); AddSequence(std::make_unique("disableDvar", [](const MenuFileParserState* state, const TokenPos&, std::vector value) { state->m_current_item->m_disable_dvar = std::move(value); @@ -655,6 +729,8 @@ void ItemScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_item->m_focus_dvar = std::move(value); })); + AddSequence(std::make_unique()); + AddSequence(std::make_unique()); AddSequence(std::make_unique("gamemsgwindowindex", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_game_message_window_index = value; @@ -664,14 +740,6 @@ void ItemScopeSequences::AddSequences(FeatureLevel featureLevel) state->m_current_item->m_game_message_window_mode = value; })); AddSequence(std::make_unique()); - AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("visible", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_visible_expression = std::move(value); - })); - AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("disabled", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_disabled_expression = std::move(value); - })); AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "disabled"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_disabled_expression = std::move(value); @@ -764,40 +832,6 @@ void ItemScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_item->m_backcolor_expressions.m_rgb_exp = std::move(value); })); - AddSequence(std::make_unique("onFocus", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_on_focus = std::move(value); - })); - AddSequence(std::make_unique("leaveFocus", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_on_leave_focus = std::move(value); - })); - AddSequence(std::make_unique("mouseEnter", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_on_mouse_enter = std::move(value); - })); - AddSequence(std::make_unique("mouseExit", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_on_mouse_exit = std::move(value); - })); - AddSequence(std::make_unique("mouseEnterText", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_on_mouse_enter_text = std::move(value); - })); - AddSequence(std::make_unique("mouseExitText", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_on_mouse_exit_text = std::move(value); - })); - AddSequence(std::make_unique("action", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_on_action = std::move(value); - })); - AddSequence(std::make_unique("accept", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_item->m_on_accept = std::move(value); - })); - AddSequence(std::make_unique()); - AddSequence(std::make_unique()); // ============== ListBox ============== AddSequence(std::make_unique()); diff --git a/src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.cpp b/src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.cpp index ef7a119d..edfb2bd0 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.cpp @@ -141,7 +141,7 @@ namespace menu::menu_scope_sequences create.KeywordIgnoreCase("execKey"), create.String().Capture(CAPTURE_KEY), create.Char('{') - }); + }); } protected: @@ -177,7 +177,7 @@ namespace menu::menu_scope_sequences create.KeywordIgnoreCase("execKeyInt"), create.Integer().Capture(CAPTURE_KEY), create.Char('{') - }); + }); } protected: @@ -227,10 +227,34 @@ void MenuScopeSequences::AddSequences(FeatureLevel featureLevel) state->m_current_menu->m_decoration = true; })); AddSequence(std::make_unique()); + // rect480 + // rect720 + // pos480 + // pos720 AddSequence(std::make_unique("style", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_menu->m_style = value; })); + AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("visible", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_menu->m_visible_expression = std::move(value); + })); + AddSequence(std::make_unique("onOpen", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_menu->m_on_open = std::move(value); + })); + AddSequence(std::make_unique("onClose", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_menu->m_on_close = std::move(value); + })); + AddSequence(std::make_unique("onRequestClose", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_menu->m_on_request_close = std::move(value); + })); + AddSequence(std::make_unique("onESC", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_menu->m_on_esc = std::move(value); + })); AddSequence(std::make_unique("border", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_menu->m_border = value; @@ -255,6 +279,10 @@ void MenuScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_menu->m_focus_color = value; })); + AddSequence(std::make_unique("outlinecolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) + { + state->m_current_menu->m_outline_color = value; + })); AddSequence(std::make_unique("background", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_menu->m_background = value; @@ -275,6 +303,22 @@ void MenuScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_menu->m_sound_loop = value; })); + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "X"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_menu->m_rect_x_exp = std::move(value); + })); + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "Y"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_menu->m_rect_y_exp = std::move(value); + })); + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "W"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_menu->m_rect_w_exp = std::move(value); + })); + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "H"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) + { + state->m_current_menu->m_rect_h_exp = std::move(value); + })); AddSequence(std::make_unique("popup", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_popup = true; @@ -295,6 +339,8 @@ void MenuScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_menu->m_fade_in_amount = value; })); + AddSequence(std::make_unique()); + AddSequence(std::make_unique()); AddSequence(std::make_unique("blurWorld", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_menu->m_blur_radius = value; @@ -323,42 +369,4 @@ void MenuScopeSequences::AddSequences(FeatureLevel featureLevel) { state->m_current_menu->m_text_only_focus = true; })); - AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("visible", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_menu->m_visible_expression = std::move(value); - })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "X"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_menu->m_rect_x_exp = std::move(value); - })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "Y"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_menu->m_rect_y_exp = std::move(value); - })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "W"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_menu->m_rect_w_exp = std::move(value); - })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "H"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_menu->m_rect_h_exp = std::move(value); - })); - AddSequence(std::make_unique("onOpen", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_menu->m_on_open = std::move(value); - })); - AddSequence(std::make_unique("onClose", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_menu->m_on_close = std::move(value); - })); - AddSequence(std::make_unique("onRequestClose", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_menu->m_on_request_close = std::move(value); - })); - AddSequence(std::make_unique("onESC", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) - { - state->m_current_menu->m_on_esc = std::move(value); - })); - AddSequence(std::make_unique()); - AddSequence(std::make_unique()); }