Allow event-based extensions to declare unified variable parameters (#6588)

- Don't show in changelog
This commit is contained in:
D8H
2024-05-24 12:27:47 +02:00
committed by GitHub
parent 916e642465
commit 0fd25c381a
3 changed files with 73 additions and 1 deletions

View File

@@ -66,6 +66,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAdvancedExtension(
.SetRelevantForFunctionEventsOnly()
.MarkAsAdvanced();
// Deprecated
extension
.AddAction("CopyArgumentToVariable",
_("Copy function parameter to variable"),
@@ -78,9 +79,25 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAdvancedExtension(
.SetHelpPath("/events/functions/return")
.AddParameter("functionParameterName", _("Parameter name"), "variable")
.AddParameter("scenevar", _("Scene variable"))
.SetHidden()
.MarkAsAdvanced();
extension
.AddAction("CopyArgumentToVariable2",
_("Copy function parameter to variable"),
_("Copy a function parameter (also called \"argument\") to a variable. "
"The parameter type must be a variable."),
_("Copy the parameter _PARAM0_ into the variable _PARAM1_"),
"",
"res/function32.png",
"res/function32.png")
.SetHelpPath("/events/functions/return")
.AddParameter("functionParameterName", _("Parameter name"), "variable")
.AddParameter("variable", _("Variable"))
.SetRelevantForFunctionEventsOnly()
.MarkAsAdvanced();
// Deprecated
extension
.AddAction("CopyVariableToArgument",
_("Copy variable to function parameter"),
@@ -93,6 +110,21 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAdvancedExtension(
.SetHelpPath("/events/functions/return")
.AddParameter("functionParameterName", _("Parameter name"), "variable")
.AddParameter("scenevar", _("Scene variable"))
.SetHidden()
.MarkAsAdvanced();
extension
.AddAction("CopyVariableToArgument2",
_("Copy variable to function parameter"),
_("Copy a variable to function parameter (also called \"argument\"). "
"The parameter type must be a variable."),
_("Copy the variable _PARAM1_ into the parameter _PARAM0_"),
"",
"res/function32.png",
"res/function32.png")
.SetHelpPath("/events/functions/return")
.AddParameter("functionParameterName", _("Parameter name"), "variable")
.AddParameter("variable", _("Variable"))
.SetRelevantForFunctionEventsOnly()
.MarkAsAdvanced();

View File

@@ -81,6 +81,24 @@ AdvancedExtension::AdvancedExtension() {
"}\n";
});
GetAllActions()["CopyArgumentToVariable2"]
.SetCustomCodeGenerator([](gd::Instruction &instruction,
gd::EventsCodeGenerator &codeGenerator,
gd::EventsCodeGenerationContext &context) {
// This is duplicated from EventsCodeGenerator::GenerateParameterCodes
gd::String parameter = instruction.GetParameter(0).GetPlainString();
gd::String variable =
gd::ExpressionCodeGenerator::GenerateExpressionCode(
codeGenerator, context, "variable", instruction.GetParameter(1),
"");
return "if (typeof eventsFunctionContext !== 'undefined') {\n"
"gdjs.Variable.copy(eventsFunctionContext.getArgument(" +
parameter + "), " + variable +
", false);\n"
"}\n";
});
GetAllActions()["CopyVariableToArgument"]
.SetCustomCodeGenerator([](gd::Instruction &instruction,
gd::EventsCodeGenerator &codeGenerator,
@@ -99,6 +117,24 @@ AdvancedExtension::AdvancedExtension() {
"}\n";
});
GetAllActions()["CopyVariableToArgument2"]
.SetCustomCodeGenerator([](gd::Instruction &instruction,
gd::EventsCodeGenerator &codeGenerator,
gd::EventsCodeGenerationContext &context) {
// This is duplicated from EventsCodeGenerator::GenerateParameterCodes
gd::String parameter = instruction.GetParameter(0).GetPlainString();
gd::String variable =
gd::ExpressionCodeGenerator::GenerateExpressionCode(
codeGenerator, context, "variable", instruction.GetParameter(1),
"");
return "if (typeof eventsFunctionContext !== 'undefined') {\n"
"gdjs.Variable.copy(" +
variable + ", eventsFunctionContext.getArgument(" + parameter +
"), false);\n"
"}\n";
});
GetAllConditions()["GetArgumentAsBoolean"]
.SetCustomCodeGenerator([](gd::Instruction& instruction,
gd::EventsCodeGenerator& codeGenerator,

View File

@@ -133,7 +133,11 @@ export default function ValueTypeEditor({
label={t`Leaderboard (text)`}
/>
<SelectOption value="identifier" label={t`Identifier (text)`} />
<SelectOption value="scenevar" label={t`Scene variable`} />
<SelectOption value="variable" label={t`Variable`} />
<SelectOption
value="scenevar"
label={t`Scene variable (deprecated)`}
/>
{!isExpressionType && (
<SelectOption
value="objectListOrEmptyIfJustDeclared"