From 8ab2752f4271107f14d6e7371b0d3f3559ddd3c0 Mon Sep 17 00:00:00 2001 From: chcurran Date: Wed, 9 Jun 2021 14:52:33 -0700 Subject: [PATCH] Fix for using BC class constants LYN-3777 --- .../ScriptCanvas/Translation/GraphToLua.cpp | 52 +- .../ScriptCanvas/Translation/GraphToLua.h | 2 +- ...eBehaviorContextClassConstant.scriptcanvas | 1173 +++++++++++++++++ 3 files changed, 1210 insertions(+), 17 deletions(-) create mode 100644 Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_UseBehaviorContextClassConstant.scriptcanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp index 905f68604a..a5e9c179e6 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp @@ -1220,8 +1220,18 @@ namespace ScriptCanvas void GraphToLua::WriteClassPropertyRead(Grammar::ExecutionTreeConstPtr execution) { - WriteFunctionCallInput(execution, 0, IsFormatStringInput::No); - m_dotLua.Write(".%s", Grammar::ToIdentifier(execution->GetName()).c_str()); + if (execution->GetInputCount() > 0) + { + WriteFunctionCallInput(execution, 0, IsFormatStringInput::No); + m_dotLua.Write("."); + } + else + { + // it's a constant + WriteResolvedScope(execution, execution->GetNameLexicalScope()); + } + + m_dotLua.Write(Grammar::ToIdentifier(execution->GetName()).c_str()); } void GraphToLua::WriteClassPropertyWrite(Grammar::ExecutionTreeConstPtr execution) @@ -1509,20 +1519,7 @@ namespace ScriptCanvas } else { - const AZStd::string resolvedScope = ResolveScope(lexicalScope.m_namespaces); - - auto& abbreviation = FindAbbreviation(resolvedScope); - - if (!abbreviation.empty()) - { - m_dotLua.Write("%s%.*s", abbreviation.c_str(), - aznumeric_cast(m_configuration.m_lexicalScopeDelimiter.size()), m_configuration.m_lexicalScopeDelimiter.data()); - } - else if (!resolvedScope.empty()) - { - m_dotLua.Write("%s%.*s", resolvedScope.c_str(), - aznumeric_cast(m_configuration.m_lexicalScopeDelimiter.size()), m_configuration.m_lexicalScopeDelimiter.data()); - } + WriteResolvedScope(execution, lexicalScope); } } break; @@ -2413,5 +2410,28 @@ namespace ScriptCanvas } } + void GraphToLua::WriteResolvedScope(Grammar::ExecutionTreeConstPtr execution, const Grammar::LexicalScope& lexicalScope) + { + if (lexicalScope.m_type != Grammar::LexicalScopeType::Class && lexicalScope.m_type != Grammar::LexicalScopeType::Namespace) + { + AddError(execution, aznew Internal::ParseError(execution->GetNodeId(), "Invalid arguments to WriteResolvedScope.")); + return; + } + + const AZStd::string resolvedScope = ResolveScope(lexicalScope.m_namespaces); + + auto& abbreviation = FindAbbreviation(resolvedScope); + + if (!abbreviation.empty()) + { + m_dotLua.Write("%s%.*s", abbreviation.c_str(), + aznumeric_cast(m_configuration.m_lexicalScopeDelimiter.size()), m_configuration.m_lexicalScopeDelimiter.data()); + } + else if (!resolvedScope.empty()) + { + m_dotLua.Write("%s%.*s", resolvedScope.c_str(), + aznumeric_cast(m_configuration.m_lexicalScopeDelimiter.size()), m_configuration.m_lexicalScopeDelimiter.data()); + } + } } } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.h index 82c865da8c..9894a30841 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.h @@ -160,6 +160,7 @@ namespace ScriptCanvas void WriteOperatorArithmetic(Grammar::ExecutionTreeConstPtr execution); void WriteOutputAssignments(Grammar::ExecutionTreeConstPtr execution); void WriteOutputAssignments(Grammar::ExecutionTreeConstPtr execution, const AZStd::vector>& output); + void WriteResolvedScope(Grammar::ExecutionTreeConstPtr execution, const Grammar::LexicalScope& lexicalScope); void WriteReturnStatement(Grammar::ExecutionTreeConstPtr execution); void WriteReturnValueInitialization(Grammar::ExecutionTreeConstPtr execution); void WriteStaticInitializerInput(IsLeadingCommaRequired commaRequired); @@ -170,7 +171,6 @@ namespace ScriptCanvas void WriteVariableWrite(Grammar::ExecutionTreeConstPtr execution, const AZStd::vector>& output); void WriteWrittenMathExpression(Grammar::ExecutionTreeConstPtr execution); - private: }; } diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_UseBehaviorContextClassConstant.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_UseBehaviorContextClassConstant.scriptcanvas new file mode 100644 index 0000000000..d80e4dcac8 --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_UseBehaviorContextClassConstant.scriptcanvas @@ -0,0 +1,1173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +