mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-18 10:47:57 -05:00
Make menu and item rect accept expressions as static values
This commit is contained in:
@ -270,6 +270,29 @@ namespace menu::event_handler_set_scope_sequences
|
||||
}
|
||||
};
|
||||
|
||||
class SequenceUiScriptStatement final : public SequenceGenericScriptStatement
|
||||
{
|
||||
public:
|
||||
explicit SequenceUiScriptStatement(std::initializer_list<Movable<std::unique_ptr<AbstractMatcher<SimpleParserValue>>>> matchers)
|
||||
: SequenceGenericScriptStatement()
|
||||
{
|
||||
const ScriptMatcherFactory create(this);
|
||||
|
||||
AddMatchers({
|
||||
create.And({
|
||||
create.ScriptKeyword("uiScript"),
|
||||
create.And(matchers)
|
||||
}).Capture(CAPTURE_SCRIPT_TOKEN),
|
||||
create.Optional(create.Char(';'))
|
||||
});
|
||||
}
|
||||
|
||||
static std::unique_ptr<SequenceUiScriptStatement> Create(std::initializer_list<Movable<std::unique_ptr<AbstractMatcher<SimpleParserValue>>>> matchers)
|
||||
{
|
||||
return std::make_unique<SequenceUiScriptStatement>(matchers);
|
||||
}
|
||||
};
|
||||
|
||||
class SequenceSetPlayerData final : public SequenceGenericScriptStatement
|
||||
{
|
||||
public:
|
||||
@ -653,6 +676,30 @@ void EventHandlerSetScopeSequences::AddSequences(FeatureLevel featureLevel)
|
||||
AddSequence(SequenceGenericScriptStatement::Create({create.ScriptKeyword("resolveError")}));
|
||||
AddSequence(std::make_unique<SequenceLerp>());
|
||||
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("StartServer")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("loadArenas")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("loadGameInfo")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("clearError")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("Quit")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("Controls")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("Leave")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("closeingame")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("update"), create.ScriptText()}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("startSingleplayer")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("getLanguage")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("verifyLanguage")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("updateLanguage")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("mutePlayer")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("openMenuOnDvar"), create.ScriptText(), create.Or({create.ScriptStrictNumeric(), create.ScriptText()}), create.ScriptText()}));
|
||||
AddSequence(
|
||||
SequenceUiScriptStatement::Create({create.ScriptKeyword("openMenuOnDvarNot"), create.ScriptText(), create.Or({create.ScriptStrictNumeric(), create.ScriptText()}), create.ScriptText()}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("closeMenuOnDvar"), create.ScriptText(), create.Or({create.ScriptStrictNumeric(), create.ScriptText()}), create.ScriptText()}));
|
||||
AddSequence(SequenceUiScriptStatement::Create(
|
||||
{create.ScriptKeyword("closeMenuOnDvarNot"), create.ScriptText(), create.Or({create.ScriptStrictNumeric(), create.ScriptText()}), create.ScriptText()}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("setRecommended")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("clearLoadErrorsSummary")}));
|
||||
AddSequence(SequenceUiScriptStatement::Create({create.ScriptKeyword("clearClientMatchData")}));
|
||||
|
||||
AddSequence(std::make_unique<SequenceIf>());
|
||||
AddSequence(std::make_unique<SequenceElseIf>());
|
||||
AddSequence(std::make_unique<SequenceElse>());
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "Generic/GenericKeywordPropertySequence.h"
|
||||
#include "Generic/GenericMenuEventHandlerSetPropertySequence.h"
|
||||
#include "Generic/GenericStringPropertySequence.h"
|
||||
#include "Parsing/Menu/Matcher/MenuExpressionMatchers.h"
|
||||
#include "Parsing/Menu/Matcher/MenuMatcherFactory.h"
|
||||
|
||||
using namespace menu;
|
||||
@ -142,24 +143,21 @@ namespace menu::item_scope_sequences
|
||||
|
||||
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;
|
||||
static constexpr auto CAPTURE_ALIGN_HORIZONTAL = 1;
|
||||
static constexpr auto CAPTURE_ALIGN_VERTICAL = 2;
|
||||
|
||||
public:
|
||||
SequenceRect()
|
||||
{
|
||||
const MenuMatcherFactory create(this);
|
||||
|
||||
AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION);
|
||||
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.NumericExpression(), // x
|
||||
create.NumericExpression(), // y
|
||||
create.NumericExpression(), // w
|
||||
create.NumericExpression(), // h
|
||||
create.Optional(create.And({
|
||||
create.Integer().Capture(CAPTURE_ALIGN_HORIZONTAL),
|
||||
create.Integer().Capture(CAPTURE_ALIGN_VERTICAL)
|
||||
@ -172,12 +170,16 @@ namespace menu::item_scope_sequences
|
||||
{
|
||||
assert(state->m_current_item);
|
||||
|
||||
const auto x = MenuMatcherFactory::TokenNumericExpressionValue(result);
|
||||
const auto y = MenuMatcherFactory::TokenNumericExpressionValue(result);
|
||||
const auto w = MenuMatcherFactory::TokenNumericExpressionValue(result);
|
||||
const auto h = MenuMatcherFactory::TokenNumericExpressionValue(result);
|
||||
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)),
|
||||
x,
|
||||
y,
|
||||
w,
|
||||
h,
|
||||
0, 0
|
||||
};
|
||||
|
||||
|
@ -79,10 +79,6 @@ namespace menu::menu_scope_sequences
|
||||
|
||||
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;
|
||||
|
||||
@ -91,12 +87,13 @@ namespace menu::menu_scope_sequences
|
||||
{
|
||||
const MenuMatcherFactory create(this);
|
||||
|
||||
AddLabeledMatchers(MenuExpressionMatchers().Expression(this), MenuExpressionMatchers::LABEL_EXPRESSION);
|
||||
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.NumericExpression(), // x
|
||||
create.NumericExpression(), // y
|
||||
create.NumericExpression(), // w
|
||||
create.NumericExpression(), // h
|
||||
create.Optional(create.And({
|
||||
create.Integer().Capture(CAPTURE_ALIGN_HORIZONTAL),
|
||||
create.Integer().Capture(CAPTURE_ALIGN_VERTICAL)
|
||||
@ -109,12 +106,16 @@ namespace menu::menu_scope_sequences
|
||||
{
|
||||
assert(state->m_current_menu);
|
||||
|
||||
const auto x = MenuMatcherFactory::TokenNumericExpressionValue(result);
|
||||
const auto y = MenuMatcherFactory::TokenNumericExpressionValue(result);
|
||||
const auto w = MenuMatcherFactory::TokenNumericExpressionValue(result);
|
||||
const auto h = MenuMatcherFactory::TokenNumericExpressionValue(result);
|
||||
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)),
|
||||
x,
|
||||
y,
|
||||
w,
|
||||
h,
|
||||
0, 0
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user