Script Canvas node translation system and naming consistency
Signed-off-by: lsemp3d <58790905+lsemp3d@users.noreply.github.com>
This commit is contained in:
@@ -154,6 +154,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||
.
|
||||
Editor/Include
|
||||
Editor/Static/Include
|
||||
Editor/Assets
|
||||
BUILD_DEPENDENCIES
|
||||
PRIVATE
|
||||
AZ::AzCore
|
||||
@@ -172,6 +173,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||
scriptcanvasgem_editor_files.cmake
|
||||
scriptcanvasgem_editor_asset_files.cmake
|
||||
scriptcanvasgem_editor_builder_files.cmake
|
||||
scriptcanvasgem_editor_tools_files.cmake
|
||||
COMPILE_DEFINITIONS
|
||||
PUBLIC
|
||||
SCRIPTCANVAS_ERRORS_ENABLED
|
||||
@@ -182,6 +184,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||
PRIVATE
|
||||
.
|
||||
Editor
|
||||
Tools
|
||||
Editor/Include
|
||||
${SCRIPT_CANVAS_AUTOGEN_BUILD_DIR}
|
||||
BUILD_DEPENDENCIES
|
||||
|
||||
@@ -252,6 +252,17 @@ namespace ScriptCanvasEditor
|
||||
m_assetsInUse.erase(assetId);
|
||||
}
|
||||
|
||||
void AssetTracker::RefreshAll()
|
||||
{
|
||||
for (const auto& asset : m_assetsInUse)
|
||||
{
|
||||
auto id = asset.second->GetScriptCanvasId();
|
||||
ScriptCanvasEditor::EditorGraphRequestBus::Event(id, &ScriptCanvasEditor::EditorGraphRequests::ClearGraphCanvasScene);
|
||||
ScriptCanvasEditor::EditorGraphRequestBus::Event(id, &ScriptCanvasEditor::EditorGraphRequests::CreateGraphCanvasScene);
|
||||
ScriptCanvasEditor::EditorGraphRequestBus::Event(id, &ScriptCanvasEditor::EditorGraphRequests::DisplayGraphCanvasScene);
|
||||
}
|
||||
}
|
||||
|
||||
void AssetTracker::CreateView(AZ::Data::AssetId assetId, QWidget* parent)
|
||||
{
|
||||
assetId = CheckAssetId(assetId);
|
||||
|
||||
@@ -61,6 +61,7 @@ namespace ScriptCanvasEditor
|
||||
void CreateView(AZ::Data::AssetId assetId, QWidget* parent) override;
|
||||
void ClearView(AZ::Data::AssetId assetId) override;
|
||||
void UntrackAsset(AZ::Data::AssetId assetId) override;
|
||||
void RefreshAll() override;
|
||||
|
||||
// Getters
|
||||
|
||||
|
||||
@@ -79,6 +79,9 @@ namespace ScriptCanvasEditor
|
||||
//! Used to make sure assets that are unloaded also get removed from tracking
|
||||
virtual void UntrackAsset([[maybe_unused]] AZ::Data::AssetId assetId) {}
|
||||
|
||||
//! Recreates the view for all tracked assets
|
||||
virtual void RefreshAll() {}
|
||||
|
||||
using AssetList = AZStd::vector<ScriptCanvasMemoryAsset::pointer>;
|
||||
|
||||
// Accessors
|
||||
|
||||
@@ -1078,9 +1078,11 @@ namespace ScriptCanvasEditor
|
||||
return CanCreateConnectionBetween(scSourceEndpoint, scTargetEndpoint).IsSuccess();
|
||||
}
|
||||
|
||||
AZStd::string Graph::GetDataTypeString(const AZ::Uuid& typeId)
|
||||
AZStd::string Graph::GetDataTypeString(const AZ::Uuid&)
|
||||
{
|
||||
return TranslationHelper::GetSafeTypeName(ScriptCanvas::Data::FromAZType(typeId));
|
||||
// This is used by the default tooltip setting in GraphCanvas, returning an empty string
|
||||
// in order for tooltips to be fully controlled by ScriptCanvas
|
||||
return {};
|
||||
}
|
||||
|
||||
void Graph::OnRemoveUnusedNodes()
|
||||
@@ -1932,7 +1934,7 @@ namespace ScriptCanvasEditor
|
||||
}
|
||||
|
||||
OnSaveDataDirtied(graphCanvasNodeId);
|
||||
Nodes::CopySlotTranslationKeyedNamesToDatums(graphCanvasNodeId);
|
||||
Nodes::UpdateSlotDatumLabels(graphCanvasNodeId);
|
||||
}
|
||||
|
||||
m_wrappedNodeGroupings.clear();
|
||||
@@ -1950,7 +1952,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
for (AZ::EntityId graphCanvasNodeId : graphCanvasNodeIds)
|
||||
{
|
||||
Nodes::CopySlotTranslationKeyedNamesToDatums(graphCanvasNodeId);
|
||||
Nodes::UpdateSlotDatumLabels(graphCanvasNodeId);
|
||||
}
|
||||
|
||||
GraphCanvas::ViewId viewId;
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <GraphCanvas/Components/Nodes/NodeBus.h>
|
||||
|
||||
#include <ScriptCanvas/Core/Slot.h>
|
||||
#include <ScriptCanvas/GraphCanvas/NodeDescriptorBus.h>
|
||||
|
||||
#include <Editor/GraphCanvas/Components/DynamicSlotComponent.h>
|
||||
|
||||
+35
-39
@@ -148,8 +148,6 @@ namespace ScriptCanvasEditor
|
||||
AZ::Entity* entity = nullptr;
|
||||
AZ::ComponentApplicationBus::BroadcastResult(entity, &AZ::ComponentApplicationBus::Events::FindEntity, scriptCanvasId);
|
||||
|
||||
AZStd::string ebusContextName = TranslationHelper::GetEbusHandlerContext(m_busName);
|
||||
|
||||
if (entity)
|
||||
{
|
||||
ScriptCanvas::Nodes::Core::EBusEventHandler* eventHandler = AZ::EntityUtils::FindFirstDerivedComponent<ScriptCanvas::Nodes::Core::EBusEventHandler>(entity);
|
||||
@@ -190,52 +188,64 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (scriptCanvasSlot && scriptCanvasSlot->IsVisible())
|
||||
{
|
||||
AZ::EntityId slotId = Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot));
|
||||
auto graphCanvasSlotId = Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot), 0);
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(slotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusHandlerOnEventTriggeredNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(slotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusHandlerOnEventTriggeredTooltipKey());
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusHandler" << eventHandler->GetEBusName() << "methods" << m_eventName;
|
||||
if (scriptCanvasSlot->IsExecution() && scriptCanvasSlot->IsOutput())
|
||||
{
|
||||
key << "exit";
|
||||
}
|
||||
else
|
||||
{
|
||||
key << "details";
|
||||
}
|
||||
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetName, details.m_name);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTooltip, details.m_tooltip);
|
||||
}
|
||||
|
||||
//
|
||||
// inputCount and outputCount work because the order of the slots is maintained from the BehaviorContext, if this changes
|
||||
// in the future then we should consider storing the actual offset or key name at that time.
|
||||
//
|
||||
int inputCount = 0;
|
||||
int outputCount = 0;
|
||||
int paramIndex = 0;
|
||||
int outputIndex = 0;
|
||||
for (const auto& slotId : myEvent.m_parameterSlotIds)
|
||||
{
|
||||
scriptCanvasSlot = eventHandler->GetSlot(slotId);
|
||||
|
||||
if (scriptCanvasSlot && scriptCanvasSlot->IsVisible())
|
||||
{
|
||||
AZ::EntityId graphCanvasSlotId = Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot));
|
||||
int& index = (scriptCanvasSlot->IsData() && scriptCanvasSlot->IsOutput()) ? paramIndex : outputIndex;
|
||||
|
||||
TranslationItemType itemType = TranslationHelper::GetItemType(scriptCanvasSlot->GetDescriptor());
|
||||
auto graphCanvasSlotId = Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot), index);
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotNameKeyedString(scriptCanvasSlot->GetName());
|
||||
slotNameKeyedString.m_context = ebusContextName;
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotTooltipKeyedString(scriptCanvasSlot->GetToolTip());
|
||||
slotTooltipKeyedString.m_context = ebusContextName;
|
||||
if (scriptCanvasSlot->IsData())
|
||||
{
|
||||
GraphCanvas::TranslationKey key;
|
||||
key = "EBusHandler";
|
||||
key << eventHandler->GetEBusName() << "methods" << m_eventName << "params" << index << "details";
|
||||
|
||||
slotNameKeyedString.SetFallback(scriptCanvasSlot->GetName());
|
||||
slotTooltipKeyedString.SetFallback(scriptCanvasSlot->GetToolTip());
|
||||
details.m_name = scriptCanvasSlot->GetName();
|
||||
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetName, details.m_name);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTooltip, details.m_tooltip);
|
||||
}
|
||||
|
||||
if (scriptCanvasSlot->GetDescriptor() == ScriptCanvas::SlotDescriptors::DataOut())
|
||||
{
|
||||
slotNameKeyedString.m_key = TranslationHelper::GetEBusHandlerSlotKey(m_busName, m_eventName, itemType, TranslationKeyId::Name, outputCount);
|
||||
slotTooltipKeyedString.m_key = TranslationHelper::GetEBusHandlerSlotKey(m_busName, m_eventName, itemType, TranslationKeyId::Tooltip, outputCount);
|
||||
++outputCount;
|
||||
++outputIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
slotNameKeyedString.m_key = TranslationHelper::GetEBusHandlerSlotKey(m_busName, m_eventName, itemType, TranslationKeyId::Name, inputCount);
|
||||
slotTooltipKeyedString.m_key = TranslationHelper::GetEBusHandlerSlotKey(m_busName, m_eventName, itemType, TranslationKeyId::Tooltip, inputCount);
|
||||
++inputCount;
|
||||
++paramIndex;
|
||||
}
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, slotNameKeyedString);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, slotTooltipKeyedString);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,18 +255,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (scriptCanvasSlot && scriptCanvasSlot->IsVisible())
|
||||
{
|
||||
AZ::EntityId graphCanvasSlotId = Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot));
|
||||
|
||||
TranslationItemType itemType = TranslationHelper::GetItemType(scriptCanvasSlot->GetDescriptor());
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotNameKeyedString(scriptCanvasSlot->GetName(), ebusContextName);
|
||||
slotNameKeyedString.m_key = slotNameKeyedString.m_key = TranslationHelper::GetKey(TranslationContextGroup::EbusHandler, m_busName, m_eventName, itemType, TranslationKeyId::Name);
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotTooltipKeyedString(TranslationHelper::GetSafeTypeName(scriptCanvasSlot->GetDataType()), ebusContextName);
|
||||
slotTooltipKeyedString.m_key = TranslationHelper::GetKey(TranslationContextGroup::EbusHandler, m_busName, m_eventName, itemType, TranslationKeyId::Tooltip);
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, slotNameKeyedString);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, slotTooltipKeyedString);
|
||||
Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot), 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -345,9 +344,6 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (connectionType == GraphCanvas::ConnectionType::CT_Output)
|
||||
{
|
||||
GraphCanvas::SlotRequestBus::Event(slotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusHandlerOnEventTriggeredNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(slotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusHandlerOnEventTriggeredTooltipKey());
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-4
@@ -210,10 +210,10 @@ namespace ScriptCanvasEditor
|
||||
{
|
||||
if (m_eventTypeToId.find(eventId) == m_eventTypeToId.end())
|
||||
{
|
||||
AZStd::string eventName;
|
||||
AZStd::string eventName;
|
||||
|
||||
for (const HandlerEventConfiguration& testEventConfiguration : eventConfigurations)
|
||||
{
|
||||
{
|
||||
if (testEventConfiguration.m_eventId == eventId)
|
||||
{
|
||||
eventName = testEventConfiguration.m_eventName;
|
||||
@@ -540,8 +540,11 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (slotType == GraphCanvas::SlotTypes::DataSlot)
|
||||
{
|
||||
GraphCanvas::SlotRequestBus::Event(testSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusHandlerBusIdNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(testSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusHandlerBusIdTooltipKey());
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << Translation::GlobalKeys::EBusHandlerIDKey << ".details";
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
GraphCanvas::SlotRequestBus::Event(testSlotId, &GraphCanvas::SlotRequests::SetDetails, details.m_name, details.m_tooltip);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
-3
@@ -68,9 +68,6 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (currentSlotId == slotId)
|
||||
{
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusSenderBusIdNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusSenderBusIdTooltipKey());
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+9
-48
@@ -142,8 +142,6 @@ namespace ScriptCanvasEditor
|
||||
m_ebusWrapper.m_graphCanvasId = wrappingNode;
|
||||
m_ebusWrapper.m_scriptCanvasId = scriptCanvasId;
|
||||
|
||||
AZStd::string ebusContextName = TranslationHelper::GetEbusHandlerContext(m_busName);
|
||||
|
||||
ScriptCanvas::Nodes::Core::ReceiveScriptEvent* eventHandler = AZ::EntityUtils::FindFirstDerivedComponent<ScriptCanvas::Nodes::Core::ReceiveScriptEvent>(scriptCanvasId);
|
||||
if (eventHandler)
|
||||
{
|
||||
@@ -179,50 +177,27 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (scriptCanvasSlot && scriptCanvasSlot->IsVisible())
|
||||
{
|
||||
AZ::EntityId slotId = Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot));
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(slotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusHandlerOnEventTriggeredNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(slotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusHandlerOnEventTriggeredTooltipKey());
|
||||
Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot), 0);
|
||||
}
|
||||
|
||||
int paramIndex = 0;
|
||||
int outputIndex = 0;
|
||||
//
|
||||
// inputCount and outputCount work because the order of the slots is maintained from the BehaviorContext, if this changes
|
||||
// in the future then we should consider storing the actual offset or key name at that time.
|
||||
//
|
||||
int inputCount = 0;
|
||||
int outputCount = 0;
|
||||
for (const auto& slotId : myEvent.m_parameterSlotIds)
|
||||
{
|
||||
scriptCanvasSlot = eventHandler->GetSlot(slotId);
|
||||
|
||||
int& index = (scriptCanvasSlot->IsData() && scriptCanvasSlot->IsInput()) ? paramIndex : outputIndex;
|
||||
|
||||
if (scriptCanvasSlot && scriptCanvasSlot->IsVisible())
|
||||
{
|
||||
AZ::EntityId graphCanvasSlotId = Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot));
|
||||
|
||||
TranslationItemType itemType = TranslationHelper::GetItemType(scriptCanvasSlot->GetDescriptor());
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotNameKeyedString(scriptCanvasSlot->GetName());
|
||||
slotNameKeyedString.m_context = ebusContextName;
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotTooltipKeyedString(scriptCanvasSlot->GetToolTip());
|
||||
slotTooltipKeyedString.m_context = ebusContextName;
|
||||
|
||||
if (scriptCanvasSlot->GetDescriptor() == ScriptCanvas::SlotDescriptors::DataOut())
|
||||
{
|
||||
slotNameKeyedString.m_key = TranslationHelper::GetEBusHandlerSlotKey(m_busName, m_eventName, itemType, TranslationKeyId::Name, outputCount);
|
||||
slotTooltipKeyedString.m_key = TranslationHelper::GetEBusHandlerSlotKey(m_busName, m_eventName, itemType, TranslationKeyId::Tooltip, outputCount);
|
||||
++outputCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
slotNameKeyedString.m_key = TranslationHelper::GetEBusHandlerSlotKey(m_busName, m_eventName, itemType, TranslationKeyId::Name, inputCount);
|
||||
slotTooltipKeyedString.m_key = TranslationHelper::GetEBusHandlerSlotKey(m_busName, m_eventName, itemType, TranslationKeyId::Tooltip, inputCount);
|
||||
++inputCount;
|
||||
}
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, slotNameKeyedString);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, slotTooltipKeyedString);
|
||||
Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot), index);
|
||||
}
|
||||
|
||||
++index;
|
||||
}
|
||||
|
||||
if (myEvent.m_resultSlotId.IsValid())
|
||||
@@ -231,18 +206,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (scriptCanvasSlot && scriptCanvasSlot->IsVisible())
|
||||
{
|
||||
AZ::EntityId graphCanvasSlotId = Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot));
|
||||
|
||||
TranslationItemType itemType = TranslationHelper::GetItemType(scriptCanvasSlot->GetDescriptor());
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotNameKeyedString(scriptCanvasSlot->GetName(), ebusContextName);
|
||||
slotNameKeyedString.m_key = slotNameKeyedString.m_key = TranslationHelper::GetKey(TranslationContextGroup::EbusHandler, m_busName, m_eventName, itemType, TranslationKeyId::Name);
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotTooltipKeyedString(TranslationHelper::GetSafeTypeName(scriptCanvasSlot->GetDataType()), ebusContextName);
|
||||
slotTooltipKeyedString.m_key = TranslationHelper::GetKey(TranslationContextGroup::EbusHandler, m_busName, m_eventName, itemType, TranslationKeyId::Tooltip);
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, slotNameKeyedString);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, slotTooltipKeyedString);
|
||||
Nodes::DisplayScriptCanvasSlot(GetEntityId(), (*scriptCanvasSlot), 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,9 +331,6 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (connectionType == GraphCanvas::ConnectionType::CT_Output)
|
||||
{
|
||||
GraphCanvas::SlotRequestBus::Event(slotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusHandlerOnEventTriggeredNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(slotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusHandlerOnEventTriggeredTooltipKey());
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -560,8 +560,11 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (slotType == GraphCanvas::SlotTypes::DataSlot)
|
||||
{
|
||||
GraphCanvas::SlotRequestBus::Event(testSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusHandlerBusIdNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(testSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusHandlerBusIdTooltipKey());
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << Translation::GlobalKeys::EBusHandlerIDKey << "details";
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
GraphCanvas::SlotRequestBus::Event(testSlotId, &GraphCanvas::SlotRequests::SetDetails, details.m_name, details.m_tooltip);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
-3
@@ -118,9 +118,6 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (currentSlotId == slotId)
|
||||
{
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusSenderBusIdNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusSenderBusIdTooltipKey());
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <GraphCanvas/Components/NodeDescriptors/ScriptEventSenderNodeDescriptorComponent.h>
|
||||
#include <GraphCanvas/Components/NodeDescriptors/UserDefinedNodeDescriptorComponent.h>
|
||||
#include <GraphCanvas/Components/NodeDescriptors/FunctionDefinitionNodeDescriptorComponent.h>
|
||||
#include <GraphCanvas/Components/Slots/SlotBus.h>
|
||||
|
||||
#include <GraphCanvas/Components/Nodes/NodeTitleBus.h>
|
||||
#include <GraphCanvas/GraphCanvasBus.h>
|
||||
@@ -45,6 +46,8 @@
|
||||
#include <ScriptCanvas/Libraries/Core/SendScriptEvent.h>
|
||||
#include <ScriptCanvas/Libraries/Core/SetVariable.h>
|
||||
|
||||
#include <Source/Translation/TranslationBus.h>
|
||||
|
||||
namespace ScriptCanvasEditor::Nodes::SlotDisplayHelper
|
||||
{
|
||||
AZ::EntityId DisplayPropertySlot(AZ::EntityId graphCanvasNodeId, const ScriptCanvas::VisualExtensionSlotConfiguration& propertyConfiguration);
|
||||
@@ -101,10 +104,11 @@ namespace ScriptCanvasEditor::Nodes
|
||||
*graphCanvasUserData = node->GetEntityId();
|
||||
}
|
||||
|
||||
GraphCanvas::TranslationKeyedString nodeKeyedString(nodeConfiguration.m_titleFallback, nodeConfiguration.m_translationContext);
|
||||
nodeKeyedString.m_key = TranslationHelper::GetKey(nodeConfiguration.m_translationGroup, nodeConfiguration.m_translationKeyContext, nodeConfiguration.m_translationKeyName, TranslationItemType::Node, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "ScriptCanvas::Node" << azrtti_typeid(node).ToString<AZStd::string>() << "details";
|
||||
|
||||
AZStd::string nodeName = nodeKeyedString.GetDisplayString();
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
int paramIndex = 0;
|
||||
int outputIndex = 0;
|
||||
@@ -112,27 +116,52 @@ namespace ScriptCanvasEditor::Nodes
|
||||
// Create the GraphCanvas slots
|
||||
for (const auto& slot : node->GetSlots())
|
||||
{
|
||||
GraphCanvas::TranslationKey slotKey;
|
||||
slotKey << "ScriptCanvas::Node" << azrtti_typeid(node).ToString<AZStd::string>() << "slots";
|
||||
|
||||
int& index = (slot.IsData() && slot.IsInput()) ? paramIndex : outputIndex;
|
||||
|
||||
if (slot.IsVisible())
|
||||
{
|
||||
AZ::EntityId graphCanvasSlotId = DisplayScriptCanvasSlot(graphCanvasEntity->GetId(), slot);
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotNameKeyedString(slot.GetName(), nodeKeyedString.m_context);
|
||||
GraphCanvas::TranslationKeyedString slotTooltipKeyedString(slot.GetToolTip(), nodeKeyedString.m_context);
|
||||
|
||||
TranslationItemType itemType = TranslationHelper::GetItemType(slot.GetDescriptor());
|
||||
|
||||
if (itemType == TranslationItemType::ParamDataSlot || itemType == TranslationItemType::ReturnDataSlot)
|
||||
AZStd::string slotKeyStr;
|
||||
if (slot.IsData())
|
||||
{
|
||||
int& index = (itemType == TranslationItemType::ParamDataSlot) ? paramIndex : outputIndex;
|
||||
|
||||
slotNameKeyedString.m_key = TranslationHelper::GetKey(nodeConfiguration.m_translationGroup, nodeConfiguration.m_translationKeyContext, nodeConfiguration.m_translationKeyName, itemType, TranslationKeyId::Name, index);
|
||||
slotTooltipKeyedString.m_key = TranslationHelper::GetKey(nodeConfiguration.m_translationGroup, nodeConfiguration.m_translationKeyContext, nodeConfiguration.m_translationKeyName, itemType, TranslationKeyId::Tooltip, index);
|
||||
index++;
|
||||
slotKeyStr.append("Data");
|
||||
}
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, slotNameKeyedString);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, slotTooltipKeyedString);
|
||||
if (slot.GetConnectionType() == ScriptCanvas::ConnectionType::Input)
|
||||
{
|
||||
slotKeyStr.append("Input_");
|
||||
}
|
||||
else
|
||||
{
|
||||
slotKeyStr.append("Output_");
|
||||
}
|
||||
|
||||
slotKeyStr.append(slot.GetName());
|
||||
|
||||
slotKey << slotKeyStr << "details";
|
||||
|
||||
GraphCanvas::TranslationRequests::Details slotDetails;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(slotDetails, &GraphCanvas::TranslationRequests::GetDetails, slotKey, slotDetails);
|
||||
|
||||
if (slotDetails.m_name.empty())
|
||||
{
|
||||
slotDetails.m_name = slot.GetName();
|
||||
}
|
||||
|
||||
if (slotDetails.m_tooltip.empty())
|
||||
{
|
||||
slotDetails.m_tooltip = slot.GetToolTip();
|
||||
}
|
||||
|
||||
AZ::EntityId graphCanvasSlotId = DisplayScriptCanvasSlot(graphCanvasEntity->GetId(), slot, index);
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetName, slotDetails.m_name);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTooltip, slotDetails.m_tooltip);
|
||||
}
|
||||
|
||||
++index;
|
||||
}
|
||||
|
||||
const auto& visualExtensions = node->GetVisualExtensions();
|
||||
@@ -142,25 +171,25 @@ namespace ScriptCanvasEditor::Nodes
|
||||
SlotDisplayHelper::DisplayVisualExtensionSlot(graphCanvasEntity->GetId(), extensionConfiguration);
|
||||
}
|
||||
|
||||
GraphCanvas::TranslationKeyedString subtitleKeyedString(nodeConfiguration.m_subtitleFallback, nodeConfiguration.m_translationContext);
|
||||
subtitleKeyedString.m_key = TranslationHelper::GetKey(nodeConfiguration.m_translationGroup, nodeConfiguration.m_translationKeyContext, nodeConfiguration.m_translationKeyName, TranslationItemType::Node, TranslationKeyId::Category);
|
||||
graphCanvasEntity->SetName(AZStd::string::format("GC-Node(%s)", details.m_name.c_str()));
|
||||
|
||||
graphCanvasEntity->SetName(AZStd::string::format("GC-Node(%s)", nodeKeyedString.GetDisplayString().c_str()));
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasEntity->GetId(), &GraphCanvas::NodeTitleRequests::SetTitle, details.m_name);
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasEntity->GetId(), &GraphCanvas::NodeTitleRequests::SetSubTitle, details.m_category);
|
||||
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasEntity->GetId(), &GraphCanvas::NodeTitleRequests::SetTranslationKeyedTitle, nodeKeyedString);
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasEntity->GetId(), &GraphCanvas::NodeTitleRequests::SetTranslationKeyedSubTitle, subtitleKeyedString);
|
||||
// Add to the tooltip the C++ class for reference
|
||||
if (!details.m_tooltip.empty())
|
||||
{
|
||||
details.m_tooltip.append("\n");
|
||||
}
|
||||
details.m_tooltip.append(AZStd::string::format("[C++] %s", node->GetNodeTypeName().c_str()));
|
||||
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasEntity->GetId(), &GraphCanvas::NodeRequests::SetTooltip, details.m_tooltip);
|
||||
|
||||
if (!nodeConfiguration.m_titlePalette.empty())
|
||||
{
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasEntity->GetId(), &GraphCanvas::NodeTitleRequests::SetPaletteOverride, nodeConfiguration.m_titlePalette);
|
||||
}
|
||||
|
||||
// Set the name
|
||||
GraphCanvas::TranslationKeyedString tooltipKeyedString(nodeConfiguration.m_tooltipFallback, nodeConfiguration.m_translationContext);
|
||||
tooltipKeyedString.m_key = TranslationHelper::GetKey(TranslationContextGroup::ClassMethod, nodeConfiguration.m_translationKeyContext, nodeConfiguration.m_translationKeyName, TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasEntity->GetId(), &GraphCanvas::NodeRequests::SetTranslationKeyedTooltip, tooltipKeyedString);
|
||||
|
||||
EditorNodeNotificationBus::Event(node->GetEntityId(), &EditorNodeNotifications::OnGraphCanvasNodeDisplayed, graphCanvasEntity->GetId());
|
||||
|
||||
return graphCanvasEntity->GetId();
|
||||
@@ -193,22 +222,6 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
if (classData)
|
||||
{
|
||||
AZStd::string nodeContext = GetContextName(*classData);
|
||||
nodeConfiguration.m_translationContext = TranslationHelper::GetUserDefinedContext(nodeContext);
|
||||
|
||||
nodeConfiguration.m_titleFallback = (classData->m_editData && classData->m_editData->m_name) ? classData->m_editData->m_name : classData->m_name;
|
||||
nodeConfiguration.m_tooltipFallback = (classData->m_editData && classData->m_editData->m_description) ? classData->m_editData->m_description : "";
|
||||
|
||||
GraphCanvas::TranslationKeyedString subtitleKeyedString(nodeContext, nodeConfiguration.m_translationContext);
|
||||
subtitleKeyedString.m_key = TranslationHelper::GetUserDefinedNodeKey(nodeContext, nodeConfiguration.m_titleFallback, ScriptCanvasEditor::TranslationKeyId::Category);
|
||||
|
||||
nodeConfiguration.m_subtitleFallback = subtitleKeyedString.GetDisplayString();
|
||||
|
||||
nodeConfiguration.m_translationKeyName = nodeConfiguration.m_titleFallback;
|
||||
nodeConfiguration.m_translationKeyContext = nodeContext;
|
||||
|
||||
nodeConfiguration.m_translationGroup = TranslationContextGroup::ClassMethod;
|
||||
|
||||
if (classData->m_editData)
|
||||
{
|
||||
const AZ::Edit::ElementData* elementData = classData->m_editData->FindElementData(AZ::Edit::ClassElements::EditorData);
|
||||
@@ -260,20 +273,19 @@ namespace ScriptCanvasEditor::Nodes
|
||||
graphCanvasEntity->CreateComponent<SlotMappingComponent>(methodNode->GetEntityId());
|
||||
graphCanvasEntity->CreateComponent<SceneMemberMappingComponent>(methodNode->GetEntityId());
|
||||
|
||||
TranslationContextGroup contextGroup = TranslationContextGroup::Invalid;
|
||||
|
||||
bool isAccessor = false;
|
||||
switch (methodNode->GetMethodType())
|
||||
{
|
||||
case ScriptCanvas::MethodType::Event:
|
||||
graphCanvasEntity->CreateComponent<EBusSenderNodeDescriptorComponent>();
|
||||
contextGroup = TranslationContextGroup::EbusSender;
|
||||
break;
|
||||
case ScriptCanvas::MethodType::Member:
|
||||
case ScriptCanvas::MethodType::Getter:
|
||||
case ScriptCanvas::MethodType::Setter:
|
||||
case ScriptCanvas::MethodType::Free:
|
||||
isAccessor = true;
|
||||
case ScriptCanvas::MethodType::Member:
|
||||
graphCanvasEntity->CreateComponent<ClassMethodNodeDescriptorComponent>();
|
||||
contextGroup = TranslationContextGroup::ClassMethod;
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
AZ_Error("ScriptCanvas", false, "Invalid method node type, node creation failed. This node needs to be deleted.");
|
||||
@@ -292,19 +304,75 @@ namespace ScriptCanvasEditor::Nodes
|
||||
*graphCanvasUserData = methodNode->GetEntityId();
|
||||
}
|
||||
|
||||
const bool isEBusSender = (methodNode->GetMethodType() == ScriptCanvas::MethodType::Event);
|
||||
const AZStd::string& className = methodNode->GetMethodClassName();
|
||||
const AZStd::string& methodName = methodNode->GetName();
|
||||
AZStd::string methodName = methodNode->GetName();
|
||||
|
||||
AZStd::string translationContext = TranslationHelper::GetContextName(contextGroup, className);
|
||||
GraphCanvas::TranslationKey key;
|
||||
|
||||
GraphCanvas::TranslationKeyedString nodeKeyedString(methodName, translationContext);
|
||||
nodeKeyedString.m_key = TranslationHelper::GetKey(contextGroup, className, methodName, TranslationItemType::Node, TranslationKeyId::Name);
|
||||
if (isAccessor)
|
||||
{
|
||||
AZ::StringFunc::Replace(methodName, "::Getter", "");
|
||||
AZ::StringFunc::Replace(methodName, "::Setter", "");
|
||||
}
|
||||
|
||||
GraphCanvas::TranslationKeyedString classKeyedString(className, translationContext);
|
||||
classKeyedString.m_key = TranslationHelper::GetClassKey(contextGroup, className, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
details.m_name = methodName;
|
||||
|
||||
GraphCanvas::TranslationKeyedString tooltipKeyedString(AZStd::string(), translationContext);
|
||||
tooltipKeyedString.m_key = TranslationHelper::GetKey(contextGroup, className, methodName, TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
AZStd::string context;
|
||||
if (methodNode->GetMethodType() == ScriptCanvas::MethodType::Free)
|
||||
{
|
||||
context = "Constant";
|
||||
}
|
||||
else
|
||||
{
|
||||
context = isEBusSender ? "EBusSender" : "BehaviorClass";
|
||||
}
|
||||
key << context << className;
|
||||
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key + ".details", details);
|
||||
|
||||
// Set the class' name as the subtitle fallback
|
||||
details.m_subtitle = details.m_name;
|
||||
|
||||
AZStd::string methodContext;
|
||||
// Get the method's text data
|
||||
GraphCanvas::TranslationRequests::Details methodDetails;
|
||||
methodDetails.m_name = details.m_name; // fallback
|
||||
key << "methods";
|
||||
AZStd::string updatedMethodName = methodName;
|
||||
if (isAccessor)
|
||||
{
|
||||
if (methodNode->GetMethodType() == ScriptCanvas::MethodType::Getter || methodNode->GetMethodType() == ScriptCanvas::MethodType::Free)
|
||||
{
|
||||
updatedMethodName = "Get";
|
||||
methodContext = "Getter";
|
||||
}
|
||||
else
|
||||
{
|
||||
updatedMethodName = "Set";
|
||||
methodContext = "Setter";
|
||||
}
|
||||
updatedMethodName.append(methodName);
|
||||
}
|
||||
key << methodContext << updatedMethodName;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(methodDetails, &GraphCanvas::TranslationRequests::GetDetails, key + ".details", methodDetails);
|
||||
|
||||
|
||||
if (methodDetails.m_subtitle.empty())
|
||||
{
|
||||
methodDetails.m_subtitle = details.m_category;
|
||||
}
|
||||
|
||||
// Add to the tooltip the C++ class for reference
|
||||
if (!methodDetails.m_tooltip.empty())
|
||||
{
|
||||
methodDetails.m_tooltip.append("\n");
|
||||
}
|
||||
methodDetails.m_tooltip.append(AZStd::string::format("[C++] %s", className.c_str()));
|
||||
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetDetails, methodDetails.m_name, methodDetails.m_subtitle);
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeRequests::SetTooltip, methodDetails.m_tooltip);
|
||||
|
||||
int paramIndex = 0;
|
||||
int outputIndex = 0;
|
||||
@@ -312,48 +380,62 @@ namespace ScriptCanvasEditor::Nodes
|
||||
auto busId = methodNode->GetBusSlotId();
|
||||
for (const auto& slot : methodNode->GetSlots())
|
||||
{
|
||||
GraphCanvas::TranslationKey slotKey = key;
|
||||
|
||||
int& index = (slot.IsData() && slot.IsInput()) ? paramIndex : outputIndex;
|
||||
|
||||
if (slot.IsVisible())
|
||||
{
|
||||
AZ::EntityId graphCanvasSlotId = DisplayScriptCanvasSlot(graphCanvasNodeId, slot);
|
||||
AZ::EntityId graphCanvasSlotId = DisplayScriptCanvasSlot(graphCanvasNodeId, slot, index);
|
||||
|
||||
GraphCanvas::TranslationKeyedString slotNameKeyedString(slot.GetName(), translationContext);
|
||||
GraphCanvas::TranslationKeyedString slotTooltipKeyedString(slot.GetToolTip(), translationContext);
|
||||
details.m_name = slot.GetName();
|
||||
details.m_tooltip = slot.GetToolTip();
|
||||
|
||||
if (methodNode->HasBusID() && busId == slot.GetId() && slot.GetDescriptor() == ScriptCanvas::SlotDescriptors::DataIn())
|
||||
{
|
||||
slotNameKeyedString = TranslationHelper::GetEBusSenderBusIdNameKey();
|
||||
slotTooltipKeyedString = TranslationHelper::GetEBusSenderBusIdTooltipKey();
|
||||
key = Translation::GlobalKeys::EBusSenderIDKey;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key + ".details", details);
|
||||
}
|
||||
else
|
||||
{
|
||||
TranslationItemType itemType = TranslationHelper::GetItemType(slot.GetDescriptor());
|
||||
|
||||
|
||||
int& index = (itemType == TranslationItemType::ParamDataSlot) ? paramIndex : outputIndex;
|
||||
|
||||
slotNameKeyedString.m_key = TranslationHelper::GetKey(contextGroup, className, methodName, itemType, TranslationKeyId::Name, index);
|
||||
slotTooltipKeyedString.m_key = TranslationHelper::GetKey(contextGroup, className, methodName, itemType, TranslationKeyId::Tooltip, index);
|
||||
|
||||
if ((itemType == TranslationItemType::ParamDataSlot) || (itemType == TranslationItemType::ReturnDataSlot))
|
||||
if (slot.IsData())
|
||||
{
|
||||
key.clear();
|
||||
key << context << className << "methods" << updatedMethodName;
|
||||
if (slot.IsData() && slot.IsInput())
|
||||
{
|
||||
key << "params";
|
||||
}
|
||||
else
|
||||
{
|
||||
key << "results";
|
||||
}
|
||||
key << index;
|
||||
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key + ".details", details);
|
||||
}
|
||||
|
||||
if (slot.IsData())
|
||||
{
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, slotNameKeyedString);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, slotTooltipKeyedString);
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetDetails, details.m_name, details.m_tooltip);
|
||||
|
||||
UpdateSlotDatumLabel(graphCanvasNodeId, slot.GetId(), details.m_name);
|
||||
|
||||
CopyTranslationKeyedNameToDatumLabel(graphCanvasNodeId, slot.GetId(), graphCanvasSlotId);
|
||||
}
|
||||
|
||||
++index;
|
||||
}
|
||||
|
||||
// Set the name
|
||||
AZStd::string displayName = methodNode->GetName();
|
||||
graphCanvasEntity->SetName(AZStd::string::format("GC-Node(%s)", displayName.c_str()));
|
||||
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeRequests::SetTranslationKeyedTooltip, tooltipKeyedString);
|
||||
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTranslationKeyedTitle, nodeKeyedString);
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTranslationKeyedSubTitle, classKeyedString);
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetPaletteOverride, "MethodNodeTitlePalette");
|
||||
|
||||
// Override the title if it has the Setter or Getter suffixes
|
||||
@@ -403,6 +485,9 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
AZStd::vector< ScriptCanvas::SlotId > scriptCanvasSlots = busNode->GetNonEventSlotIds();
|
||||
|
||||
int paramIndex = 0;
|
||||
int outputIndex = 0;
|
||||
|
||||
for (const auto& slotId : scriptCanvasSlots)
|
||||
{
|
||||
ScriptCanvas::Slot* slot = busNode->GetSlot(slotId);
|
||||
@@ -416,28 +501,45 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
if (slot->IsVisible())
|
||||
{
|
||||
int& index = (slot->IsData() && slot->IsInput()) ? paramIndex : outputIndex;
|
||||
|
||||
AZ::EntityId gcSlotId = DisplayScriptCanvasSlot(graphCanvasNodeId, (*slot), group);
|
||||
|
||||
if (busNode->IsIDRequired() && slot->GetDescriptor() == ScriptCanvas::SlotDescriptors::DataIn())
|
||||
{
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusHandlerBusIdNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusHandlerBusIdTooltipKey());
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << Translation::GlobalKeys::EBusHandlerIDKey << "details";
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
details.m_name = slot->GetName();
|
||||
details.m_tooltip = slot->GetToolTip();
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetDetails, details.m_name, details.m_tooltip);
|
||||
}
|
||||
|
||||
++index;
|
||||
}
|
||||
}
|
||||
|
||||
GraphCanvas::TranslationKeyedString nodeKeyedString(busName);
|
||||
nodeKeyedString.m_context = TranslationHelper::GetEbusHandlerContext(busName);
|
||||
nodeKeyedString.m_key = TranslationHelper::GetEbusHandlerKey(busName, TranslationKeyId::Name);
|
||||
|
||||
GraphCanvas::TranslationKeyedString tooltipKeyedString(AZStd::string(), nodeKeyedString.m_context);
|
||||
tooltipKeyedString.m_key = TranslationHelper::GetEbusHandlerKey(busName, TranslationKeyId::Tooltip);
|
||||
|
||||
// Set the name
|
||||
graphCanvasEntity->SetName(AZStd::string::format("GC-BusNode: %s", busName.data()));
|
||||
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeRequests::SetTranslationKeyedTooltip, tooltipKeyedString);
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTranslationKeyedTitle, nodeKeyedString);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusHandler" << busName << "details";
|
||||
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
details.m_name = busName;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
// Add to the tooltip the C++ class for reference
|
||||
if (!details.m_tooltip.empty())
|
||||
{
|
||||
details.m_tooltip.append("\n");
|
||||
}
|
||||
details.m_tooltip.append(AZStd::string::format("[C++] %s", busName.c_str()));
|
||||
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeRequests::SetTooltip, details.m_tooltip);
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTitle, details.m_name);
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetDefaultPalette, "HandlerWrapperNodeTitlePalette");
|
||||
|
||||
return graphCanvasNodeId;
|
||||
@@ -462,19 +564,27 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
AZStd::string decoratedName = AZStd::string::format("%s::%s", busName.c_str(), eventName.c_str());
|
||||
|
||||
GraphCanvas::TranslationKeyedString nodeKeyedString(eventName);
|
||||
nodeKeyedString.m_context = TranslationHelper::GetEbusHandlerContext(busName);
|
||||
nodeKeyedString.m_key = TranslationHelper::GetEbusHandlerEventKey(busName, eventName, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusHandler" << busName << "methods" << eventName << "details";
|
||||
|
||||
GraphCanvas::TranslationKeyedString tooltipKeyedString(AZStd::string(), nodeKeyedString.m_context);
|
||||
tooltipKeyedString.m_key = TranslationHelper::GetEbusHandlerEventKey(busName, eventName, TranslationKeyId::Tooltip);
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
details.m_name = eventName;
|
||||
details.m_subtitle = busName;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
// Set the name
|
||||
graphCanvasEntity->SetName(AZStd::string::format("GC-Node(%s)", decoratedName.c_str()));
|
||||
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeRequests::SetTranslationKeyedTooltip, tooltipKeyedString);
|
||||
// Add to the tooltip the C++ class for reference
|
||||
if (!details.m_tooltip.empty())
|
||||
{
|
||||
details.m_tooltip.append("\n");
|
||||
}
|
||||
details.m_tooltip.append(AZStd::string::format("[C++] %s", busName.c_str()));
|
||||
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTranslationKeyedTitle, nodeKeyedString);
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeRequests::SetTooltip, details.m_tooltip);
|
||||
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTitle, details.m_name);
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetPaletteOverride, "HandlerNodeTitlePalette");
|
||||
|
||||
return graphCanvasNodeId;
|
||||
@@ -505,83 +615,41 @@ namespace ScriptCanvasEditor::Nodes
|
||||
*graphCanvasUserData = azEventNode->GetEntityId();
|
||||
}
|
||||
|
||||
int paramIndex = 0;
|
||||
int outputIndex = 0;
|
||||
|
||||
for (const ScriptCanvas::Slot& slot: azEventNode->GetSlots())
|
||||
{
|
||||
GraphCanvas::SlotGroup group = GraphCanvas::SlotGroups::Invalid;
|
||||
|
||||
if (slot.IsVisible())
|
||||
{
|
||||
int& index = (slot.IsData() && slot.IsInput()) ? paramIndex : outputIndex;
|
||||
|
||||
AZ::EntityId gcSlotId = DisplayScriptCanvasSlot(graphCanvasNodeId, slot, group);
|
||||
if (slot.GetId() == azEventEntry.m_azEventInputSlotId)
|
||||
{
|
||||
GraphCanvas::TranslationKeyedString slotTranslationEntry(azEventEntry.m_eventName);
|
||||
slotTranslationEntry.m_context = TranslationHelper::GetAzEventHandlerContextKey();
|
||||
// The translation key in this case acts like a json pointer referencing a particular
|
||||
// json string within a hypothetical json document
|
||||
AZ::StackedString azEventHandlerNodeKey = TranslationHelper::GetAzEventHandlerRootPointer(azEventEntry.m_eventName);
|
||||
|
||||
azEventHandlerNodeKey.Push("Name");
|
||||
slotTranslationEntry.m_key = AZStd::string_view{ azEventHandlerNodeKey };
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, slotTranslationEntry);
|
||||
azEventHandlerNodeKey.Pop();
|
||||
azEventHandlerNodeKey.Push("Tooltip");
|
||||
slotTranslationEntry.m_key = AZStd::string_view{ azEventHandlerNodeKey };
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, slotTranslationEntry);
|
||||
}
|
||||
else
|
||||
{
|
||||
GraphCanvas::TranslationKeyedString slotTranslationEntry(slot.GetName());
|
||||
slotTranslationEntry.m_context = TranslationHelper::GetAzEventHandlerContextKey();
|
||||
// The translation key in this case acts like a json pointer referencing a particular
|
||||
// json string within a hypothetical json document
|
||||
// translation key is rooted at /AzEventHandler/${EventName}/Slots/${SlotName}/{In,Out,Param,Return}
|
||||
AZ::StackedString azEventHandlerNodeKey = TranslationHelper::GetAzEventHandlerRootPointer(azEventEntry.m_eventName);
|
||||
azEventHandlerNodeKey.Push("Slots");
|
||||
azEventHandlerNodeKey.Push(slot.GetName());
|
||||
switch(TranslationHelper::GetItemType(slot.GetDescriptor()))
|
||||
{
|
||||
case TranslationItemType::ExecutionInSlot:
|
||||
azEventHandlerNodeKey.Push("In");
|
||||
break;
|
||||
case TranslationItemType::ExecutionOutSlot:
|
||||
azEventHandlerNodeKey.Push("Out");
|
||||
break;
|
||||
case TranslationItemType::ParamDataSlot:
|
||||
azEventHandlerNodeKey.Push("Param");
|
||||
break;
|
||||
case TranslationItemType::ReturnDataSlot:
|
||||
azEventHandlerNodeKey.Push("Return");
|
||||
break;
|
||||
default:
|
||||
// Slot is not an execution or data slot, do nothing
|
||||
break;
|
||||
}
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "AZEventHandler" << azEventNode->GetNodeName() << "slots" << slot.GetName() << "details";
|
||||
|
||||
azEventHandlerNodeKey.Push("Name");
|
||||
slotTranslationEntry.m_key = AZStd::string_view{ azEventHandlerNodeKey };
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, slotTranslationEntry);
|
||||
azEventHandlerNodeKey.Pop();
|
||||
azEventHandlerNodeKey.Push("Tooltip");
|
||||
slotTranslationEntry.m_key = AZStd::string_view{ azEventHandlerNodeKey };
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, slotTranslationEntry);
|
||||
}
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetName, details.m_name);
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetTooltip, details.m_tooltip);;
|
||||
|
||||
++index;
|
||||
}
|
||||
}
|
||||
|
||||
GraphCanvas::TranslationKeyedString nodeTranslationEntry(azEventEntry.m_eventName);
|
||||
nodeTranslationEntry.m_context = TranslationHelper::GetAzEventHandlerContextKey();
|
||||
// The translation key in this case acts like a json pointer referencing a particular
|
||||
// json string within a hypothetical json document
|
||||
AZ::StackedString azEventHandlerNodeKey = TranslationHelper::GetAzEventHandlerRootPointer(azEventEntry.m_eventName);
|
||||
azEventHandlerNodeKey.Push("Name");
|
||||
nodeTranslationEntry.m_key = AZStd::string_view{ azEventHandlerNodeKey };
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTranslationKeyedTitle, nodeTranslationEntry);
|
||||
azEventHandlerNodeKey.Pop();
|
||||
azEventHandlerNodeKey.Push("Tooltip");
|
||||
nodeTranslationEntry.m_key = AZStd::string_view{ azEventHandlerNodeKey };
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeRequests::SetTranslationKeyedTooltip, nodeTranslationEntry);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "AZEventHandler" << azEventEntry.m_eventName << "details";
|
||||
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTitle, details.m_name);
|
||||
GraphCanvas::NodeRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeRequests::SetTooltip, details.m_tooltip);
|
||||
|
||||
// Set the name
|
||||
graphCanvasEntity->SetName(AZStd::string::format("GC-EventNode: %s", azEventEntry.m_eventName.c_str()));
|
||||
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetPaletteOverride, "HandlerNodeTitlePalette");
|
||||
@@ -635,6 +703,9 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
AZStd::vector< ScriptCanvas::SlotId > scriptCanvasSlots = busNode->GetNonEventSlotIds();
|
||||
|
||||
int paramIndex = 0;
|
||||
int outputIndex = 0;
|
||||
|
||||
for (const auto& slotId : scriptCanvasSlots)
|
||||
{
|
||||
ScriptCanvas::Slot* slot = busNode->GetSlot(slotId);
|
||||
@@ -648,13 +719,20 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
if (slot->IsVisible())
|
||||
{
|
||||
int& index = (slot->IsData() && slot->IsInput()) ? paramIndex : outputIndex;
|
||||
|
||||
AZ::EntityId gcSlotId = DisplayScriptCanvasSlot(graphCanvasNodeId, (*slot), group);
|
||||
|
||||
if (busNode->IsIDRequired() && slot->GetDescriptor() == ScriptCanvas::SlotDescriptors::DataIn())
|
||||
{
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedName, TranslationHelper::GetEBusHandlerBusIdNameKey());
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetTranslationKeyedTooltip, TranslationHelper::GetEBusHandlerBusIdTooltipKey());
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << Translation::GlobalKeys::EBusHandlerIDKey << "details";
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
GraphCanvas::SlotRequestBus::Event(gcSlotId, &GraphCanvas::SlotRequests::SetDetails, details.m_name, details.m_tooltip);
|
||||
}
|
||||
|
||||
++index;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -718,11 +796,7 @@ namespace ScriptCanvasEditor::Nodes
|
||||
graphCanvasEntity->CreateComponent<IconComponent>(ScriptCanvas::Nodes::Core::Method::RTTI_Type());
|
||||
graphCanvasEntity->CreateComponent<SlotMappingComponent>(senderNode->GetEntityId());
|
||||
graphCanvasEntity->CreateComponent<SceneMemberMappingComponent>(senderNode->GetEntityId());
|
||||
|
||||
TranslationContextGroup contextGroup = TranslationContextGroup::Invalid;
|
||||
|
||||
graphCanvasEntity->CreateComponent<ScriptEventSenderNodeDescriptorComponent>(senderNode->GetAssetId(), senderNode->GetEventId());
|
||||
contextGroup = TranslationContextGroup::EbusSender;
|
||||
|
||||
graphCanvasEntity->Init();
|
||||
graphCanvasEntity->Activate();
|
||||
@@ -744,17 +818,24 @@ namespace ScriptCanvasEditor::Nodes
|
||||
return graphCanvasNodeId;
|
||||
}
|
||||
|
||||
int paramIndex = 0;
|
||||
int outputIndex = 0;
|
||||
|
||||
for (const auto& slot : senderNode->GetSlots())
|
||||
{
|
||||
int& index = (slot.IsData() && slot.IsInput()) ? paramIndex : outputIndex;
|
||||
|
||||
if (slot.IsVisible())
|
||||
{
|
||||
AZ::EntityId graphCanvasSlotId = DisplayScriptCanvasSlot(graphCanvasNodeId, slot);
|
||||
AZ::EntityId graphCanvasSlotId = DisplayScriptCanvasSlot(graphCanvasNodeId, slot, index);
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetName, slot.GetName());
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTooltip, slot.GetToolTip());
|
||||
|
||||
CopyTranslationKeyedNameToDatumLabel(graphCanvasNodeId, slot.GetId(), graphCanvasSlotId);
|
||||
UpdateSlotDatumLabel(graphCanvasNodeId, slot.GetId(), slot.GetName());
|
||||
}
|
||||
|
||||
++index;
|
||||
}
|
||||
|
||||
// Set the name
|
||||
@@ -766,7 +847,7 @@ namespace ScriptCanvasEditor::Nodes
|
||||
return graphCanvasNodeId;
|
||||
}
|
||||
|
||||
// Function Nodes
|
||||
// Function Nodes
|
||||
AZ::EntityId DisplayFunctionNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::FunctionCallNode* functionNode)
|
||||
{
|
||||
return DisplayFunctionNode(graphCanvasGraphId, const_cast<ScriptCanvas::Nodes::Core::FunctionCallNode*>(functionNode));
|
||||
@@ -811,23 +892,42 @@ namespace ScriptCanvasEditor::Nodes
|
||||
{
|
||||
AZ_Error("Script Canvas", false, "Script Canvas Function asset (%s) is not loaded, unable to display the node.", functionNode->GetAssetId().ToString<AZStd::string>().c_str());
|
||||
|
||||
GraphCanvas::TranslationKeyedString errorTitle("ERROR!");
|
||||
GraphCanvas::TranslationKeyedString errorSubstring("Missing Script Canvas Function Asset!");
|
||||
GraphCanvas::TranslationKey key;
|
||||
key = "Globals.MissingFunctionAsset.Title.details.m_name";
|
||||
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTranslationKeyedTitle, errorTitle);
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTranslationKeyedSubTitle, errorSubstring);
|
||||
bool success = false;
|
||||
AZStd::string result = "Error!";
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(success, &GraphCanvas::TranslationRequests::Get, key = "Globals.MissingFunctionAsset.Title.details.m_name", result);
|
||||
if (success)
|
||||
{
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetTitle, result);
|
||||
}
|
||||
|
||||
result = "Missing Script Canvas Function Asset";
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(success, &GraphCanvas::TranslationRequests::Get, key = "Globals.MissingFunctionAsset.Title.details.tooltip", result);
|
||||
if (success)
|
||||
{
|
||||
GraphCanvas::NodeTitleRequestBus::Event(graphCanvasNodeId, &GraphCanvas::NodeTitleRequests::SetSubTitle, result);
|
||||
}
|
||||
|
||||
return graphCanvasNodeId;
|
||||
}
|
||||
|
||||
int paramIndex = 0;
|
||||
int outputIndex = 0;
|
||||
|
||||
for (const auto& slot : functionNode->GetSlots())
|
||||
{
|
||||
AZ::EntityId graphCanvasSlotId = DisplayScriptCanvasSlot(graphCanvasNodeId, slot);
|
||||
int& index = (slot.IsData() && slot.IsInput()) ? paramIndex : outputIndex;
|
||||
|
||||
AZ::EntityId graphCanvasSlotId = DisplayScriptCanvasSlot(graphCanvasNodeId, slot, index);
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetName, slot.GetName());
|
||||
GraphCanvas::SlotRequestBus::Event(graphCanvasSlotId, &GraphCanvas::SlotRequests::SetTooltip, slot.GetToolTip());
|
||||
|
||||
CopyTranslationKeyedNameToDatumLabel(graphCanvasNodeId, slot.GetId(), graphCanvasSlotId);
|
||||
UpdateSlotDatumLabel(graphCanvasNodeId, slot.GetId(), slot.GetName());
|
||||
|
||||
++index;
|
||||
}
|
||||
|
||||
if (asset)
|
||||
@@ -866,31 +966,11 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
if (const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(azrtti_typeid(functionDefinitionNode)))
|
||||
{
|
||||
AZStd::string nodeContext = GetContextName(*classData);
|
||||
nodeConfiguration.m_translationContext = TranslationHelper::GetUserDefinedContext(nodeContext);
|
||||
|
||||
nodeConfiguration.m_titleFallback = (classData->m_editData && classData->m_editData->m_name) ? classData->m_editData->m_name : classData->m_name;
|
||||
nodeConfiguration.m_tooltipFallback = (classData->m_editData && classData->m_editData->m_description) ? classData->m_editData->m_description : "";
|
||||
|
||||
GraphCanvas::TranslationKeyedString subtitleKeyedString(nodeContext, nodeConfiguration.m_translationContext);
|
||||
subtitleKeyedString.m_key = TranslationHelper::GetUserDefinedNodeKey(nodeContext, nodeConfiguration.m_titleFallback, ScriptCanvasEditor::TranslationKeyId::Category);
|
||||
|
||||
nodeConfiguration.m_subtitleFallback = subtitleKeyedString.GetDisplayString();
|
||||
|
||||
nodeConfiguration.m_translationKeyName = nodeConfiguration.m_titleFallback;
|
||||
nodeConfiguration.m_translationKeyContext = nodeContext;
|
||||
|
||||
nodeConfiguration.m_translationGroup = TranslationContextGroup::ClassMethod;
|
||||
|
||||
|
||||
ScriptCanvas::GraphScopedNodeId nodelingId;
|
||||
|
||||
nodelingId.m_identifier = nodeConfiguration.m_scriptCanvasId;
|
||||
nodelingId.m_scriptCanvasId = functionDefinitionNode->GetOwningScriptCanvasId();
|
||||
|
||||
AZStd::string nodelingName;
|
||||
ScriptCanvas::NodelingRequestBus::EventResult(nodelingName, nodelingId, &ScriptCanvas::NodelingRequests::GetDisplayName);
|
||||
|
||||
if (classData->m_editData)
|
||||
{
|
||||
const AZ::Edit::ElementData* elementData = classData->m_editData->FindElementData(AZ::Edit::ClassElements::EditorData);
|
||||
@@ -908,15 +988,12 @@ namespace ScriptCanvasEditor::Nodes
|
||||
}
|
||||
}
|
||||
|
||||
nodeConfiguration.m_subtitleFallback = "";
|
||||
|
||||
// Because of how the extender slots are registered, there isn't an easy way to only create one or the other based on
|
||||
// the type of nodeling, so instead they both get created and we need to remove the inapplicable one
|
||||
GraphCanvas::ConnectionType typeToRemove = (functionDefinitionNode->IsExecutionEntry()) ? GraphCanvas::CT_Input : GraphCanvas::CT_Output;
|
||||
|
||||
AZ::EntityId graphCanvasNodeId = DisplayGeneralScriptCanvasNode(graphCanvasGraphId, functionDefinitionNode, nodeConfiguration);
|
||||
|
||||
|
||||
AZStd::vector<GraphCanvas::SlotId> extenderSlotIds, executionSlotIds;
|
||||
GraphCanvas::NodeRequestBus::EventResult(extenderSlotIds, graphCanvasNodeId, &GraphCanvas::NodeRequests::FindVisibleSlotIdsByType, typeToRemove, GraphCanvas::SlotTypes::ExtenderSlot);
|
||||
if (!extenderSlotIds.empty())
|
||||
@@ -960,22 +1037,6 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
if (classData)
|
||||
{
|
||||
AZStd::string nodeContext = GetContextName(*classData);
|
||||
nodeConfiguration.m_translationContext = TranslationHelper::GetUserDefinedContext(nodeContext);
|
||||
|
||||
nodeConfiguration.m_titleFallback = (classData->m_editData && classData->m_editData->m_name) ? classData->m_editData->m_name : classData->m_name;
|
||||
nodeConfiguration.m_tooltipFallback = (classData->m_editData && classData->m_editData->m_description) ? classData->m_editData->m_description : "";
|
||||
|
||||
GraphCanvas::TranslationKeyedString subtitleKeyedString(nodeContext, nodeConfiguration.m_translationContext);
|
||||
subtitleKeyedString.m_key = TranslationHelper::GetUserDefinedNodeKey(nodeContext, nodeConfiguration.m_titleFallback, ScriptCanvasEditor::TranslationKeyId::Category);
|
||||
|
||||
nodeConfiguration.m_subtitleFallback = subtitleKeyedString.GetDisplayString();
|
||||
|
||||
nodeConfiguration.m_translationKeyName = nodeConfiguration.m_titleFallback;
|
||||
nodeConfiguration.m_translationKeyContext = nodeContext;
|
||||
|
||||
nodeConfiguration.m_translationGroup = TranslationContextGroup::ClassMethod;
|
||||
|
||||
if (classData->m_editData)
|
||||
{
|
||||
const AZ::Edit::ElementData* elementData = classData->m_editData->FindElementData(AZ::Edit::ClassElements::EditorData);
|
||||
@@ -993,8 +1054,6 @@ namespace ScriptCanvasEditor::Nodes
|
||||
}
|
||||
}
|
||||
|
||||
nodeConfiguration.m_subtitleFallback = "";
|
||||
|
||||
return DisplayGeneralScriptCanvasNode(graphCanvasGraphId, nodeling, nodeConfiguration);
|
||||
}
|
||||
|
||||
@@ -1008,19 +1067,6 @@ namespace ScriptCanvasEditor::Nodes
|
||||
nodeConfiguration.m_titlePalette = "GetVariableNodeTitlePalette";
|
||||
nodeConfiguration.m_scriptCanvasId = variableNode->GetEntityId();
|
||||
|
||||
// <Translation>
|
||||
nodeConfiguration.m_translationContext = TranslationHelper::GetContextName(TranslationContextGroup::ClassMethod, "CORE");
|
||||
|
||||
nodeConfiguration.m_translationKeyContext = "CORE";
|
||||
nodeConfiguration.m_translationKeyName = "GETVARIABLE";
|
||||
|
||||
nodeConfiguration.m_titleFallback = "Get Variable";
|
||||
nodeConfiguration.m_subtitleFallback = "";
|
||||
nodeConfiguration.m_tooltipFallback = "Gets the specified Variable or one of it's properties.";
|
||||
|
||||
nodeConfiguration.m_translationGroup = TranslationContextGroup::ClassMethod;
|
||||
// </Translation>
|
||||
|
||||
AZ::EntityId graphCanvasNodeId = DisplayGeneralScriptCanvasNode(graphCanvasGraphId, variableNode, nodeConfiguration);
|
||||
|
||||
GraphCanvas::SlotLayoutRequestBus::Event(graphCanvasNodeId, &GraphCanvas::SlotLayoutRequests::ConfigureSlotGroup, GraphCanvas::SlotGroups::ExecutionGroup, GraphCanvas::SlotGroupConfiguration(0));
|
||||
@@ -1040,20 +1086,6 @@ namespace ScriptCanvasEditor::Nodes
|
||||
nodeConfiguration.m_titlePalette = "SetVariableNodeTitlePalette";
|
||||
nodeConfiguration.m_scriptCanvasId = variableNode->GetEntityId();
|
||||
|
||||
// <Translation>
|
||||
|
||||
nodeConfiguration.m_translationContext = TranslationHelper::GetContextName(TranslationContextGroup::ClassMethod, "CORE");
|
||||
|
||||
nodeConfiguration.m_translationKeyContext = "CORE";
|
||||
nodeConfiguration.m_translationKeyName = "SETVARIABLE";
|
||||
|
||||
nodeConfiguration.m_titleFallback = "Set Variable";
|
||||
nodeConfiguration.m_subtitleFallback = "";
|
||||
nodeConfiguration.m_tooltipFallback = "Sets the specified Variable.";
|
||||
|
||||
nodeConfiguration.m_translationGroup = TranslationContextGroup::ClassMethod;
|
||||
// </Translation>
|
||||
|
||||
AZ::EntityId graphCanvasId = DisplayGeneralScriptCanvasNode(graphCanvasGraphId, variableNode, nodeConfiguration);
|
||||
|
||||
GraphCanvas::SlotLayoutRequestBus::Event(graphCanvasId, &GraphCanvas::SlotLayoutRequests::ConfigureSlotGroup, GraphCanvas::SlotGroups::ExecutionGroup, GraphCanvas::SlotGroupConfiguration(0));
|
||||
@@ -1158,7 +1190,7 @@ namespace ScriptCanvasEditor::Nodes
|
||||
return graphCanvasConnectionType;
|
||||
}
|
||||
|
||||
AZ::EntityId DisplayScriptCanvasSlot(AZ::EntityId graphCanvasNodeId, const ScriptCanvas::Slot& slot, GraphCanvas::SlotGroup slotGroup)
|
||||
AZ::EntityId DisplayScriptCanvasSlot(AZ::EntityId graphCanvasNodeId, const ScriptCanvas::Slot& slot, int slotIndex, GraphCanvas::SlotGroup slotGroup)
|
||||
{
|
||||
if (!slot.IsVisible())
|
||||
{
|
||||
@@ -1242,8 +1274,46 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
if (slotEntity)
|
||||
{
|
||||
GraphCanvas::TranslationKey slotKey;
|
||||
slotKey << "ScriptCanvas::Node" << azrtti_typeid(slot.GetNode()).ToString<AZStd::string>() << "slots";
|
||||
|
||||
AZStd::string slotKeyStr;
|
||||
if (slot.IsData())
|
||||
{
|
||||
slotKeyStr.append("Data");
|
||||
}
|
||||
|
||||
if (slot.GetConnectionType() == ScriptCanvas::ConnectionType::Input)
|
||||
{
|
||||
slotKeyStr.append("Input_");
|
||||
}
|
||||
else
|
||||
{
|
||||
slotKeyStr.append("Output_");
|
||||
}
|
||||
|
||||
slotKeyStr.append(slot.GetName());
|
||||
slotKeyStr.append(AZStd::string::format("_%d", slotIndex));
|
||||
slotKey << slotKeyStr << "details";
|
||||
|
||||
GraphCanvas::TranslationRequests::Details slotDetails;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(slotDetails, &GraphCanvas::TranslationRequests::GetDetails, slotKey, slotDetails);
|
||||
|
||||
if (slotDetails.m_name.empty())
|
||||
{
|
||||
slotDetails.m_name = slot.GetName();
|
||||
}
|
||||
|
||||
if (slotDetails.m_tooltip.empty())
|
||||
{
|
||||
slotDetails.m_tooltip = slot.GetToolTip();
|
||||
}
|
||||
|
||||
GraphCanvas::SlotRequestBus::Event(slotEntity->GetId(), &GraphCanvas::SlotRequests::SetName, slotDetails.m_name);
|
||||
GraphCanvas::SlotRequestBus::Event(slotEntity->GetId(), &GraphCanvas::SlotRequests::SetTooltip, slotDetails.m_tooltip);
|
||||
|
||||
RegisterAndActivateGraphCanvasSlot(graphCanvasNodeId, slot.GetId(), slotEntity);
|
||||
CopyTranslationKeyedNameToDatumLabel(graphCanvasNodeId, slot.GetId(), slotEntity->GetId());
|
||||
UpdateSlotDatumLabel(graphCanvasNodeId, slot.GetId(), slot.GetName());
|
||||
return slotEntity->GetId();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -63,5 +63,5 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
// SlotGroup will control how elements are grouped.
|
||||
// Invalid will cause the slots to put themselves into whatever category they belong to by default.
|
||||
AZ::EntityId DisplayScriptCanvasSlot(AZ::EntityId graphCanvasNodeId, const ScriptCanvas::Slot& slot, GraphCanvas::SlotGroup group = GraphCanvas::SlotGroups::Invalid);
|
||||
AZ::EntityId DisplayScriptCanvasSlot(AZ::EntityId graphCanvasNodeId, const ScriptCanvas::Slot& slot, int slotIndex, GraphCanvas::SlotGroup group = GraphCanvas::SlotGroups::Invalid);
|
||||
}
|
||||
|
||||
@@ -12,22 +12,13 @@
|
||||
#include <GraphCanvas/Components/Slots/SlotBus.h>
|
||||
#include <GraphCanvas/Components/DynamicOrderingDynamicSlotComponent.h>
|
||||
|
||||
#include <ScriptCanvas/Core/ModifiableDatumView.h>
|
||||
#include <ScriptCanvas/Core/NodeBus.h>
|
||||
|
||||
namespace ScriptCanvasEditor::Nodes
|
||||
{
|
||||
void CopyTranslationKeyedNameToDatumLabel(const AZ::EntityId& graphCanvasNodeId,
|
||||
ScriptCanvas::SlotId scSlotId,
|
||||
const AZ::EntityId& graphCanvasSlotId)
|
||||
void UpdateSlotDatumLabel(const AZ::EntityId& graphCanvasNodeId, ScriptCanvas::SlotId scSlotId, const AZStd::string& name)
|
||||
{
|
||||
GraphCanvas::TranslationKeyedString name;
|
||||
GraphCanvas::SlotRequestBus::EventResult(name, graphCanvasSlotId, &GraphCanvas::SlotRequests::GetTranslationKeyedName);
|
||||
if (name.GetDisplayString().empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// GC node -> SC node.
|
||||
AZStd::any* userData = nullptr;
|
||||
GraphCanvas::NodeRequestBus::EventResult(userData, graphCanvasNodeId, &GraphCanvas::NodeRequests::GetUserData);
|
||||
AZ::EntityId scNodeEntityId = userData && userData->is<AZ::EntityId>() ? *AZStd::any_cast<AZ::EntityId>(userData) : AZ::EntityId();
|
||||
@@ -36,11 +27,11 @@ namespace ScriptCanvasEditor::Nodes
|
||||
ScriptCanvas::ModifiableDatumView datumView;
|
||||
ScriptCanvas::NodeRequestBus::Event(scNodeEntityId, &ScriptCanvas::NodeRequests::FindModifiableDatumView, scSlotId, datumView);
|
||||
|
||||
datumView.RelabelDatum(name.GetDisplayString());
|
||||
datumView.RelabelDatum(name);
|
||||
}
|
||||
}
|
||||
|
||||
void CopySlotTranslationKeyedNamesToDatums(AZ::EntityId graphCanvasNodeId)
|
||||
void UpdateSlotDatumLabels(AZ::EntityId graphCanvasNodeId)
|
||||
{
|
||||
AZStd::vector<AZ::EntityId> graphCanvasSlotIds;
|
||||
GraphCanvas::NodeRequestBus::EventResult(graphCanvasSlotIds, graphCanvasNodeId, &GraphCanvas::NodeRequests::GetSlotIds);
|
||||
@@ -51,47 +42,10 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
if (auto scriptCanvasSlotId = AZStd::any_cast<ScriptCanvas::SlotId>(slotUserData))
|
||||
{
|
||||
CopyTranslationKeyedNameToDatumLabel(graphCanvasNodeId, *scriptCanvasSlotId, graphCanvasSlotId);
|
||||
AZStd::string slotName;
|
||||
GraphCanvas::SlotRequestBus::EventResult(slotName, graphCanvasSlotId, &GraphCanvas::SlotRequests::GetName);
|
||||
UpdateSlotDatumLabel(graphCanvasNodeId, *scriptCanvasSlotId, slotName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////
|
||||
// NodeConfiguration
|
||||
//////////////////////
|
||||
AZStd::string GetCategoryName(const AZ::SerializeContext::ClassData& classData)
|
||||
{
|
||||
if (auto editorDataElement = classData.m_editData->FindElementData(AZ::Edit::ClassElements::EditorData))
|
||||
{
|
||||
if (auto attribute = editorDataElement->FindAttribute(AZ::Edit::Attributes::Category))
|
||||
{
|
||||
if (auto data = azrtti_cast<AZ::Edit::AttributeData<const char*>*>(attribute))
|
||||
{
|
||||
return data->Get(nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
AZStd::string GetContextName(const AZ::SerializeContext::ClassData& classData)
|
||||
{
|
||||
if (auto editorDataElement = classData.m_editData ? classData.m_editData->FindElementData(AZ::Edit::ClassElements::EditorData) : nullptr)
|
||||
{
|
||||
if (auto attribute = editorDataElement->FindAttribute(AZ::Edit::Attributes::Category))
|
||||
{
|
||||
if (auto data = azrtti_cast<AZ::Edit::AttributeData<const char*>*>(attribute))
|
||||
{
|
||||
AZStd::string fullCategoryName = data->Get(nullptr);
|
||||
AZStd::string delimiter = "/";
|
||||
AZStd::vector<AZStd::string> results;
|
||||
AZStd::tokenize(fullCategoryName, delimiter, results);
|
||||
return results.back();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,18 +71,6 @@ namespace ScriptCanvasEditor
|
||||
AZStd::string m_titlePalette;
|
||||
AZStd::vector< AZ::Uuid > m_customComponents;
|
||||
|
||||
// Translation Information for the Node
|
||||
AZStd::string m_translationContext;
|
||||
|
||||
AZStd::string m_translationKeyName;
|
||||
AZStd::string m_translationKeyContext;
|
||||
|
||||
TranslationContextGroup m_translationGroup;
|
||||
|
||||
AZStd::string m_titleFallback;
|
||||
AZStd::string m_subtitleFallback;
|
||||
AZStd::string m_tooltipFallback;
|
||||
|
||||
AZ::EntityId m_scriptCanvasId;
|
||||
};
|
||||
|
||||
@@ -92,16 +80,9 @@ namespace ScriptCanvasEditor
|
||||
AZStd::string m_titlePalette;
|
||||
};
|
||||
|
||||
AZStd::string GetContextName(const AZ::SerializeContext::ClassData& classData);
|
||||
AZStd::string GetCategoryName(const AZ::SerializeContext::ClassData& classData);
|
||||
|
||||
void CopySlotTranslationKeyedNamesToDatums(AZ::EntityId graphCanvasNodeId);
|
||||
|
||||
// Copies the the translated key name to the ScriptCanvas Data Slot which matches
|
||||
// the scSlotId
|
||||
void CopyTranslationKeyedNameToDatumLabel(const AZ::EntityId& graphCanvasNodeId,
|
||||
ScriptCanvas::SlotId scSlotId,
|
||||
const AZ::EntityId& graphCanvasSlotId);
|
||||
// Copies the slot name to the underlying ScriptCanvas Data Slot which matches the slot Id
|
||||
void UpdateSlotDatumLabels(AZ::EntityId graphCanvasNodeId);
|
||||
void UpdateSlotDatumLabel(const AZ::EntityId& graphCanvasNodeId, ScriptCanvas::SlotId scSlotId, const AZStd::string& name);
|
||||
|
||||
template <typename NodeType>
|
||||
NodeType* GetNode(AZ::EntityId scriptCanvasGraphId, NodeIdPair nodeIdPair)
|
||||
|
||||
@@ -395,6 +395,7 @@ namespace ScriptCanvasEditor
|
||||
->Field("ShowUpgradeDialog", &ScriptCanvasEditorSettings::m_showUpgradeDialog)
|
||||
->Field("ZoomSettings", &ScriptCanvasEditorSettings::m_zoomSettings)
|
||||
->Field("ExperimentalSettings", &ScriptCanvasEditorSettings::m_experimentalSettings)
|
||||
->Field("SceneContextMenuNodePaletteWidth", &ScriptCanvasEditorSettings::m_sceneContextMenuNodePaletteWidth)
|
||||
;
|
||||
|
||||
AZ::EditContext* editContext = serialize->GetEditContext();
|
||||
@@ -467,13 +468,13 @@ namespace ScriptCanvasEditor
|
||||
->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20))
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_snapDistance, "Connection Snap Distance", "The distance from a slot under which connections will snap to it.")
|
||||
->Attribute(AZ::Edit::Attributes::Min, 10.0)
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_enableGroupDoubleClickCollapse, "Double Click to Collapse/Uncollapse Group", "Enables the user to decide whether you can double click on a group to collapse/uncollapse a group.")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_enableGroupDoubleClickCollapse, "Double Click to Collapse/Expand Group", "Enables the user to decide whether you can double click on a group to collapse/expand a group.")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_allowBookmarkViewpointControl, "Bookmark Zooming", "Will cause the bookmarks to force the viewport into the state determined by the bookmark type\nBookmark Anchors - The viewport that exists when the bookmark is created.\nNode Groups - The area the Node Group covers")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_dragNodeCouplingConfig, "Node Coupling Configuration", "Controls for managing Node Coupling.\nNode Coupling is when you are dragging a node and leave it hovered over another Node, we will try to connect the sides you overlapped with each other.")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_dragNodeSplicingConfig, "Drag Node Splicing Configuration", "Controls for managing Node Splicing on a Drag.\nNode Splicing on a Drag will let you drag a node onto a connection, and splice that node onto the specified connection.")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_dropNodeSplicingConfig, "Drop Node Splicing Configuration", "Controls for managing Node Splicing on a Drag.\nNode Splicing on a drop will let you drop a node onto a connection from the Node Palette, and splice that node onto the specified connection.")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_autoSaveConfig, "AutoSave Configuration", "Controls for managing Auto Saving.\nAuto Saving will occur after the specified time of inactivity on a graph.")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_shakeDespliceConfig, "Shake To Desplice", "Settings that controls various parameters of the Shake to Desplice feature")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_shakeDespliceConfig, "Shake To De-splice", "Settings that controls various parameters of the Shake to De-splice feature")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_allowNodeNudging, "Allow Node Nudging", "Controls whether or not nodes will attempt to nudge each other out of the way under various interactions.")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_alignmentTimeMS, "Alignment Time", "Controls the amount of time nodes will take to slide into place when performing alignment commands")
|
||||
->Attribute(AZ::Edit::Attributes::Min, 0)
|
||||
@@ -485,8 +486,10 @@ namespace ScriptCanvasEditor
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_experimentalSettings, "Experimental Settings", "Settings that will control elements that are under development and may not work as expected")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_saveRawTranslationOuputToFile, "Save Translation File", "Save out the raw result of translation for debug purposes")
|
||||
->Attribute(AZ::Edit::Attributes::ChangeNotify, &SettingsCpp::UpdateProcessingSettings)
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_printAbstractCodeModel, "Print Abstract Modeld", "Print out the Abstract Code Model to the console at the end of parsing for debug purposes")
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_printAbstractCodeModel, "Print Abstract Model", "Print out the Abstract Code Model to the console at the end of parsing for debug purposes")
|
||||
->Attribute(AZ::Edit::Attributes::ChangeNotify, &SettingsCpp::UpdateProcessingSettings)
|
||||
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_sceneContextMenuNodePaletteWidth, "Context Menu Width", "Allows you to configure the width of the context menu that opens on a Script Canvas graph")
|
||||
->Attribute(AZ::Edit::Attributes::Min, 120)
|
||||
;
|
||||
|
||||
editContext->Class<ExperimentalSettings>("Experimental", "Settings for features under development that may not behave as expected yet.")
|
||||
|
||||
@@ -357,6 +357,8 @@ namespace ScriptCanvasEditor
|
||||
AZ::u32 m_alignmentTimeMS;
|
||||
|
||||
StylingSettings m_stylingSettings;
|
||||
|
||||
AZ::u32 m_sceneContextMenuNodePaletteWidth = 300;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,507 +8,44 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <Source/Translation/TranslationBus.h>
|
||||
#include <ScriptCanvas/Data/Data.h>
|
||||
|
||||
#include <AzCore/Serialization/Json/StackedString.h>
|
||||
#include <AzCore/std/string/conversions.h>
|
||||
|
||||
#include <ScriptCanvas/Core/Slot.h>
|
||||
#include <GraphCanvas/Types/TranslationTypes.h>
|
||||
namespace Translation
|
||||
{
|
||||
namespace GlobalKeys
|
||||
{
|
||||
static constexpr const char* EBusSenderIDKey = "Globals.EBusSenderBusId";
|
||||
static constexpr const char* EBusHandlerIDKey = "Globals.EBusHandlerBusId";
|
||||
static constexpr const char* MissingFunctionKey = "Globals.MissingFunction";
|
||||
static constexpr const char* EBusHandlerOutSlot = "Globals.EBusHandler.OutSlot";
|
||||
}
|
||||
}
|
||||
|
||||
namespace ScriptCanvasEditor
|
||||
{
|
||||
enum class TranslationContextGroup : AZ::u32
|
||||
namespace TranslationHelper
|
||||
{
|
||||
EbusSender,
|
||||
EbusHandler,
|
||||
ClassMethod,
|
||||
GlobalMethod,
|
||||
Invalid
|
||||
};
|
||||
|
||||
enum class TranslationItemType : AZ::u32
|
||||
{
|
||||
Node,
|
||||
Wrapper,
|
||||
ExecutionInSlot,
|
||||
ExecutionOutSlot,
|
||||
ParamDataSlot,
|
||||
ReturnDataSlot,
|
||||
BusIdSlot,
|
||||
Invalid
|
||||
};
|
||||
|
||||
enum class TranslationKeyId : AZ::u32
|
||||
{
|
||||
Name,
|
||||
Tooltip,
|
||||
Category,
|
||||
Invalid
|
||||
};
|
||||
|
||||
namespace TranslationContextGroupParts
|
||||
{
|
||||
const char* const ebusSender = "EBus";
|
||||
const char* const ebusHandler = "Handler";
|
||||
const char* const classMethod = "Method";
|
||||
constexpr const char* const globalMethod = "GlobalMethod";
|
||||
};
|
||||
|
||||
namespace TranslationKeyParts
|
||||
{
|
||||
const char* const handler = "HANDLER_";
|
||||
const char* const name = "NAME";
|
||||
const char* const tooltip = "TOOLTIP";
|
||||
const char* const category = "CATEGORY";
|
||||
const char* const in = "IN";
|
||||
const char* const out = "OUT";
|
||||
const char* const param = "PARAM";
|
||||
const char* const output = "OUTPUT";
|
||||
const char* const busid = "BUSID";
|
||||
}
|
||||
|
||||
// The context name and keys generated by TranslationHelper should match the keys
|
||||
// being exported by the TSGenerateAction.cpp in the ScriptCanvasDeveloper Gem.
|
||||
class TranslationHelper
|
||||
{
|
||||
public:
|
||||
static AZStd::string GetContextName(TranslationContextGroup group, AZStd::string_view keyBase)
|
||||
{
|
||||
if (group == TranslationContextGroup::Invalid || keyBase.empty())
|
||||
{
|
||||
// Missing information
|
||||
return AZStd::string();
|
||||
}
|
||||
|
||||
const char* groupPart;
|
||||
|
||||
switch (group)
|
||||
{
|
||||
case TranslationContextGroup::EbusSender:
|
||||
groupPart = TranslationContextGroupParts::ebusSender;
|
||||
break;
|
||||
case TranslationContextGroup::EbusHandler:
|
||||
groupPart = TranslationContextGroupParts::ebusHandler;
|
||||
break;
|
||||
case TranslationContextGroup::ClassMethod:
|
||||
groupPart = TranslationContextGroupParts::classMethod;
|
||||
break;
|
||||
case TranslationContextGroup::GlobalMethod:
|
||||
groupPart = TranslationContextGroupParts::globalMethod;
|
||||
break;
|
||||
default:
|
||||
AZ_Warning("TranslationComponent", false, "Invalid translation group ID.");
|
||||
groupPart = "";
|
||||
}
|
||||
|
||||
AZStd::string fullKey = AZStd::string::format("%s: %.*s", groupPart,
|
||||
aznumeric_cast<int>(keyBase.size()), keyBase.data());
|
||||
|
||||
return fullKey;
|
||||
}
|
||||
|
||||
// UserDefined
|
||||
static AZStd::string GetUserDefinedContext(AZStd::string_view contextName)
|
||||
{
|
||||
return GetContextName(TranslationContextGroup::ClassMethod, contextName);
|
||||
}
|
||||
|
||||
static AZStd::string GetUserDefinedKey(AZStd::string_view contextName, TranslationKeyId keyId)
|
||||
{
|
||||
return GetClassKey(TranslationContextGroup::ClassMethod, contextName, keyId);
|
||||
}
|
||||
|
||||
static AZStd::string GetUserDefinedNodeKey(AZStd::string_view contextName, AZStd::string_view nodeName, TranslationKeyId keyId)
|
||||
{
|
||||
return GetKey(TranslationContextGroup::ClassMethod, contextName, nodeName, TranslationItemType::Node, keyId);
|
||||
}
|
||||
|
||||
static AZStd::string GetUserDefinedNodeSlotKey(AZStd::string_view contextName, AZStd::string_view nodeName, TranslationItemType itemType, TranslationKeyId keyId, int slotIndex)
|
||||
{
|
||||
return GetKey(TranslationContextGroup::ClassMethod, contextName, nodeName, itemType, keyId, slotIndex);
|
||||
}
|
||||
////
|
||||
|
||||
// EBusEvent
|
||||
static AZStd::string GetEbusHandlerContext(AZStd::string_view busName)
|
||||
{
|
||||
return GetContextName(TranslationContextGroup::EbusHandler, busName);
|
||||
}
|
||||
|
||||
static AZStd::string GetEbusHandlerKey(AZStd::string_view busName, TranslationKeyId keyId)
|
||||
{
|
||||
return GetClassKey(TranslationContextGroup::EbusHandler, busName, keyId);
|
||||
}
|
||||
|
||||
static AZStd::string GetEbusHandlerEventKey(AZStd::string_view busName, AZStd::string_view eventName, TranslationKeyId keyId)
|
||||
{
|
||||
return GetKey(TranslationContextGroup::EbusHandler, busName, eventName, TranslationItemType::Node, keyId);
|
||||
}
|
||||
|
||||
static AZStd::string GetEBusHandlerSlotKey(AZStd::string_view busName, AZStd::string_view eventName, TranslationItemType type, TranslationKeyId keyId, int paramIndex)
|
||||
{
|
||||
return GetKey(TranslationContextGroup::EbusHandler, busName, eventName, type, keyId, paramIndex);
|
||||
}
|
||||
////
|
||||
|
||||
static AZStd::string GetKey(TranslationContextGroup group, AZStd::string_view keyBase, AZStd::string_view keyName, TranslationItemType type, TranslationKeyId keyId, int paramIndex = 0)
|
||||
{
|
||||
if (group == TranslationContextGroup::Invalid || keyBase.empty()
|
||||
|| type == TranslationItemType::Invalid || keyId == TranslationKeyId::Invalid)
|
||||
{
|
||||
// Missing information
|
||||
return AZStd::string();
|
||||
}
|
||||
|
||||
if (type != TranslationItemType::Wrapper && keyName.empty())
|
||||
{
|
||||
// Missing information
|
||||
return AZStd::string();
|
||||
}
|
||||
|
||||
AZStd::string fullKey;
|
||||
|
||||
const char* prefix = "";
|
||||
if (group == TranslationContextGroup::EbusHandler)
|
||||
{
|
||||
prefix = TranslationKeyParts::handler;
|
||||
}
|
||||
|
||||
const char* keyPart = GetKeyPart(keyId);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case TranslationItemType::Node:
|
||||
fullKey = AZStd::string::format("%s%.*s_%.*s_%s",
|
||||
prefix,
|
||||
aznumeric_cast<int>(keyBase.size()),
|
||||
keyBase.data(),
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
case TranslationItemType::Wrapper:
|
||||
fullKey = GetClassKey(group, keyBase, keyId);
|
||||
break;
|
||||
case TranslationItemType::ExecutionInSlot:
|
||||
fullKey = AZStd::string::format("%s%.*s_%.*s_%s_%s",
|
||||
prefix,
|
||||
aznumeric_cast<int>(keyBase.size()),
|
||||
keyBase.data(),
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
TranslationKeyParts::in,
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
case TranslationItemType::ExecutionOutSlot:
|
||||
fullKey = AZStd::string::format("%s%.*s_%.*s_%s_%s",
|
||||
prefix,
|
||||
aznumeric_cast<int>(keyBase.size()),
|
||||
keyBase.data(),
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
TranslationKeyParts::out,
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
case TranslationItemType::ParamDataSlot:
|
||||
fullKey = AZStd::string::format("%s%.*s_%.*s_%s%d_%s",
|
||||
prefix,
|
||||
aznumeric_cast<int>(keyBase.size()),
|
||||
keyBase.data(),
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
TranslationKeyParts::param,
|
||||
paramIndex,
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
case TranslationItemType::ReturnDataSlot:
|
||||
fullKey = AZStd::string::format("%s%.*s_%.*s_%s%d_%s",
|
||||
prefix,
|
||||
aznumeric_cast<int>(keyBase.size()),
|
||||
keyBase.data(),
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
TranslationKeyParts::output,
|
||||
paramIndex,
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
case TranslationItemType::BusIdSlot:
|
||||
fullKey = AZStd::string::format("%s%.*s_%.*s_%s_%s",
|
||||
prefix,
|
||||
aznumeric_cast<int>(keyBase.size()),
|
||||
keyBase.data(),
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
TranslationKeyParts::busid,
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
default:
|
||||
AZ_Warning("ScriptCanvas TranslationHelper", false, "Invalid translation item type.");
|
||||
}
|
||||
|
||||
AZStd::to_upper(fullKey.begin(), fullKey.end());
|
||||
|
||||
return fullKey;
|
||||
}
|
||||
|
||||
static AZStd::string GetClassKey(TranslationContextGroup group, AZStd::string_view keyBase, TranslationKeyId keyId)
|
||||
{
|
||||
const char* prefix = "";
|
||||
if (group == TranslationContextGroup::EbusHandler)
|
||||
{
|
||||
prefix = TranslationKeyParts::handler;
|
||||
}
|
||||
|
||||
const char* keyPart = GetKeyPart(keyId);
|
||||
|
||||
AZStd::string fullKey = AZStd::string::format("%s%.*s_%s",
|
||||
prefix,
|
||||
aznumeric_cast<int>(keyBase.size()),
|
||||
keyBase.data(),
|
||||
keyPart
|
||||
);
|
||||
|
||||
AZStd::to_upper(fullKey.begin(), fullKey.end());
|
||||
|
||||
return fullKey;
|
||||
}
|
||||
|
||||
static AZStd::string GetGlobalMethodKey(AZStd::string_view keyName, TranslationItemType keyType,
|
||||
TranslationKeyId keyId, int paramIndex = 0)
|
||||
{
|
||||
const char* keyPart = GetKeyPart(keyId);
|
||||
|
||||
AZStd::string fullKey;
|
||||
switch (keyType)
|
||||
{
|
||||
case TranslationItemType::Node:
|
||||
fullKey = AZStd::string::format("%.*s_%s",
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
case TranslationItemType::ExecutionInSlot:
|
||||
fullKey = AZStd::string::format("%.*s_%s_%s",
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
TranslationKeyParts::in,
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
case TranslationItemType::ExecutionOutSlot:
|
||||
fullKey = AZStd::string::format("%.*s_%s_%s",
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
TranslationKeyParts::out,
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
case TranslationItemType::ParamDataSlot:
|
||||
fullKey = AZStd::string::format("%.*s_%s%d_%s",
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
TranslationKeyParts::param,
|
||||
paramIndex,
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
case TranslationItemType::ReturnDataSlot:
|
||||
fullKey = AZStd::string::format("%.*s_%s%d_%s",
|
||||
aznumeric_cast<int>(keyName.size()),
|
||||
keyName.data(),
|
||||
TranslationKeyParts::output,
|
||||
paramIndex,
|
||||
keyPart
|
||||
);
|
||||
break;
|
||||
default:
|
||||
AZ_Warning("ScriptCanvas TranslationHelper", false, "Invalid translation item type.");
|
||||
}
|
||||
|
||||
AZStd::to_upper(fullKey.begin(), fullKey.end());
|
||||
|
||||
return fullKey;
|
||||
}
|
||||
|
||||
static const char* GetKeyPart(TranslationKeyId keyId)
|
||||
{
|
||||
const char* keyPart = "";
|
||||
|
||||
switch (keyId)
|
||||
{
|
||||
case TranslationKeyId::Name:
|
||||
keyPart = TranslationKeyParts::name;
|
||||
break;
|
||||
case TranslationKeyId::Tooltip:
|
||||
keyPart = TranslationKeyParts::tooltip;
|
||||
break;
|
||||
case TranslationKeyId::Category:
|
||||
keyPart = TranslationKeyParts::category;
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
AZ_Warning("ScriptCanvas TranslationHelper", false, "Invalid translation key ID.");
|
||||
}
|
||||
|
||||
return keyPart;
|
||||
}
|
||||
|
||||
static TranslationItemType GetItemType(ScriptCanvas::SlotDescriptor slotDescriptor)
|
||||
{
|
||||
if (slotDescriptor == ScriptCanvas::SlotDescriptors::ExecutionIn())
|
||||
{
|
||||
return TranslationItemType::ExecutionInSlot;
|
||||
}
|
||||
else if (slotDescriptor == ScriptCanvas::SlotDescriptors::ExecutionOut())
|
||||
{
|
||||
return TranslationItemType::ExecutionOutSlot;
|
||||
}
|
||||
else if (slotDescriptor == ScriptCanvas::SlotDescriptors::DataIn())
|
||||
{
|
||||
return TranslationItemType::ParamDataSlot;
|
||||
}
|
||||
else if (slotDescriptor == ScriptCanvas::SlotDescriptors::DataOut())
|
||||
{
|
||||
return TranslationItemType::ReturnDataSlot;
|
||||
}
|
||||
|
||||
return TranslationItemType::Invalid;
|
||||
}
|
||||
|
||||
static AZStd::string GetSafeTypeName(ScriptCanvas::Data::Type dataType)
|
||||
inline AZStd::string GetSafeTypeName(ScriptCanvas::Data::Type dataType)
|
||||
{
|
||||
if (!dataType.IsValid())
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
return ScriptCanvas::Data::GetName(dataType);
|
||||
AZStd::string azType = dataType.GetAZType().ToString<AZStd::string>();
|
||||
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "BehaviorType" << azType << "details";
|
||||
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
|
||||
details.m_name = ScriptCanvas::Data::GetName(dataType);
|
||||
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
return details.m_name;
|
||||
}
|
||||
|
||||
static AZStd::string GetKeyTranslation(TranslationContextGroup group, AZStd::string_view keyBase, AZStd::string_view keyName, TranslationItemType type, TranslationKeyId keyId, int paramIndex = 0)
|
||||
{
|
||||
AZStd::string translationContext = TranslationHelper::GetContextName(group, keyBase);
|
||||
AZStd::string translationKey = TranslationHelper::GetKey(group, keyBase, keyName, type, keyId, paramIndex);
|
||||
AZStd::string translated = QCoreApplication::translate(translationContext.c_str(), translationKey.c_str()).toUtf8().data();
|
||||
|
||||
if (translated == translationKey)
|
||||
{
|
||||
return AZStd::string();
|
||||
}
|
||||
|
||||
return translated;
|
||||
}
|
||||
|
||||
static AZStd::string GetClassKeyTranslation(TranslationContextGroup group, AZStd::string_view keyBase, TranslationKeyId keyId)
|
||||
{
|
||||
AZStd::string translationContext = TranslationHelper::GetContextName(group, keyBase);
|
||||
AZStd::string translationKey = TranslationHelper::GetClassKey(group, keyBase, keyId);
|
||||
AZStd::string translated = QCoreApplication::translate(translationContext.c_str(), translationKey.c_str()).toUtf8().data();
|
||||
|
||||
if (translated == translationKey)
|
||||
{
|
||||
return AZStd::string();
|
||||
}
|
||||
|
||||
return translated;
|
||||
}
|
||||
|
||||
static AZStd::string GetGlobalMethodKeyTranslation(AZStd::string_view keyName,
|
||||
TranslationItemType keyType, TranslationKeyId keyId, int paramIndex = 0)
|
||||
{
|
||||
AZStd::string translationKey = TranslationHelper::GetGlobalMethodKey(keyName, keyType, keyId, paramIndex);
|
||||
AZStd::string translated = QCoreApplication::translate(TranslationContextGroupParts::globalMethod, translationKey.c_str()).toUtf8().data();
|
||||
|
||||
if (translated == translationKey)
|
||||
{
|
||||
return AZStd::string();
|
||||
}
|
||||
|
||||
return translated;
|
||||
}
|
||||
|
||||
static GraphCanvas::TranslationKeyedString GetEBusHandlerBusIdNameKey()
|
||||
{
|
||||
GraphCanvas::TranslationKeyedString keyedString;
|
||||
keyedString.m_context = "Globals";
|
||||
keyedString.m_key = "DEFAULTS_EBUSHANDLER_BUSID_NAME";
|
||||
keyedString.SetFallback("BusId");
|
||||
|
||||
return keyedString;
|
||||
}
|
||||
|
||||
static GraphCanvas::TranslationKeyedString GetEBusHandlerBusIdTooltipKey()
|
||||
{
|
||||
GraphCanvas::TranslationKeyedString keyedString;
|
||||
keyedString.m_context = "Globals";
|
||||
keyedString.m_key = "DEFAULTS_EBUSHANDLER_BUSID_TOOLTIP";
|
||||
keyedString.SetFallback("BusId");
|
||||
|
||||
return keyedString;
|
||||
}
|
||||
|
||||
static GraphCanvas::TranslationKeyedString GetEBusHandlerOnEventTriggeredNameKey()
|
||||
{
|
||||
GraphCanvas::TranslationKeyedString keyedString;
|
||||
keyedString.m_context = "Globals";
|
||||
keyedString.m_key = "DEFAULTS_EBUSHANDLER_ONTRIGGERED_NAME";
|
||||
keyedString.SetFallback("Out");
|
||||
|
||||
return keyedString;
|
||||
}
|
||||
|
||||
static GraphCanvas::TranslationKeyedString GetEBusHandlerOnEventTriggeredTooltipKey()
|
||||
{
|
||||
GraphCanvas::TranslationKeyedString keyedString;
|
||||
keyedString.m_context = "Globals";
|
||||
keyedString.m_key = "DEFAULTS_EBUSHANDLER_ONTRIGGERED_TOOLTIP";
|
||||
keyedString.SetFallback("Out");
|
||||
|
||||
return keyedString;
|
||||
}
|
||||
|
||||
static GraphCanvas::TranslationKeyedString GetEBusSenderBusIdNameKey()
|
||||
{
|
||||
GraphCanvas::TranslationKeyedString keyedString;
|
||||
keyedString.m_context = "Globals";
|
||||
keyedString.m_key = "DEFAULTS_EBUSSENDER_BUSID_NAME";
|
||||
keyedString.SetFallback("BusId");
|
||||
|
||||
return keyedString;
|
||||
}
|
||||
|
||||
static GraphCanvas::TranslationKeyedString GetEBusSenderBusIdTooltipKey()
|
||||
{
|
||||
GraphCanvas::TranslationKeyedString keyedString;
|
||||
keyedString.m_context = "Globals";
|
||||
keyedString.m_key = "DEFAULTS_EBUSSENDER_BUSID_TOOLTIP";
|
||||
keyedString.SetFallback("BusId");
|
||||
|
||||
return keyedString;
|
||||
}
|
||||
|
||||
// Use the StackedString to index the translation keys as a Json Pointer
|
||||
static constexpr AZStd::string_view GetAzEventHandlerContextKey()
|
||||
{
|
||||
return { "AzEventHandler" };
|
||||
}
|
||||
|
||||
// Use the StackedString to index the translation keys as a Json Pointer
|
||||
static AZ::StackedString GetAzEventHandlerRootPointer(AZStd::string_view eventName)
|
||||
{
|
||||
AZ::StackedString path(AZ::StackedString::Format::JsonPointer);
|
||||
path.Push(eventName);
|
||||
|
||||
return path;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+10
-2
@@ -16,7 +16,6 @@
|
||||
#include <AzCore/Serialization/Utils.h>
|
||||
#include <AzCore/UserSettings/UserSettings.h>
|
||||
|
||||
#include <GraphCanvas/Types/TranslationTypes.h>
|
||||
#include <GraphCanvas/Components/SceneBus.h>
|
||||
#include <GraphCanvas/Components/StyleBus.h>
|
||||
|
||||
@@ -244,7 +243,16 @@ namespace ScriptCanvasEditor
|
||||
|
||||
AZStd::string DataTypePaletteModel::FindTypeNameForTypeId(const AZ::TypeId& typeId) const
|
||||
{
|
||||
return TranslationHelper::GetSafeTypeName(ScriptCanvas::Data::FromAZType(typeId));
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "BehaviorType" << typeId.ToString<AZStd::string>() << "details";
|
||||
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
|
||||
details.m_name = TranslationHelper::GetSafeTypeName(ScriptCanvas::Data::FromAZType(typeId));
|
||||
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
return details.m_name;
|
||||
}
|
||||
|
||||
void DataTypePaletteModel::TogglePendingPinChange(const AZ::Uuid& azVarType)
|
||||
|
||||
+17
-27
@@ -97,23 +97,17 @@ namespace ScriptCanvasEditor
|
||||
, m_isOverload(isOverload)
|
||||
, m_propertyStatus(propertyStatus)
|
||||
{
|
||||
AZStd::string displayEventName = TranslationHelper::GetKeyTranslation(TranslationContextGroup::EbusSender, m_busName.toUtf8().data(), m_eventName.toUtf8().data(), TranslationItemType::Node, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusSender" << busName << "methods" << eventName << "details";
|
||||
|
||||
if (displayEventName.empty())
|
||||
{
|
||||
SetName(m_eventName);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetName(displayEventName.c_str());
|
||||
}
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
details.m_name = eventName;
|
||||
details.m_subtitle = busName;
|
||||
|
||||
AZStd::string displayEventTooltip = TranslationHelper::GetKeyTranslation(TranslationContextGroup::EbusSender, m_busName.toUtf8().data(), m_eventName.toUtf8().data(), TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
if (!displayEventTooltip.empty())
|
||||
{
|
||||
SetToolTip(displayEventTooltip.c_str());
|
||||
}
|
||||
SetName(details.m_name.c_str());
|
||||
SetToolTip(details.m_tooltip.c_str());
|
||||
|
||||
SetTitlePalette("MethodNodeTitlePalette");
|
||||
}
|
||||
@@ -302,23 +296,19 @@ namespace ScriptCanvasEditor
|
||||
, m_busId(busId)
|
||||
, m_eventId(eventId)
|
||||
{
|
||||
AZStd::string displayEventName = TranslationHelper::GetKeyTranslation(TranslationContextGroup::EbusHandler, m_busName.c_str(), m_eventName.c_str(), TranslationItemType::Node, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusHandler" << busName << "methods" << eventName << "details";
|
||||
|
||||
if (displayEventName.empty())
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
details.m_name = m_eventName;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
if (details.m_name.empty())
|
||||
{
|
||||
SetName(m_eventName.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
SetName(displayEventName.c_str());
|
||||
details.m_name = m_eventName;
|
||||
}
|
||||
|
||||
AZStd::string displayEventTooltip = TranslationHelper::GetKeyTranslation(TranslationContextGroup::EbusHandler, m_busName.c_str(), m_eventName.c_str(), TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
|
||||
if (!displayEventTooltip.empty())
|
||||
{
|
||||
SetToolTip(displayEventTooltip.c_str());
|
||||
}
|
||||
SetName(details.m_name.c_str());
|
||||
SetToolTip(details.m_tooltip.c_str());
|
||||
|
||||
SetTitlePalette("HandlerNodeTitlePalette");
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "CreateNodeMimeEvent.h"
|
||||
|
||||
#include <ScriptCanvas/GraphCanvas/NodeDescriptorBus.h>
|
||||
#include "TranslationGeneration.h"
|
||||
|
||||
namespace ScriptCanvasEditor
|
||||
{
|
||||
@@ -62,6 +63,24 @@ namespace ScriptCanvasEditor
|
||||
|
||||
ScriptCanvas::PropertyStatus GetPropertyStatus() const;
|
||||
|
||||
AZ::IO::Path GetTranslationDataPath() const override
|
||||
{
|
||||
return AZ::IO::Path("EBus\\Senders") / GetBusName();
|
||||
}
|
||||
|
||||
void GenerateTranslationData() override
|
||||
{
|
||||
AZ::BehaviorContext* behaviorContext{};
|
||||
AZ::ComponentApplicationBus::BroadcastResult(behaviorContext, &AZ::ComponentApplicationRequests::GetBehaviorContext);
|
||||
|
||||
const char* ebusName = m_busName.toUtf8().data();
|
||||
auto behaviorEbus = behaviorContext->m_ebuses.find(ebusName);
|
||||
|
||||
ScriptCanvasEditorTools::TranslationGeneration translation;
|
||||
translation.TranslateEBus(behaviorEbus->second);
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
bool m_isOverload;
|
||||
QString m_busName;
|
||||
@@ -154,6 +173,22 @@ namespace ScriptCanvasEditor
|
||||
ScriptCanvas::EBusBusId GetBusId() const;
|
||||
ScriptCanvas::EBusEventId GetEventId() const;
|
||||
|
||||
AZ::IO::Path GetTranslationDataPath() const override
|
||||
{
|
||||
return AZ::IO::Path("EBus\\Handlers") / GetBusName();
|
||||
}
|
||||
|
||||
void GenerateTranslationData() override
|
||||
{
|
||||
AZ::BehaviorContext* behaviorContext{};
|
||||
AZ::ComponentApplicationBus::BroadcastResult(behaviorContext, &AZ::ComponentApplicationRequests::GetBehaviorContext);
|
||||
|
||||
auto behaviorEbus = behaviorContext->m_ebuses.find(m_busName.c_str());
|
||||
|
||||
ScriptCanvasEditorTools::TranslationGeneration translation;
|
||||
translation.TranslateEBus(behaviorEbus->second);
|
||||
}
|
||||
|
||||
private:
|
||||
AZStd::string m_busName;
|
||||
AZStd::string m_eventName;
|
||||
|
||||
+43
-26
@@ -82,32 +82,26 @@ namespace ScriptCanvasEditor
|
||||
, m_isOverload(isOverload)
|
||||
, m_propertyStatus(propertyStatus)
|
||||
{
|
||||
AZStd::string displayMethodName = TranslationHelper::GetKeyTranslation(TranslationContextGroup::ClassMethod, m_className.toUtf8().data(), m_methodName.toUtf8().data(), TranslationItemType::Node, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationKey key;
|
||||
|
||||
if (displayMethodName.empty())
|
||||
{
|
||||
SetName(m_methodName);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetName(displayMethodName.c_str());
|
||||
}
|
||||
|
||||
if (propertyStatus == ScriptCanvas::PropertyStatus::Getter)
|
||||
AZStd::string updatedMethodName;
|
||||
if (propertyStatus != ScriptCanvas::PropertyStatus::None)
|
||||
{
|
||||
SetName(AZStd::string::format("Get %s", GetName().toUtf8().data()).data());
|
||||
}
|
||||
else if (propertyStatus == ScriptCanvas::PropertyStatus::Setter)
|
||||
{
|
||||
SetName(AZStd::string::format("Set %s", GetName().toUtf8().data()).data());
|
||||
updatedMethodName = (propertyStatus == ScriptCanvas::PropertyStatus::Getter) ? "Get" : "Set";
|
||||
}
|
||||
updatedMethodName.append(methodName);
|
||||
|
||||
AZStd::string displayEventTooltip = TranslationHelper::GetKeyTranslation(TranslationContextGroup::ClassMethod, m_className.toUtf8().data(), m_methodName.toUtf8().data(), TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
key << "BehaviorClass" << className << "methods" << updatedMethodName << "details";
|
||||
|
||||
if (!displayEventTooltip.empty())
|
||||
{
|
||||
SetToolTip(displayEventTooltip.c_str());
|
||||
}
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
details.m_name = methodName;
|
||||
details.m_subtitle = className;
|
||||
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
SetName(details.m_name.c_str());
|
||||
SetToolTip(details.m_tooltip.c_str());
|
||||
|
||||
SetTitlePalette("MethodNodeTitlePalette");
|
||||
}
|
||||
@@ -166,13 +160,14 @@ namespace ScriptCanvasEditor
|
||||
: DraggableNodePaletteTreeItem(nodeModelInformation.m_methodName, ScriptCanvasEditor::AssetEditorId)
|
||||
, m_methodName{ nodeModelInformation.m_methodName }
|
||||
{
|
||||
SetToolTip(QString::fromUtf8(nodeModelInformation.m_displayName.data(),
|
||||
aznumeric_cast<int>(nodeModelInformation.m_displayName.size())));
|
||||
|
||||
SetToolTip(QString::fromUtf8(nodeModelInformation.m_toolTip.data(),
|
||||
aznumeric_cast<int>(nodeModelInformation.m_toolTip.size())));
|
||||
|
||||
SetTitlePalette("MethodNodeTitlePalette");
|
||||
if (!nodeModelInformation.m_displayName.empty())
|
||||
{
|
||||
SetName(nodeModelInformation.m_displayName.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
GraphCanvas::GraphCanvasMimeEvent* GlobalMethodEventPaletteTreeItem::CreateMimeEvent() const
|
||||
@@ -186,6 +181,27 @@ namespace ScriptCanvasEditor
|
||||
return m_methodName;
|
||||
}
|
||||
|
||||
AZ::IO::Path GlobalMethodEventPaletteTreeItem::GetTranslationDataPath() const
|
||||
{
|
||||
AZStd::string propertyName = m_methodName;
|
||||
AZ::StringFunc::Replace(propertyName, "::Getter", "");
|
||||
AZ::StringFunc::Replace(propertyName, "::Setter", "");
|
||||
|
||||
AZStd::string filename = GraphCanvas::TranslationKey::Sanitize(propertyName);
|
||||
|
||||
return AZ::IO::Path("Properties") / filename;
|
||||
}
|
||||
|
||||
void GlobalMethodEventPaletteTreeItem::GenerateTranslationData()
|
||||
{
|
||||
AZStd::string propertyName = m_methodName;
|
||||
AZ::StringFunc::Replace(propertyName, "::Getter", "");
|
||||
AZ::StringFunc::Replace(propertyName, "::Setter", "");
|
||||
|
||||
ScriptCanvasEditorTools::TranslationGeneration translation;
|
||||
translation.TranslateBehaviorProperty(propertyName);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
// CreateCustomNodeMimeEvent
|
||||
//////////////////////////////
|
||||
@@ -230,9 +246,10 @@ namespace ScriptCanvasEditor
|
||||
// CustomNodePaletteTreeItem
|
||||
//////////////////////////////
|
||||
|
||||
CustomNodePaletteTreeItem::CustomNodePaletteTreeItem(const AZ::Uuid& typeId, AZStd::string_view nodeName)
|
||||
: DraggableNodePaletteTreeItem(nodeName, ScriptCanvasEditor::AssetEditorId)
|
||||
, m_typeId(typeId)
|
||||
CustomNodePaletteTreeItem::CustomNodePaletteTreeItem(const ScriptCanvasEditor::CustomNodeModelInformation& info)
|
||||
: DraggableNodePaletteTreeItem(info.m_displayName, ScriptCanvasEditor::AssetEditorId)
|
||||
, m_info(info)
|
||||
, m_typeId(info.m_typeId)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
+44
-1
@@ -10,6 +10,9 @@
|
||||
#include <GraphCanvas/Widgets/NodePalette/TreeItems/DraggableNodePaletteTreeItem.h>
|
||||
|
||||
#include "CreateNodeMimeEvent.h"
|
||||
#include "NodePaletteModel.h"
|
||||
#include <Source/Translation/TranslationBus.h>
|
||||
#include "TranslationGeneration.h"
|
||||
|
||||
namespace ScriptCanvasEditor
|
||||
{
|
||||
@@ -56,6 +59,26 @@ namespace ScriptCanvasEditor
|
||||
bool IsOverload() const;
|
||||
ScriptCanvas::PropertyStatus GetPropertyStatus() const;
|
||||
|
||||
AZ::IO::Path GetTranslationDataPath() const override
|
||||
{
|
||||
return AZ::IO::Path("Classes") / GetClassMethodName();
|
||||
}
|
||||
|
||||
void GenerateTranslationData() override
|
||||
{
|
||||
AZ::BehaviorContext* behaviorContext{};
|
||||
AZ::ComponentApplicationBus::BroadcastResult(behaviorContext, &AZ::ComponentApplicationRequests::GetBehaviorContext);
|
||||
|
||||
const char* className = m_className.toUtf8().data();
|
||||
if (behaviorContext->m_classes.contains(className))
|
||||
{
|
||||
auto behaviorClass = behaviorContext->m_classes.find(className);
|
||||
|
||||
ScriptCanvasEditorTools::TranslationGeneration translation;
|
||||
translation.TranslateBehaviorClass(behaviorClass->second);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
bool m_isOverload = false;
|
||||
QString m_className;
|
||||
@@ -101,6 +124,10 @@ namespace ScriptCanvasEditor
|
||||
|
||||
const AZStd::string& GetMethodName() const;
|
||||
|
||||
AZ::IO::Path GetTranslationDataPath() const override;
|
||||
void GenerateTranslationData() override;
|
||||
|
||||
|
||||
private:
|
||||
AZStd::string m_methodName;
|
||||
};
|
||||
@@ -137,15 +164,31 @@ namespace ScriptCanvasEditor
|
||||
AZ_CLASS_ALLOCATOR(CustomNodePaletteTreeItem, AZ::SystemAllocator, 0);
|
||||
AZ_RTTI(CustomNodePaletteTreeItem, "{50E75C4D-F59C-4AF6-A6A3-5BAD557E335C}", GraphCanvas::DraggableNodePaletteTreeItem);
|
||||
|
||||
CustomNodePaletteTreeItem(const AZ::Uuid& typeId, AZStd::string_view nodeName);
|
||||
explicit CustomNodePaletteTreeItem(const ScriptCanvasEditor::CustomNodeModelInformation&);
|
||||
~CustomNodePaletteTreeItem() = default;
|
||||
|
||||
GraphCanvas::GraphCanvasMimeEvent* CreateMimeEvent() const override;
|
||||
|
||||
AZ::Uuid GetTypeId() const;
|
||||
const ScriptCanvasEditor::CustomNodeModelInformation& GetInfo() const { return m_info; }
|
||||
|
||||
AZ::IO::Path GetTranslationDataPath() const override
|
||||
{
|
||||
AZStd::string filename = AZStd::string::format("%s_%s", GetInfo().m_categoryPath.c_str(), GetName().toUtf8().data());
|
||||
filename = GraphCanvas::TranslationKey::Sanitize(filename);
|
||||
|
||||
return AZ::IO::Path("Nodes") / filename;
|
||||
}
|
||||
|
||||
void GenerateTranslationData() override
|
||||
{
|
||||
ScriptCanvasEditorTools::TranslationGeneration translation;
|
||||
translation.TranslateNode(m_typeId);
|
||||
}
|
||||
|
||||
private:
|
||||
AZ::Uuid m_typeId;
|
||||
ScriptCanvasEditor::CustomNodeModelInformation m_info;
|
||||
};
|
||||
|
||||
// </CustomNode>
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
|
||||
#include <ScriptCanvas/Data/Traits.h>
|
||||
|
||||
AZ_DEFINE_BUDGET(NodePaletteModel);
|
||||
|
||||
namespace
|
||||
{
|
||||
// Various Helper Methods
|
||||
@@ -82,11 +84,6 @@ namespace
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MethodHasAttribute(const AZ::BehaviorMethod* method, AZ::Crc32 attribute)
|
||||
{
|
||||
return AZ::FindAttribute(attribute, method->m_attributes) != nullptr; // warning C4800: 'AZ::Attribute *': forcing value to bool 'true' or 'false' (performance warning)
|
||||
}
|
||||
|
||||
// Checks for and returns the Category attribute from an AZ::AttributeArray
|
||||
AZStd::string GetCategoryPath(const AZ::AttributeArray& attributes, const AZ::BehaviorContext& behaviorContext)
|
||||
{
|
||||
@@ -116,6 +113,9 @@ namespace
|
||||
, ScriptCanvas::PropertyStatus propertyStatus
|
||||
, bool isOverloaded)
|
||||
{
|
||||
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "RegisterMethod");
|
||||
|
||||
if (IsDeprecated(method.m_attributes))
|
||||
{
|
||||
return;
|
||||
@@ -150,6 +150,9 @@ namespace
|
||||
void RegisterGlobalMethod(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel, const AZ::BehaviorContext& behaviorContext,
|
||||
const AZ::BehaviorMethod& behaviorMethod)
|
||||
{
|
||||
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "RegisterGlobalMethod");
|
||||
|
||||
const auto isExposableOutcome = ScriptCanvas::IsExposable(behaviorMethod);
|
||||
if (!isExposableOutcome.IsSuccess())
|
||||
{
|
||||
@@ -176,6 +179,8 @@ namespace
|
||||
//! Retrieve the list of EBuses t hat should not be exposed in the ScriptCanvasEditor Node Palette
|
||||
AZStd::unordered_set<AZ::Crc32> GetEBusExcludeSet(const AZ::BehaviorContext& behaviorContext)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "GetEBusExcludeSet");
|
||||
|
||||
// We will skip buses that are ONLY registered on classes that derive from EditorComponentBase,
|
||||
// because they don't have a runtime implementation. Buses such as the TransformComponent which
|
||||
// is implemented by both an EditorComponentBase derived class and a Component derived class
|
||||
@@ -252,6 +257,8 @@ namespace
|
||||
void PopulateScriptCanvasDerivedNodes(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel,
|
||||
const AZ::SerializeContext& serializeContext)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateScriptCanvasDerivedNodes");
|
||||
|
||||
// Get all the types.
|
||||
auto EnumerateLibraryDefintionNodes = [&nodePaletteModel, &serializeContext](
|
||||
const AZ::SerializeContext::ClassData* classData, const AZ::Uuid&) -> bool
|
||||
@@ -333,6 +340,8 @@ namespace
|
||||
|
||||
void PopulateVariablePalette()
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateVariablePalette");
|
||||
|
||||
auto dataRegistry = ScriptCanvas::GetDataRegistry();
|
||||
|
||||
for (auto& type : dataRegistry->m_creatableTypes)
|
||||
@@ -347,6 +356,8 @@ namespace
|
||||
void PopulateBehaviorContextGlobalMethods(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel,
|
||||
const AZ::BehaviorContext& behaviorContext)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateBehaviorContextGlobalMethods");
|
||||
|
||||
// BehaviorMethods are not associated with a class
|
||||
// therefore the Uuid is set to Null
|
||||
const AZ::Uuid behaviorMethodUuid = AZ::Uuid::CreateNull();
|
||||
@@ -377,6 +388,8 @@ namespace
|
||||
void PopulateBehaviorContextGlobalProperties(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel,
|
||||
const AZ::BehaviorContext& behaviorContext)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateBehaviorContextGlobalProperties");
|
||||
|
||||
const AZ::Uuid behaviorMethodUuid = AZ::Uuid::CreateNull();
|
||||
for (const auto& [propertyName, behaviorProperty] : behaviorContext.m_properties)
|
||||
{
|
||||
@@ -398,7 +411,7 @@ namespace
|
||||
|
||||
if (behaviorProperty->m_getter && !behaviorProperty->m_setter)
|
||||
{
|
||||
nodePaletteModel.RegisterGlobalConstant(behaviorContext, *behaviorProperty->m_getter);
|
||||
nodePaletteModel.RegisterGlobalConstant(behaviorContext, behaviorProperty , *behaviorProperty->m_getter);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -419,6 +432,8 @@ namespace
|
||||
void PopulateBehaviorContextClassMethods(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel,
|
||||
const AZ::BehaviorContext& behaviorContext)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateBehaviorContextClassMethods");
|
||||
|
||||
AZ::SerializeContext* serializeContext{};
|
||||
AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext);
|
||||
|
||||
@@ -456,21 +471,17 @@ namespace
|
||||
{
|
||||
AZStd::string categoryPath;
|
||||
|
||||
AZStd::string translationContext = ScriptCanvasEditor::TranslationHelper::GetContextName(ScriptCanvasEditor::TranslationContextGroup::ClassMethod, behaviorClass->m_name);
|
||||
AZStd::string translationKey = ScriptCanvasEditor::TranslationHelper::GetClassKey(ScriptCanvasEditor::TranslationContextGroup::ClassMethod, behaviorClass->m_name, ScriptCanvasEditor::TranslationKeyId::Category);
|
||||
AZStd::string translatedCategory = QCoreApplication::translate(translationContext.c_str(), translationKey.c_str()).toUtf8().data();
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "BehaviorClass" << behaviorClass->m_name.c_str() << "details";
|
||||
|
||||
if (translatedCategory != translationKey)
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
categoryPath = details.m_category;
|
||||
|
||||
if (categoryPath.empty())
|
||||
{
|
||||
categoryPath = translatedCategory;
|
||||
}
|
||||
else
|
||||
{
|
||||
AZStd::string behaviorContextCategory = GetCategoryPath(behaviorClass->m_attributes, behaviorContext);
|
||||
if (!behaviorContextCategory.empty())
|
||||
{
|
||||
categoryPath = behaviorContextCategory;
|
||||
}
|
||||
categoryPath = GetCategoryPath(behaviorClass->m_attributes, behaviorContext);
|
||||
}
|
||||
|
||||
auto dataRegistry = ScriptCanvas::GetDataRegistry();
|
||||
@@ -507,15 +518,13 @@ namespace
|
||||
|
||||
categoryPath.append("/");
|
||||
|
||||
AZStd::string displayName = ScriptCanvasEditor::TranslationHelper::GetClassKeyTranslation(ScriptCanvasEditor::TranslationContextGroup::ClassMethod, classIter.first, ScriptCanvasEditor::TranslationKeyId::Name);
|
||||
|
||||
if (displayName.empty())
|
||||
if (details.m_name.empty())
|
||||
{
|
||||
categoryPath.append(classNamePretty.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
categoryPath.append(displayName.c_str());
|
||||
categoryPath.append(details.m_name.c_str());
|
||||
}
|
||||
|
||||
for (auto property : behaviorClass->m_properties)
|
||||
@@ -552,6 +561,9 @@ namespace
|
||||
void PopulateBehaviorContextOverloadedMethods(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel,
|
||||
const AZ::BehaviorContext& behaviorContext)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateBehaviorContextOverloadedMethods");
|
||||
|
||||
|
||||
for (const AZ::ExplicitOverloadInfo& explicitOverload : behaviorContext.m_explicitOverloads)
|
||||
{
|
||||
RegisterMethod(nodePaletteModel, behaviorContext, explicitOverload.m_categoryPath, nullptr, explicitOverload.m_name, *explicitOverload.m_overloads.begin()->first, ScriptCanvas::PropertyStatus::None, true);
|
||||
@@ -561,6 +573,8 @@ namespace
|
||||
void PopulateBehaviorContextEBusHandler(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel,
|
||||
const AZ::BehaviorContext& behaviorContext, const AZ::BehaviorEBus& behaviorEbus)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateBehaviorContextEBusHandler");
|
||||
|
||||
if (AZ::ScopedBehaviorEBusHandler handler{ behaviorEbus }; handler)
|
||||
{
|
||||
auto excludeEbusAttributeData = azdynamic_cast<const AZ::Edit::AttributeData<AZ::Script::Attributes::ExcludeFlags>*>(
|
||||
@@ -573,32 +587,17 @@ namespace
|
||||
const AZ::BehaviorEBusHandler::EventArray& events(handler->GetEvents());
|
||||
if (!events.empty())
|
||||
{
|
||||
AZStd::string translationContext = ScriptCanvasEditor::TranslationHelper::GetContextName(ScriptCanvasEditor::TranslationContextGroup::EbusHandler, behaviorEbus.m_name);
|
||||
AZStd::string categoryPath;
|
||||
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusHandler" << behaviorEbus.m_name.c_str() << "details";
|
||||
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
AZStd::string categoryPath = details.m_category.empty() ? GetCategoryPath(behaviorEbus.m_attributes, behaviorContext) : details.m_category;
|
||||
|
||||
// Treat the EBusHandler name as a Category key in order to allow multiple buses to be merged into a single Category.
|
||||
{
|
||||
AZStd::string translationKey = ScriptCanvasEditor::TranslationHelper::GetClassKey(ScriptCanvasEditor::TranslationContextGroup::EbusHandler, behaviorEbus.m_name, ScriptCanvasEditor::TranslationKeyId::Category);
|
||||
AZStd::string translatedCategory = QCoreApplication::translate(translationContext.c_str(), translationKey.c_str()).toUtf8().data();
|
||||
|
||||
if (translatedCategory != translationKey)
|
||||
{
|
||||
categoryPath = translatedCategory;
|
||||
}
|
||||
else
|
||||
{
|
||||
AZStd::string behaviourContextCategory = GetCategoryPath(behaviorEbus.m_attributes, behaviorContext);
|
||||
if (!behaviourContextCategory.empty())
|
||||
{
|
||||
categoryPath = behaviourContextCategory;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Treat the EBusHandler name as a Category key in order to allow multiple busses to be merged into a single Category.
|
||||
{
|
||||
AZStd::string translationKey = ScriptCanvasEditor::TranslationHelper::GetClassKey(ScriptCanvasEditor::TranslationContextGroup::EbusHandler, behaviorEbus.m_name, ScriptCanvasEditor::TranslationKeyId::Name);
|
||||
AZStd::string translatedName = QCoreApplication::translate(translationContext.c_str(), translationKey.c_str()).toUtf8().data();
|
||||
|
||||
if (!categoryPath.empty())
|
||||
{
|
||||
categoryPath.append("/");
|
||||
@@ -608,12 +607,13 @@ namespace
|
||||
categoryPath = "Other/";
|
||||
}
|
||||
|
||||
if (translatedName != translationKey)
|
||||
if (!details.m_name.empty())
|
||||
{
|
||||
categoryPath.append(translatedName.c_str());
|
||||
categoryPath.append(details.m_name.c_str());
|
||||
}
|
||||
else
|
||||
else if (categoryPath.contains("Other"))
|
||||
{
|
||||
// Use the BehaviorEBus name to categorize within the 'Other' category
|
||||
categoryPath.append(behaviorEbus.m_name.c_str());
|
||||
}
|
||||
}
|
||||
@@ -629,31 +629,22 @@ namespace
|
||||
void PopulateBehaviorContextEBusEventMethods(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel,
|
||||
const AZ::BehaviorContext& behaviorContext, const AZ::BehaviorEBus& behaviorEbus)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateBehaviorContextEBusEventMethods");
|
||||
|
||||
if (!behaviorEbus.m_events.empty())
|
||||
{
|
||||
AZStd::string categoryPath;
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusSender" << behaviorEbus.m_name.c_str() << "details";
|
||||
|
||||
AZStd::string translationContext = ScriptCanvasEditor::TranslationHelper::GetContextName(ScriptCanvasEditor::TranslationContextGroup::EbusSender, behaviorEbus.m_name);
|
||||
AZStd::string translationKey = ScriptCanvasEditor::TranslationHelper::GetClassKey(ScriptCanvasEditor::TranslationContextGroup::EbusSender, behaviorEbus.m_name, ScriptCanvasEditor::TranslationKeyId::Category);
|
||||
AZStd::string translatedCategory = QCoreApplication::translate(translationContext.c_str(), translationKey.c_str()).toUtf8().data();
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
if (translatedCategory != translationKey)
|
||||
{
|
||||
categoryPath = translatedCategory;
|
||||
}
|
||||
else
|
||||
{
|
||||
AZStd::string behaviourContextCategory = GetCategoryPath(behaviorEbus.m_attributes, behaviorContext);
|
||||
if (!behaviourContextCategory.empty())
|
||||
{
|
||||
categoryPath = behaviourContextCategory;
|
||||
}
|
||||
}
|
||||
AZStd::string categoryPath = details.m_category.empty() ? GetCategoryPath(behaviorEbus.m_attributes, behaviorContext) : details.m_category;
|
||||
|
||||
// Parent
|
||||
AZStd::string displayName = ScriptCanvasEditor::TranslationHelper::GetClassKeyTranslation(ScriptCanvasEditor::TranslationContextGroup::EbusSender, behaviorEbus.m_name, ScriptCanvasEditor::TranslationKeyId::Name);
|
||||
AZStd::string displayName = details.m_name;
|
||||
|
||||
// Treat the EBus name as a Category key in order to allow multiple busses to be merged into a single Category.
|
||||
// Treat the EBus name as a Category key in order to allow multiple buses to be merged into a single Category.
|
||||
if (!categoryPath.empty())
|
||||
{
|
||||
categoryPath.append("/");
|
||||
@@ -663,18 +654,19 @@ namespace
|
||||
categoryPath = "Other/";
|
||||
}
|
||||
|
||||
if (displayName.empty())
|
||||
if (!details.m_name.empty())
|
||||
{
|
||||
categoryPath.append(behaviorEbus.m_name.c_str());
|
||||
categoryPath.append(details.m_name.c_str());
|
||||
}
|
||||
else
|
||||
else if (categoryPath.contains("Other"))
|
||||
{
|
||||
categoryPath.append(displayName.c_str());
|
||||
// Use the behavior EBus name to categorize within the 'Other' category
|
||||
categoryPath.append(behaviorEbus.m_name.c_str());
|
||||
}
|
||||
|
||||
ScriptCanvasEditor::CategoryInformation ebusCategoryInformation;
|
||||
|
||||
ebusCategoryInformation.m_tooltip = ScriptCanvasEditor::TranslationHelper::GetClassKeyTranslation(ScriptCanvasEditor::TranslationContextGroup::EbusSender, behaviorEbus.m_name, ScriptCanvasEditor::TranslationKeyId::Tooltip);
|
||||
ebusCategoryInformation.m_tooltip = details.m_tooltip;
|
||||
|
||||
nodePaletteModel.RegisterCategoryInformation(categoryPath, ebusCategoryInformation);
|
||||
|
||||
@@ -700,6 +692,7 @@ namespace
|
||||
void PopulateBehaviorContextEBuses(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel,
|
||||
const AZ::BehaviorContext& behaviorContext)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateBehaviorContextEBuses");
|
||||
AZStd::unordered_set<AZ::Crc32> skipBuses = GetEBusExcludeSet(behaviorContext);
|
||||
|
||||
for (const auto& [ebusName, behaviorEbus] : behaviorContext.m_ebuses)
|
||||
@@ -758,10 +751,13 @@ namespace
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Helper function for populating the node palette model.
|
||||
// Pulled out just to make the tabbing a bit nicer, since it's a huge method.
|
||||
void PopulateNodePaletteModel(ScriptCanvasEditor::NodePaletteModel& nodePaletteModel)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "PopulateNodePaletteModel");
|
||||
|
||||
AZ::SerializeContext* serializeContext = nullptr;
|
||||
AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext);
|
||||
|
||||
@@ -791,8 +787,10 @@ namespace
|
||||
|
||||
// Populates the NodePalette with EBus Event method nodes and EBus Event handler nodes
|
||||
PopulateBehaviorContextEBuses(nodePaletteModel, *behaviorContext);
|
||||
|
||||
// Populates the NodePalette with Methods reflected directly on the BehaviorContext
|
||||
PopulateBehaviorContextGlobalMethods(nodePaletteModel, *behaviorContext);
|
||||
|
||||
// Populates the NodePalette with Properties reflected directly on the BehaviorContext
|
||||
PopulateBehaviorContextGlobalProperties(nodePaletteModel, *behaviorContext);
|
||||
}
|
||||
@@ -896,6 +894,8 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void NodePaletteModel::RegisterCustomNode(AZStd::string_view categoryPath, const AZ::Uuid& uuid, AZStd::string_view name, const AZ::SerializeContext::ClassData* classData)
|
||||
{
|
||||
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "NodePaletteModel::RegisterCustomNode");
|
||||
ScriptCanvas::NodeTypeIdentifier nodeIdentifier = ScriptCanvas::NodeUtils::ConstructCustomNodeIdentifier(uuid);
|
||||
|
||||
auto mapIter = m_registeredNodes.find(nodeIdentifier);
|
||||
@@ -906,47 +906,38 @@ namespace ScriptCanvasEditor
|
||||
|
||||
customNodeInformation->m_nodeIdentifier = nodeIdentifier;
|
||||
customNodeInformation->m_typeId = uuid;
|
||||
|
||||
customNodeInformation->m_displayName = name;
|
||||
customNodeInformation->m_categoryPath = categoryPath;
|
||||
|
||||
bool isDeprecated(false);
|
||||
|
||||
if (classData && classData->m_editData && classData->m_editData->m_name)
|
||||
{
|
||||
auto nodeContextName = ScriptCanvasEditor::Nodes::GetContextName(*classData);
|
||||
auto contextName = ScriptCanvasEditor::TranslationHelper::GetContextName(ScriptCanvasEditor::TranslationContextGroup::ClassMethod, nodeContextName);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "ScriptCanvas::Node" << classData->m_typeId.ToString<AZStd::string>().c_str() << "details";
|
||||
|
||||
GraphCanvas::TranslationKeyedString nodeKeyedString({}, contextName);
|
||||
nodeKeyedString.m_key = ScriptCanvasEditor::TranslationHelper::GetKey(ScriptCanvasEditor::TranslationContextGroup::ClassMethod, nodeContextName, classData->m_editData->m_name, ScriptCanvasEditor::TranslationItemType::Node, ScriptCanvasEditor::TranslationKeyId::Name);
|
||||
customNodeInformation->m_displayName = nodeKeyedString.GetDisplayString();
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
GraphCanvas::TranslationKeyedString tooltipKeyedString(AZStd::string(), nodeKeyedString.m_context);
|
||||
tooltipKeyedString.m_key = ScriptCanvasEditor::TranslationHelper::GetKey(ScriptCanvasEditor::TranslationContextGroup::ClassMethod, nodeContextName, classData->m_editData->m_name, ScriptCanvasEditor::TranslationItemType::Node, ScriptCanvasEditor::TranslationKeyId::Tooltip);
|
||||
if (details.m_name.empty())
|
||||
{
|
||||
details.m_name = classData->m_editData->m_name;
|
||||
details.m_tooltip = classData->m_editData->m_description;
|
||||
}
|
||||
|
||||
customNodeInformation->m_toolTip = tooltipKeyedString.GetDisplayString();
|
||||
customNodeInformation->m_displayName = details.m_name;
|
||||
customNodeInformation->m_toolTip = details.m_tooltip;
|
||||
|
||||
if (!details.m_category.empty())
|
||||
{
|
||||
customNodeInformation->m_categoryPath = details.m_category;
|
||||
}
|
||||
|
||||
if (customNodeInformation->m_displayName.empty())
|
||||
{
|
||||
customNodeInformation->m_displayName = classData->m_editData->m_name;
|
||||
}
|
||||
|
||||
GraphCanvas::TranslationKeyedString categoryKeyedString(ScriptCanvasEditor::Nodes::GetCategoryName(*classData), nodeKeyedString.m_context);
|
||||
categoryKeyedString.m_key = ScriptCanvasEditor::TranslationHelper::GetKey(ScriptCanvasEditor::TranslationContextGroup::ClassMethod, nodeContextName, classData->m_editData->m_name, ScriptCanvasEditor::TranslationItemType::Node, ScriptCanvasEditor::TranslationKeyId::Category);
|
||||
|
||||
customNodeInformation->m_categoryPath = categoryKeyedString.GetDisplayString();
|
||||
|
||||
if (customNodeInformation->m_categoryPath.empty())
|
||||
{
|
||||
if (contextName.empty())
|
||||
{
|
||||
customNodeInformation->m_categoryPath = categoryPath;
|
||||
}
|
||||
else
|
||||
{
|
||||
customNodeInformation->m_categoryPath = contextName;
|
||||
}
|
||||
}
|
||||
|
||||
auto editorDataElement = classData->m_editData->FindElementData(AZ::Edit::ClassElements::EditorData);
|
||||
|
||||
if (editorDataElement)
|
||||
@@ -1004,11 +995,13 @@ namespace ScriptCanvasEditor
|
||||
( const AZStd::string& categoryPath
|
||||
, const AZStd::string& methodClass
|
||||
, const AZStd::string& methodName
|
||||
, const AZ::BehaviorMethod* behaviorMethod
|
||||
, const AZ::BehaviorContext* behaviorContext
|
||||
, const AZ::BehaviorMethod*
|
||||
, const AZ::BehaviorContext*
|
||||
, ScriptCanvas::PropertyStatus propertyStatus
|
||||
, bool isOverload)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "NodePaletteModel::RegisterClassNode");
|
||||
|
||||
ScriptCanvas::NodeTypeIdentifier nodeIdentifier = isOverload ? ScriptCanvas::NodeUtils::ConstructMethodOverloadedNodeIdentifier(methodName) : ScriptCanvas::NodeUtils::ConstructMethodNodeIdentifier(methodClass, methodName, propertyStatus);
|
||||
|
||||
auto registerIter = m_registeredNodes.find(nodeIdentifier);
|
||||
@@ -1023,44 +1016,43 @@ namespace ScriptCanvasEditor
|
||||
methodModelInformation->m_propertyStatus = propertyStatus;
|
||||
methodModelInformation->m_titlePaletteOverride = "MethodNodeTitlePalette";
|
||||
|
||||
methodModelInformation->m_displayName = TranslationHelper::GetKeyTranslation(TranslationContextGroup::ClassMethod, methodClass.c_str(), methodName.c_str(), TranslationItemType::Node, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationKey catkey;
|
||||
catkey << "BehaviorClass" << methodClass.c_str() << "details";
|
||||
GraphCanvas::TranslationRequests::Details catdetails;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(catdetails, &GraphCanvas::TranslationRequests::GetDetails, catkey, catdetails);
|
||||
|
||||
if (methodModelInformation->m_displayName.empty())
|
||||
GraphCanvas::TranslationKey key;
|
||||
|
||||
AZStd::string context;
|
||||
AZStd::string updatedMethodName;
|
||||
if (propertyStatus != ScriptCanvas::PropertyStatus::None)
|
||||
{
|
||||
methodModelInformation->m_displayName = methodName;
|
||||
updatedMethodName = (propertyStatus == ScriptCanvas::PropertyStatus::Getter) ? "Get" : "Set";
|
||||
context = (propertyStatus == ScriptCanvas::PropertyStatus::Getter) ? "Getter" : "Setter";
|
||||
}
|
||||
updatedMethodName += methodName;
|
||||
key << "BehaviorClass" << context << methodClass << "methods" << updatedMethodName << "details";
|
||||
|
||||
methodModelInformation->m_toolTip = TranslationHelper::GetKeyTranslation(TranslationContextGroup::ClassMethod, methodClass.c_str(), methodName.c_str(), TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
GraphCanvas::TranslationKeyedString methodCategoryString;
|
||||
methodCategoryString.m_context = ScriptCanvasEditor::TranslationHelper::GetContextName(ScriptCanvasEditor::TranslationContextGroup::ClassMethod, methodClass.c_str());
|
||||
methodCategoryString.m_key = ScriptCanvasEditor::TranslationHelper::GetKey(ScriptCanvasEditor::TranslationContextGroup::ClassMethod, methodClass.c_str(), methodName.c_str(), ScriptCanvasEditor::TranslationItemType::Node, ScriptCanvasEditor::TranslationKeyId::Category);
|
||||
|
||||
methodModelInformation->m_categoryPath = methodCategoryString.GetDisplayString();
|
||||
methodModelInformation->m_displayName = details.m_name.empty() ? updatedMethodName : details.m_name;
|
||||
methodModelInformation->m_toolTip = details.m_tooltip;
|
||||
methodModelInformation->m_categoryPath = categoryPath;
|
||||
|
||||
if (methodModelInformation->m_categoryPath.empty())
|
||||
{
|
||||
if (!MethodHasAttribute(behaviorMethod, AZ::ScriptCanvasAttributes::FloatingFunction))
|
||||
{
|
||||
methodModelInformation->m_categoryPath = categoryPath;
|
||||
}
|
||||
else if (MethodHasAttribute(behaviorMethod, AZ::Script::Attributes::Category))
|
||||
{
|
||||
methodModelInformation->m_categoryPath = GetCategoryPath(behaviorMethod->m_attributes, (*behaviorContext));
|
||||
}
|
||||
|
||||
if (methodModelInformation->m_categoryPath.empty())
|
||||
{
|
||||
methodModelInformation->m_categoryPath = "Other";
|
||||
}
|
||||
methodModelInformation->m_categoryPath = "Other";
|
||||
}
|
||||
|
||||
m_registeredNodes.emplace(AZStd::make_pair(nodeIdentifier, methodModelInformation));
|
||||
}
|
||||
}
|
||||
|
||||
void NodePaletteModel::RegisterGlobalConstant(const AZ::BehaviorContext& behaviorContext, const AZ::BehaviorMethod& behaviorMethod)
|
||||
void NodePaletteModel::RegisterGlobalConstant(const AZ::BehaviorContext&, const AZ::BehaviorProperty* behaviorProperty, const AZ::BehaviorMethod& behaviorMethod)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "NodePaletteModel::RegisterGlobalConstant");
|
||||
|
||||
// Construct Node Identifier using the BehaviorMethod name and the ScriptCanvas Method typeid
|
||||
ScriptCanvas::NodeTypeIdentifier nodeIdentifier =
|
||||
ScriptCanvas::NodeUtils::ConstructGlobalMethodNodeIdentifier(behaviorMethod.m_name);
|
||||
@@ -1069,40 +1061,39 @@ namespace ScriptCanvasEditor
|
||||
if (auto registerIter = m_registeredNodes.find(nodeIdentifier); registerIter == m_registeredNodes.end())
|
||||
{
|
||||
auto methodModelInformation = AZStd::make_unique<GlobalMethodNodeModelInformation>();
|
||||
methodModelInformation->m_methodName = behaviorMethod.m_name;
|
||||
methodModelInformation->m_nodeIdentifier = nodeIdentifier;
|
||||
methodModelInformation->m_methodName = behaviorMethod.m_name;
|
||||
|
||||
methodModelInformation->m_titlePaletteOverride = "MethodNodeTitlePalette";
|
||||
|
||||
methodModelInformation->m_displayName = TranslationHelper::GetGlobalMethodKeyTranslation(methodModelInformation->m_methodName,
|
||||
TranslationItemType::Node, TranslationKeyId::Name);
|
||||
methodModelInformation->m_toolTip = TranslationHelper::GetGlobalMethodKeyTranslation(methodModelInformation->m_methodName,
|
||||
TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
methodModelInformation->m_categoryPath = TranslationHelper::GetGlobalMethodKeyTranslation(methodModelInformation->m_methodName,
|
||||
TranslationItemType::Node, TranslationKeyId::Category);
|
||||
AZStd::string name = behaviorProperty->m_name;
|
||||
AZ::StringFunc::Replace(name, "::Getter", "");
|
||||
AZ::StringFunc::Replace(name, "::Setter", "");
|
||||
|
||||
if (methodModelInformation->m_displayName.empty())
|
||||
{
|
||||
methodModelInformation->m_displayName = methodModelInformation->m_methodName;
|
||||
}
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "Constant" << name << "details";
|
||||
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
|
||||
methodModelInformation->m_displayName = details.m_name;
|
||||
methodModelInformation->m_toolTip = details.m_tooltip;
|
||||
methodModelInformation->m_categoryPath = details.m_category;
|
||||
|
||||
if (methodModelInformation->m_categoryPath.empty())
|
||||
{
|
||||
methodModelInformation->m_categoryPath = GetCategoryPath(behaviorMethod.m_attributes, behaviorContext);
|
||||
// Default to making the Category for Global Methods to be informative that the method
|
||||
// is registered with the Behavior Context
|
||||
if (methodModelInformation->m_categoryPath.empty())
|
||||
{
|
||||
methodModelInformation->m_categoryPath = "Constants";
|
||||
}
|
||||
methodModelInformation->m_categoryPath = "Constants";
|
||||
}
|
||||
|
||||
m_registeredNodes.emplace(nodeIdentifier, methodModelInformation.release());
|
||||
}
|
||||
}
|
||||
|
||||
void NodePaletteModel::RegisterMethodNode(const AZ::BehaviorContext& behaviorContext, const AZ::BehaviorMethod& behaviorMethod)
|
||||
void NodePaletteModel::RegisterMethodNode(const AZ::BehaviorContext&, const AZ::BehaviorMethod& behaviorMethod)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "NodePaletteModel::RegisterMethodNode");
|
||||
|
||||
// Construct Node Identifier using the BehaviorMethod name and the ScriptCanvas Method typeid
|
||||
ScriptCanvas::NodeTypeIdentifier nodeIdentifier =
|
||||
ScriptCanvas::NodeUtils::ConstructGlobalMethodNodeIdentifier(behaviorMethod.m_name);
|
||||
@@ -1113,31 +1104,17 @@ namespace ScriptCanvasEditor
|
||||
auto methodModelInformation = AZStd::make_unique<GlobalMethodNodeModelInformation>();
|
||||
methodModelInformation->m_methodName = behaviorMethod.m_name;
|
||||
methodModelInformation->m_nodeIdentifier = nodeIdentifier;
|
||||
|
||||
methodModelInformation->m_titlePaletteOverride = "MethodNodeTitlePalette";
|
||||
|
||||
methodModelInformation->m_displayName = TranslationHelper::GetGlobalMethodKeyTranslation(methodModelInformation->m_methodName,
|
||||
TranslationItemType::Node, TranslationKeyId::Name);
|
||||
methodModelInformation->m_toolTip = TranslationHelper::GetGlobalMethodKeyTranslation(methodModelInformation->m_methodName,
|
||||
TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
methodModelInformation->m_categoryPath = TranslationHelper::GetGlobalMethodKeyTranslation(methodModelInformation->m_methodName,
|
||||
TranslationItemType::Node, TranslationKeyId::Category);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "BehaviorMethod" << behaviorMethod.m_name.c_str() << "details";
|
||||
|
||||
if (methodModelInformation->m_displayName.empty())
|
||||
{
|
||||
methodModelInformation->m_displayName = methodModelInformation->m_methodName;
|
||||
}
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
if (methodModelInformation->m_categoryPath.empty())
|
||||
{
|
||||
methodModelInformation->m_categoryPath = GetCategoryPath(behaviorMethod.m_attributes, behaviorContext);
|
||||
// Default to making the Category for Global Methods to be informative that the method
|
||||
// is registered with the Behavior Context
|
||||
if (methodModelInformation->m_categoryPath.empty())
|
||||
{
|
||||
methodModelInformation->m_categoryPath = "Behavior Context: Global Methods";
|
||||
}
|
||||
}
|
||||
methodModelInformation->m_displayName = details.m_name.empty() ? behaviorMethod.m_name : details.m_name;
|
||||
methodModelInformation->m_toolTip = details.m_tooltip.empty() ? "" : details.m_tooltip;
|
||||
methodModelInformation->m_categoryPath = details.m_category.empty() ? "Behavior Context: Global Methods" : details.m_category;
|
||||
|
||||
m_registeredNodes.emplace(nodeIdentifier, methodModelInformation.release());
|
||||
}
|
||||
@@ -1145,6 +1122,8 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void NodePaletteModel::RegisterEBusHandlerNodeModelInformation(AZStd::string_view categoryPath, AZStd::string_view busName, AZStd::string_view eventName, const ScriptCanvas::EBusBusId& busId, const AZ::BehaviorEBusHandler::BusForwarderEvent& forwardEvent)
|
||||
{
|
||||
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "NodePaletteModel::RegisterEBusHandlerNodeModelInformation");
|
||||
ScriptCanvas::NodeTypeIdentifier nodeIdentifier = ScriptCanvas::NodeUtils::ConstructEBusEventReceiverIdentifier(busId, forwardEvent.m_eventId);
|
||||
|
||||
auto nodeIter = m_registeredNodes.find(nodeIdentifier);
|
||||
@@ -1162,18 +1141,14 @@ namespace ScriptCanvasEditor
|
||||
handlerInformation->m_busId = busId;
|
||||
handlerInformation->m_eventId = forwardEvent.m_eventId;
|
||||
|
||||
AZStd::string displayEventName = TranslationHelper::GetKeyTranslation(TranslationContextGroup::EbusHandler, busName.data(), eventName.data(), TranslationItemType::Node, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusHandler" << busName << "methods" << eventName << "details";
|
||||
|
||||
if (displayEventName.empty())
|
||||
{
|
||||
handlerInformation->m_displayName = eventName;
|
||||
}
|
||||
else
|
||||
{
|
||||
handlerInformation->m_displayName = displayEventName;
|
||||
}
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
handlerInformation->m_toolTip = TranslationHelper::GetKeyTranslation(TranslationContextGroup::EbusHandler, busName.data(), eventName.data(), TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
handlerInformation->m_displayName = details.m_name.empty() ? eventName : details.m_name.c_str();
|
||||
handlerInformation->m_toolTip = details.m_tooltip.empty() ? "" : details.m_tooltip;
|
||||
|
||||
m_registeredNodes.emplace(AZStd::make_pair(nodeIdentifier, handlerInformation));
|
||||
}
|
||||
@@ -1189,6 +1164,8 @@ namespace ScriptCanvasEditor
|
||||
, ScriptCanvas::PropertyStatus propertyStatus
|
||||
, bool isOverload)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "NodePaletteModel::RegisterEBusSenderNodeModelInformation");
|
||||
|
||||
ScriptCanvas::NodeTypeIdentifier nodeIdentifier = isOverload ? ScriptCanvas::NodeUtils::ConstructEBusEventSenderOverloadedIdentifier(busId, eventId) : ScriptCanvas::NodeUtils::ConstructEBusEventSenderIdentifier(busId, eventId);
|
||||
|
||||
auto nodeIter = m_registeredNodes.find(nodeIdentifier);
|
||||
@@ -1208,18 +1185,14 @@ namespace ScriptCanvasEditor
|
||||
senderInformation->m_busId = busId;
|
||||
senderInformation->m_eventId = eventId;
|
||||
|
||||
AZStd::string displayEventName = TranslationHelper::GetKeyTranslation(TranslationContextGroup::EbusSender, busName.data(), eventName.data(), TranslationItemType::Node, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusSender" << busName << "methods" << eventName << "details";
|
||||
|
||||
if (displayEventName.empty())
|
||||
{
|
||||
senderInformation->m_displayName = eventName;
|
||||
}
|
||||
else
|
||||
{
|
||||
senderInformation->m_displayName = displayEventName;
|
||||
}
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
senderInformation->m_toolTip = TranslationHelper::GetKeyTranslation(TranslationContextGroup::EbusSender, busName.data(), eventName.data(), TranslationItemType::Node, TranslationKeyId::Tooltip);
|
||||
senderInformation->m_displayName = details.m_name.empty() ? eventName : details.m_name.c_str();
|
||||
senderInformation->m_toolTip = details.m_tooltip.empty() ? "" : details.m_tooltip;
|
||||
|
||||
m_registeredNodes.emplace(AZStd::make_pair(nodeIdentifier, senderInformation));
|
||||
}
|
||||
@@ -1227,6 +1200,8 @@ namespace ScriptCanvasEditor
|
||||
|
||||
AZStd::vector<ScriptCanvas::NodeTypeIdentifier> NodePaletteModel::RegisterScriptEvent(ScriptEvents::ScriptEventsAsset* scriptEventAsset)
|
||||
{
|
||||
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "NodePaletteModel::RegisterScriptEvent");
|
||||
const ScriptEvents::ScriptEvent& scriptEvent = scriptEventAsset->m_definition;
|
||||
|
||||
ScriptCanvas::EBusBusId busId = scriptEventAsset->GetBusId();
|
||||
@@ -1237,7 +1212,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
AZStd::vector<ScriptCanvas::NodeTypeIdentifier> identifiers;
|
||||
|
||||
// Each event has a handler and a reciever
|
||||
// Each event has a handler and a receiver
|
||||
identifiers.reserve(methods.size() * 2);
|
||||
|
||||
for (const auto& method : methods)
|
||||
@@ -1445,6 +1420,8 @@ namespace ScriptCanvasEditor
|
||||
|
||||
AZStd::vector<ScriptCanvas::NodeTypeIdentifier> NodePaletteModel::ProcessAsset(AzToolsFramework::AssetBrowser::AssetBrowserEntry* entry)
|
||||
{
|
||||
AZ_PROFILE_SCOPE(NodePaletteModel, "NodePaletteModel::RegisterScriptEvent");
|
||||
|
||||
AZStd::lock_guard<AZStd::recursive_mutex> myLocker(m_mutex);
|
||||
|
||||
if (entry)
|
||||
|
||||
@@ -80,7 +80,8 @@ namespace ScriptCanvasEditor
|
||||
void RegisterCustomNode(AZStd::string_view categoryPath, const AZ::Uuid& uuid, AZStd::string_view name, const AZ::SerializeContext::ClassData* classData);
|
||||
void RegisterClassNode(const AZStd::string& categoryPath, const AZStd::string& methodClass, const AZStd::string& methodName, const AZ::BehaviorMethod* behaviorMethod, const AZ::BehaviorContext* behaviorContext, ScriptCanvas::PropertyStatus propertyStatus, bool isOverload);
|
||||
void RegisterMethodNode(const AZ::BehaviorContext& behaviorContext, const AZ::BehaviorMethod& behaviorMethod);
|
||||
void RegisterGlobalConstant(const AZ::BehaviorContext& behaviorContext, const AZ::BehaviorMethod& behaviorMethod);
|
||||
void RegisterGlobalConstant(const AZ::BehaviorContext& behaviorContext, const AZ::BehaviorProperty* behaviorProperty, const AZ::BehaviorMethod& behaviorMethod);
|
||||
|
||||
|
||||
void RegisterEBusHandlerNodeModelInformation(AZStd::string_view categoryPath, AZStd::string_view busName, AZStd::string_view eventName, const ScriptCanvas::EBusBusId& busId, const AZ::BehaviorEBusHandler::BusForwarderEvent& forwardEvent);
|
||||
void RegisterEBusSenderNodeModelInformation(AZStd::string_view categoryPath, AZStd::string_view busName, AZStd::string_view eventName, const ScriptCanvas::EBusBusId& busId, const ScriptCanvas::EBusEventId& eventId, const AZ::BehaviorEBusEventSender& eventSender, ScriptCanvas::PropertyStatus propertyStatus, bool isOverload);
|
||||
|
||||
@@ -26,12 +26,18 @@
|
||||
#include <AzCore/Serialization/SerializeContext.h>
|
||||
#include <AzCore/UserSettings/UserSettings.h>
|
||||
#include <AzCore/std/containers/map.h>
|
||||
|
||||
#include <AzFramework/Gem/GemInfo.h>
|
||||
#include <AzFramework/StringFunc/StringFunc.h>
|
||||
|
||||
#include <AzToolsFramework/API/EditorAssetSystemAPI.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Entries/ProductAssetBrowserEntry.h>
|
||||
#include <AzToolsFramework/AssetBrowser/Entries/SourceAssetBrowserEntry.h>
|
||||
#include <AzToolsFramework/AssetEditor/AssetEditorUtils.h>
|
||||
#include <AzToolsFramework/ToolsComponents/EditorComponentBase.h>
|
||||
|
||||
#include <AzQtComponents/Utilities/DesktopUtilities.h>
|
||||
|
||||
#include <Editor/Assets/ScriptCanvasAssetHelpers.h>
|
||||
#include <Editor/Components/IconComponent.h>
|
||||
#include <Editor/GraphCanvas/GraphCanvasEditorNotificationBusId.h>
|
||||
@@ -50,9 +56,11 @@
|
||||
#include <Editor/View/Widgets/NodePalette/VariableNodePaletteTreeItemTypes.h>
|
||||
#include <Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h>
|
||||
#include <Editor/View/Widgets/ui_ScriptCanvasNodePaletteToolbar.h>
|
||||
|
||||
#include <GraphCanvas/Widgets/NodePalette/NodePaletteTreeView.h>
|
||||
#include <GraphCanvas/Widgets/NodePalette/NodePaletteWidget.h>
|
||||
#include <GraphCanvas/Widgets/NodePalette/TreeItems/NodePaletteTreeItem.h>
|
||||
|
||||
#include <ScriptCanvas/Asset/RuntimeAsset.h>
|
||||
#include <ScriptCanvas/Core/Attributes.h>
|
||||
#include <ScriptCanvas/Core/SubgraphInterfaceUtility.h>
|
||||
@@ -99,7 +107,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
if (auto customModelInformation = azrtti_cast<const CustomNodeModelInformation*>(modelInformation))
|
||||
{
|
||||
createdItem = parentItem->CreateChildNode<CustomNodePaletteTreeItem>(customModelInformation->m_typeId, customModelInformation->m_displayName);
|
||||
createdItem = parentItem->CreateChildNode<CustomNodePaletteTreeItem>(*customModelInformation);
|
||||
createdItem->SetToolTip(QString(customModelInformation->m_toolTip.c_str()));
|
||||
}
|
||||
else if (auto methodNodeModelInformation = azrtti_cast<const MethodNodeModelInformation*>(modelInformation))
|
||||
@@ -638,7 +646,7 @@ namespace ScriptCanvasEditor
|
||||
m_mimeType = NodePaletteDockWidget::GetMimeType();
|
||||
m_isInContextMenu = isInContextMenu;
|
||||
m_allowArrowKeyNavigation = isInContextMenu;
|
||||
m_saveIdentifier = m_isInContextMenu ? "ScriptCanvas" : "ScriptCnavas_ContextMenu";
|
||||
m_saveIdentifier = m_isInContextMenu ? "ScriptCanvas" : "ScriptCanvas_ContextMenu";
|
||||
|
||||
m_rootTreeItem = Widget::NodePaletteWidget::ExternalCreateNodePaletteRoot(nodePaletteModel, assetModel);
|
||||
}
|
||||
@@ -660,6 +668,11 @@ namespace ScriptCanvasEditor
|
||||
, m_previousCycleAction(nullptr)
|
||||
, m_ignoreSelectionChanged(false)
|
||||
{
|
||||
|
||||
GraphCanvas::NodePaletteTreeView* treeView = GetTreeView();
|
||||
|
||||
treeView->setContextMenuPolicy(Qt::ContextMenuPolicy::ActionsContextMenu);
|
||||
|
||||
if (!paletteConfig.m_isInContextMenu)
|
||||
{
|
||||
QMenu* creationMenu = new QMenu();
|
||||
@@ -677,10 +690,11 @@ namespace ScriptCanvasEditor
|
||||
|
||||
AddSearchCustomizationWidget(m_newCustomEvent);
|
||||
|
||||
GraphCanvas::NodePaletteTreeView* treeView = GetTreeView();
|
||||
|
||||
|
||||
{
|
||||
m_nextCycleAction = new QAction(treeView);
|
||||
m_nextCycleAction->setText(tr("Next Instance in Graph"));
|
||||
|
||||
m_nextCycleAction->setShortcut(QKeySequence(Qt::Key_F8));
|
||||
treeView->addAction(m_nextCycleAction);
|
||||
@@ -690,6 +704,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
{
|
||||
m_previousCycleAction = new QAction(treeView);
|
||||
m_previousCycleAction->setText(tr("Previous Instance in Graph"));
|
||||
|
||||
m_previousCycleAction->setShortcut(QKeySequence(Qt::Key_F7));
|
||||
treeView->addAction(m_previousCycleAction);
|
||||
@@ -699,6 +714,23 @@ namespace ScriptCanvasEditor
|
||||
|
||||
QObject::connect(treeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &NodePaletteDockWidget::OnTreeSelectionChanged);
|
||||
QObject::connect(treeView, &GraphCanvas::NodePaletteTreeView::OnTreeItemDoubleClicked, this, &NodePaletteDockWidget::HandleTreeItemDoubleClicked);
|
||||
|
||||
{
|
||||
m_openTranslationData = new QAction(treeView);
|
||||
m_openTranslationData->setText("Explore Translation Data");
|
||||
treeView->addAction(m_openTranslationData);
|
||||
|
||||
QObject::connect(m_openTranslationData, &QAction::triggered, this, &NodePaletteDockWidget::OpenTranslationData);
|
||||
}
|
||||
|
||||
{
|
||||
m_generateTranslation = new QAction(treeView);
|
||||
m_generateTranslation->setText("Generate Translation");
|
||||
treeView->addAction(m_generateTranslation);
|
||||
|
||||
QObject::connect(m_generateTranslation, &QAction::triggered, this, &NodePaletteDockWidget::GenerateTranslation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ConfigureSearchCustomizationMargins(QMargins(0, 0, 0, 0), 0);
|
||||
@@ -781,6 +813,7 @@ namespace ScriptCanvasEditor
|
||||
{
|
||||
m_nextCycleAction->setEnabled(true);
|
||||
m_previousCycleAction->setEnabled(true);
|
||||
m_openTranslationData->setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -793,6 +826,7 @@ namespace ScriptCanvasEditor
|
||||
{
|
||||
m_nextCycleAction->setEnabled(false);
|
||||
m_previousCycleAction->setEnabled(false);
|
||||
m_openTranslationData->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -816,6 +850,81 @@ namespace ScriptCanvasEditor
|
||||
CycleToNextNode();
|
||||
}
|
||||
|
||||
static AZStd::string GetGemPath(const AZStd::string& gemName)
|
||||
{
|
||||
if (auto settingsRegistry = AZ::Interface<AZ::SettingsRegistryInterface>::Get(); settingsRegistry != nullptr)
|
||||
{
|
||||
AZ::IO::Path gemSourceAssetDirectories;
|
||||
AZStd::vector<AzFramework::GemInfo> gemInfos;
|
||||
if (AzFramework::GetGemsInfo(gemInfos, *settingsRegistry))
|
||||
{
|
||||
auto FindGemByName = [gemName](const AzFramework::GemInfo& gemInfo)
|
||||
{
|
||||
return gemInfo.m_gemName == gemName;
|
||||
};
|
||||
// Gather unique list of Gem Paths from the Settings Registry
|
||||
|
||||
auto foundIt = AZStd::find_if(gemInfos.begin(), gemInfos.end(), FindGemByName);
|
||||
if (foundIt != gemInfos.end())
|
||||
{
|
||||
const AzFramework::GemInfo& gemInfo = *foundIt;
|
||||
for (const AZ::IO::Path& absoluteSourcePath : gemInfo.m_absoluteSourcePaths)
|
||||
{
|
||||
gemSourceAssetDirectories = (absoluteSourcePath / gemInfo.GetGemAssetFolder());
|
||||
}
|
||||
|
||||
return gemSourceAssetDirectories.c_str();
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
void NodePaletteDockWidget::GenerateTranslation()
|
||||
{
|
||||
QModelIndexList indexList = GetTreeView()->selectionModel()->selectedRows();
|
||||
|
||||
QSortFilterProxyModel* filterModel = static_cast<QSortFilterProxyModel*>(GetTreeView()->model());
|
||||
|
||||
for (const QModelIndex& index : indexList)
|
||||
{
|
||||
QModelIndex sourceIndex = filterModel->mapToSource(index);
|
||||
|
||||
GraphCanvas::NodePaletteTreeItem* nodePaletteItem = static_cast<GraphCanvas::NodePaletteTreeItem*>(sourceIndex.internalPointer());
|
||||
nodePaletteItem->GenerateTranslationData();
|
||||
}
|
||||
}
|
||||
|
||||
void NodePaletteDockWidget::OpenTranslationData()
|
||||
{
|
||||
QModelIndexList indexList = GetTreeView()->selectionModel()->selectedRows();
|
||||
|
||||
if (indexList.size() == 1)
|
||||
{
|
||||
QSortFilterProxyModel* filterModel = static_cast<QSortFilterProxyModel*>(GetTreeView()->model());
|
||||
|
||||
for (const QModelIndex& index : indexList)
|
||||
{
|
||||
QModelIndex sourceIndex = filterModel->mapToSource(index);
|
||||
|
||||
GraphCanvas::NodePaletteTreeItem* nodePaletteItem = static_cast<GraphCanvas::NodePaletteTreeItem*>(sourceIndex.internalPointer());
|
||||
if (nodePaletteItem)
|
||||
{
|
||||
AZ::IO::Path gemPath = GetGemPath("ScriptCanvas.Editor");
|
||||
gemPath = gemPath / AZ::IO::Path("TranslationAssets");
|
||||
gemPath = gemPath / nodePaletteItem->GetTranslationDataPath();
|
||||
gemPath.ReplaceExtension(".names");
|
||||
|
||||
AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance();
|
||||
if (fileIO->Exists(gemPath.c_str()))
|
||||
{
|
||||
AzQtComponents::ShowFileOnDesktop(gemPath.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void NodePaletteDockWidget::ConfigureHelper()
|
||||
{
|
||||
if (!m_cyclingHelper.IsConfigured() && !m_cyclingIdentifiers.empty())
|
||||
|
||||
@@ -193,8 +193,6 @@ namespace ScriptCanvasEditor
|
||||
void OnSelectionChanged() override;
|
||||
////
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
GraphCanvas::GraphCanvasTreeItem* CreatePaletteRoot() const override;
|
||||
@@ -209,6 +207,8 @@ namespace ScriptCanvasEditor
|
||||
private:
|
||||
|
||||
void HandleTreeItemDoubleClicked(GraphCanvas::GraphCanvasTreeItem* treeItem);
|
||||
void OpenTranslationData();
|
||||
void GenerateTranslation();
|
||||
|
||||
void ConfigureHelper();
|
||||
void ParseCycleTargets(GraphCanvas::GraphCanvasTreeItem* treeItem);
|
||||
@@ -225,6 +225,10 @@ namespace ScriptCanvasEditor
|
||||
QAction* m_previousCycleAction;
|
||||
|
||||
bool m_ignoreSelectionChanged;
|
||||
|
||||
QMenu* m_contextMenu;
|
||||
QAction* m_openTranslationData;
|
||||
QAction* m_generateTranslation;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
#include <AzToolsFramework/ToolsComponents/EditorComponentBase.h>
|
||||
|
||||
#include <GraphCanvas/Types/TranslationTypes.h>
|
||||
#include <GraphCanvas/Components/SceneBus.h>
|
||||
#include <GraphCanvas/Components/StyleBus.h>
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
#include <ScriptCanvas/Data/DataRegistry.h>
|
||||
#include <ScriptCanvas/GraphCanvas/NodeDescriptorBus.h>
|
||||
#include <ScriptCanvas/Asset/RuntimeAsset.h>
|
||||
#include "GraphCanvas/Components/Slots/Data/DataSlotBus.h"
|
||||
|
||||
namespace ScriptCanvasEditor
|
||||
{
|
||||
@@ -886,6 +887,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
ScriptCanvas::NodeRequestBus::EventResult(removedReferences, memberPair.m_scriptCanvasId, &ScriptCanvas::NodeRequests::RemoveVariableReferences, variableIds);
|
||||
|
||||
|
||||
// If we didn't remove the references. Just delete the node.
|
||||
if (!removedReferences)
|
||||
{
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
#include <AzToolsFramework/ToolsComponents/EditorComponentBase.h>
|
||||
|
||||
#include <GraphCanvas/Types/TranslationTypes.h>
|
||||
#include <GraphCanvas/Components/SceneBus.h>
|
||||
#include <GraphCanvas/Components/StyleBus.h>
|
||||
|
||||
|
||||
@@ -113,16 +113,14 @@ namespace ScriptCanvasEditor
|
||||
actionItem.m_name = QString(eventConfigurations[i].m_eventName.c_str());
|
||||
actionItem.m_eventId = eventConfigurations[i].m_eventId;
|
||||
|
||||
AZStd::string translatedName = TranslationHelper::GetKeyTranslation(TranslationContextGroup::EbusHandler, m_busName, eventConfigurations[i].m_eventName, TranslationItemType::Node, TranslationKeyId::Name);
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "EBusHandler" << m_busName.c_str() << "methods" << eventConfigurations[i].m_eventName << "details";
|
||||
|
||||
if (translatedName.empty())
|
||||
{
|
||||
actionItem.m_displayName = actionItem.m_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
actionItem.m_displayName = QString(translatedName.c_str());
|
||||
}
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
details.m_name = actionItem.m_name.toUtf8().data();
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
actionItem.m_displayName = QString(details.m_name.c_str());
|
||||
|
||||
actionItem.m_index = i;
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
#include <QMimeData>
|
||||
#include <QInputDialog>
|
||||
|
||||
#include <AzCore/UserSettings/UserSettings.h>
|
||||
|
||||
#include <AzToolsFramework/API/ToolsApplicationAPI.h>
|
||||
|
||||
#include <Editor/Nodes/NodeUtils.h>
|
||||
@@ -41,6 +43,8 @@
|
||||
#include <Editor/View/Widgets/NodePalette/VariableNodePaletteTreeItemTypes.h>
|
||||
|
||||
#include "ScriptCanvasContextMenus.h"
|
||||
#include "Settings.h"
|
||||
|
||||
#include <ScriptCanvas/Core/NodeBus.h>
|
||||
#include <ScriptCanvas/Core/Slot.h>
|
||||
#include <GraphCanvas/Editor/EditorTypes.h>
|
||||
@@ -53,6 +57,7 @@
|
||||
#include <GraphCanvas/Components/Nodes/NodeTitleBus.h>
|
||||
#include <GraphCanvas/Components/NodeDescriptors/FunctionDefinitionNodeDescriptorComponent.h>
|
||||
|
||||
|
||||
namespace ScriptCanvasEditor
|
||||
{
|
||||
////////////////////////////
|
||||
@@ -805,6 +810,13 @@ namespace ScriptCanvasEditor
|
||||
SceneContextMenu::SceneContextMenu(const NodePaletteModel& paletteModel, AzToolsFramework::AssetBrowser::AssetBrowserFilterModel* assetModel)
|
||||
: GraphCanvas::SceneContextMenu(ScriptCanvasEditor::AssetEditorId)
|
||||
{
|
||||
|
||||
auto userSettings = AZ::UserSettings::CreateFind<EditorSettings::ScriptCanvasEditorSettings>(AZ_CRC("ScriptCanvasPreviewSettings", 0x1c5a2965), AZ::UserSettings::CT_LOCAL);
|
||||
if (userSettings)
|
||||
{
|
||||
m_userNodePaletteWidth = userSettings->m_sceneContextMenuNodePaletteWidth;
|
||||
}
|
||||
|
||||
const bool inContextMenu = true;
|
||||
Widget::ScriptCanvasNodePaletteConfig paletteConfig(paletteModel, assetModel, inContextMenu);
|
||||
AddNodePaletteMenuAction(paletteConfig);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#include <ScriptCanvas/Core/Contracts/MethodOverloadContract.h>
|
||||
#include <ScriptCanvas/Libraries/Core/Method.h>
|
||||
#include "../../GraphCanvas/Code/Source/Translation/TranslationBus.h"
|
||||
|
||||
namespace ScriptCanvas
|
||||
{
|
||||
@@ -55,13 +56,30 @@ namespace ScriptCanvas
|
||||
{
|
||||
const Data::Type outputType = (unpackedTypes.size() == 1 && AZ::BehaviorContextHelper::IsStringParameter(*result)) ? Data::Type::String() : Data::FromAZType(unpackedTypes[resultIndex]);
|
||||
|
||||
const AZStd::string resultSlotName(AZStd::string::format("Result: %s", Data::GetName(outputType).data()));
|
||||
AZStd::string resultSlotName(Data::GetName(outputType));
|
||||
|
||||
AZStd::string className = outputConfig.config.m_className ? *outputConfig.config.m_className : "";
|
||||
if (className.empty())
|
||||
{
|
||||
className = outputConfig.config.m_prettyClassName;
|
||||
}
|
||||
|
||||
GraphCanvas::TranslationKey key;
|
||||
key << "BehaviorClass" << className << "methods" << *outputConfig.config.m_lookupName << "results" << resultIndex << "details";
|
||||
|
||||
GraphCanvas::TranslationRequests::Details details;
|
||||
GraphCanvas::TranslationRequestBus::BroadcastResult(details, &GraphCanvas::TranslationRequests::GetDetails, key, details);
|
||||
|
||||
if (!details.m_name.empty())
|
||||
{
|
||||
resultSlotName = details.m_name;
|
||||
}
|
||||
|
||||
SlotId addedSlotId;
|
||||
|
||||
if (outputConfig.isReturnValueOverloaded)
|
||||
{
|
||||
DynamicDataSlotConfiguration slotConfiguration;
|
||||
//slotConfiguration.m_name = outputConfig.outputNamePrefix + resultSlotName;
|
||||
|
||||
slotConfiguration.m_dynamicDataType = outputConfig.methodNode->GetOverloadedOutputType(resultIndex);
|
||||
|
||||
|
||||
@@ -1160,8 +1160,8 @@ namespace ScriptCanvas
|
||||
if (!slot->IsDynamicSlot() || slot->HasDisplayType())
|
||||
{
|
||||
InitializeVariableReference((*slot), {});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ModifiableDatumView datumView;
|
||||
@@ -2391,7 +2391,8 @@ namespace ScriptCanvas
|
||||
|
||||
if (variableIds.count(variableId) > 0)
|
||||
{
|
||||
InitializeVariableReference(slot, variableIds);
|
||||
slot.ClearVariableReference();
|
||||
NodeNotificationsBus::Event(GetEntityId(), &NodeNotifications::OnSlotInputChanged, slot.GetId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2962,6 +2963,11 @@ namespace ScriptCanvas
|
||||
}
|
||||
}
|
||||
|
||||
AZStd::string Node::GetNodeTypeName() const
|
||||
{
|
||||
return RTTI_GetTypeName();
|
||||
}
|
||||
|
||||
AZStd::string Node::GetDebugName() const
|
||||
{
|
||||
if (GetEntityId().IsValid())
|
||||
|
||||
@@ -525,6 +525,7 @@ namespace ScriptCanvas
|
||||
|
||||
void SignalDeserialized();
|
||||
|
||||
virtual AZStd::string GetNodeTypeName() const;
|
||||
virtual AZStd::string GetDebugName() const;
|
||||
virtual AZStd::string GetNodeName() const;
|
||||
|
||||
@@ -886,6 +887,8 @@ protected:
|
||||
// The SlotIterator& parameter is populated with an iterator to the inserted or found slot within the slot list
|
||||
AZ::Outcome<SlotIdIteratorMap::iterator, AZStd::string> FindOrInsertSlot(AZ::s64 index, const SlotConfiguration& slotConfig, SlotIterator& iterOut);
|
||||
|
||||
public:
|
||||
|
||||
// This function is only called once, when the node is added to a graph, as opposed to Init(), which will be called
|
||||
// soon after construction, or after deserialization. So the functionality in configure does not need to be idempotent.
|
||||
void Configure();
|
||||
@@ -1091,7 +1094,7 @@ protected:
|
||||
{
|
||||
DataSlotConfiguration slotConfiguration;
|
||||
|
||||
slotConfiguration.m_name = AZStd::string::format("%s: %s", t_Traits::GetResultName(0), Data::GetName(Data::FromAZType<AZStd::decay_t<ResultType>>()).data());
|
||||
slotConfiguration.m_name = t_Traits::GetResultName(0);
|
||||
slotConfiguration.SetType(Data::FromAZType<AZStd::decay_t<ResultType>>());
|
||||
slotConfiguration.SetConnectionType(ConnectionType::Output);
|
||||
|
||||
@@ -1113,7 +1116,7 @@ protected:
|
||||
{
|
||||
DataSlotConfiguration slotConfiguration;
|
||||
|
||||
slotConfiguration.m_name = AZStd::string::format("%s: %s", t_Traits::GetResultName(Index), Data::GetName(Data::FromAZType<AZStd::decay_t<AZStd::tuple_element_t<Index, ResultType>>>()).data());
|
||||
slotConfiguration.m_name = t_Traits::GetResultName(Index);
|
||||
slotConfiguration.SetType(Data::FromAZType<AZStd::decay_t<AZStd::tuple_element_t<Index, ResultType>>>());
|
||||
|
||||
slotConfiguration.SetConnectionType(connectionType);
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace ScriptCanvas
|
||||
}\
|
||||
\
|
||||
static const char* GetDependency() { return CATEGORY; }\
|
||||
static const char* GetCategory() { if (ISDEPRECATED) return AZ_STRINGIZE(CATEGORY /Deprecated); else return CATEGORY; };\
|
||||
static const char* GetCategory() { if (IsDeprecated()) return "Deprecated"; else return CATEGORY; };\
|
||||
static const char* GetDescription() { return DESCRIPTION; };\
|
||||
static const char* GetNodeName() { return #NODE_NAME; };\
|
||||
static bool IsDeprecated() { return ISDEPRECATED; };\
|
||||
@@ -256,7 +256,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
DataSlotConfiguration slotConfiguration;
|
||||
|
||||
slotConfiguration.m_name = AZStd::string::format("%s: %s", Data::Traits<ArgType>::GetName().data(), t_Traits::GetArgName(Index));
|
||||
slotConfiguration.m_name = t_Traits::GetArgName(Index);
|
||||
slotConfiguration.ConfigureDatum(AZStd::move(Datum(Data::FromAZType(Data::Traits<ArgType>::GetAZType()), Datum::eOriginality::Copy)));
|
||||
|
||||
slotConfiguration.SetConnectionType(connectionType);
|
||||
|
||||
@@ -182,7 +182,7 @@ namespace ScriptCanvas
|
||||
|
||||
static AZ::Uuid GetAZType(const Data::Type& = {}) { return azrtti_typeid<CRCType>(); }
|
||||
static Data::Type GetSCType(const AZ::TypeId& = AZ::TypeId::CreateNull()) { return Data::Type::CRC(); }
|
||||
static AZStd::string GetName(const Data::Type& = {}) { return "CRC"; }
|
||||
static AZStd::string GetName(const Data::Type& = {}) { return "Tag"; }
|
||||
static Type GetDefault(const Data::Type& = {}) { return CRCType(); }
|
||||
static bool IsDefault(const Type& value, const Data::Type& = {}) { return value == GetDefault(); }
|
||||
};
|
||||
@@ -198,7 +198,7 @@ namespace ScriptCanvas
|
||||
|
||||
static AZ::Uuid GetAZType(const Data::Type& = {}) { return azrtti_typeid<EntityIDType>(); }
|
||||
static Data::Type GetSCType(const AZ::TypeId& = AZ::TypeId::CreateNull()) { return Data::Type::EntityID(); }
|
||||
static AZStd::string GetName(const Data::Type& = {}) { return "EntityID"; }
|
||||
static AZStd::string GetName(const Data::Type& = {}) { return "EntityId"; }
|
||||
static Type GetDefault(const Data::Type& = {}) { return GraphOwnerId; }
|
||||
static bool IsDefault(const Type& value, const Data::Type& = {}) { return value == GetDefault(); }
|
||||
};
|
||||
|
||||
@@ -25,6 +25,7 @@ namespace ScriptCanvas
|
||||
GetterFunction m_getterFunction;
|
||||
Data::Type m_propertyType;
|
||||
AZStd::string m_propertyName;
|
||||
AZStd::string m_displayName;
|
||||
};
|
||||
using GetterContainer = AZStd::unordered_map<AZStd::string, GetterWrapper>;
|
||||
|
||||
@@ -35,6 +36,7 @@ namespace ScriptCanvas
|
||||
SetterFunction m_setterFunction;
|
||||
Data::Type m_propertyType;
|
||||
AZStd::string m_propertyName;
|
||||
AZStd::string m_displayName;
|
||||
};
|
||||
using SetterContainer = AZStd::unordered_map<AZStd::string, SetterWrapper>;
|
||||
|
||||
@@ -84,7 +86,7 @@ namespace ScriptCanvas
|
||||
using PropertyType = AZStd::decay_t<AZStd::invoke_result_t<FunctionType, GetterType>>;
|
||||
static_assert(!AZStd::is_void<PropertyType>::value, "Getter function must return a non-void type");
|
||||
|
||||
static GetterWrapper Callback(AZStd::string_view propertyName, const FunctionType& propertyGetter)
|
||||
static GetterWrapper Callback(AZStd::string_view propertyName, const FunctionType& propertyGetter, AZStd::string_view displayName)
|
||||
{
|
||||
GetterFunction getterWrapper = [propertyGetter](const Datum& thisDatum) -> AZ::Outcome<Datum, AZStd::string>
|
||||
{
|
||||
@@ -97,7 +99,7 @@ namespace ScriptCanvas
|
||||
return AZ::Success(Datum(AZStd::invoke(propertyGetter, thisObject)));
|
||||
};
|
||||
|
||||
return { getterWrapper, Data::FromAZType<PropertyType>(), propertyName };
|
||||
return { getterWrapper, Data::FromAZType<PropertyType>(), propertyName, displayName };
|
||||
}
|
||||
};
|
||||
|
||||
@@ -107,7 +109,7 @@ namespace ScriptCanvas
|
||||
static_assert(!AZStd::is_void<SetterType>::value, "Setter function must be either a member function pointer that accepts 1 arguments or an invokable object that accepts 2 argument");
|
||||
static_assert(!AZStd::is_void<PropertyType>::value, "Property being set must be a non-void type");
|
||||
|
||||
static SetterWrapper Callback(AZStd::string_view propertyName, const FunctionType& propertySetter)
|
||||
static SetterWrapper Callback(AZStd::string_view propertyName, const FunctionType& propertySetter, AZStd::string_view displayName)
|
||||
{
|
||||
SetterFunction setterWrapper = [propertySetter](Datum& thisDatum, const Datum& propertyDatum) -> AZ::Outcome<void, AZStd::string>
|
||||
{
|
||||
@@ -128,7 +130,7 @@ namespace ScriptCanvas
|
||||
return AZ::Success();
|
||||
};
|
||||
|
||||
return { setterWrapper, Data::FromAZType<PropertyType>(), propertyName };
|
||||
return { setterWrapper, Data::FromAZType<PropertyType>(), propertyName, displayName };
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -178,20 +180,20 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("x", WrapGetter<decltype(&Data::QuaternionType::GetX)>::Callback("x", &Data::QuaternionType::GetX));
|
||||
getterFunctions.emplace("y", WrapGetter<decltype(&Data::QuaternionType::GetY)>::Callback("y", &Data::QuaternionType::GetY));
|
||||
getterFunctions.emplace("z", WrapGetter<decltype(&Data::QuaternionType::GetZ)>::Callback("z", &Data::QuaternionType::GetZ));
|
||||
getterFunctions.emplace("w", WrapGetter<decltype(&Data::QuaternionType::GetW)>::Callback("w", &Data::QuaternionType::GetW));
|
||||
getterFunctions.emplace("x", WrapGetter<decltype(&Data::QuaternionType::GetX)>::Callback("x", &Data::QuaternionType::GetX, "X"));
|
||||
getterFunctions.emplace("y", WrapGetter<decltype(&Data::QuaternionType::GetY)>::Callback("y", &Data::QuaternionType::GetY, "Y"));
|
||||
getterFunctions.emplace("z", WrapGetter<decltype(&Data::QuaternionType::GetZ)>::Callback("z", &Data::QuaternionType::GetZ, "Z"));
|
||||
getterFunctions.emplace("w", WrapGetter<decltype(&Data::QuaternionType::GetW)>::Callback("w", &Data::QuaternionType::GetW, "W"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("x", WrapSetter<decltype(&Data::QuaternionType::SetX)>::Callback("x", &Data::QuaternionType::SetX));
|
||||
setterFunctions.emplace("y", WrapSetter<decltype(&Data::QuaternionType::SetY)>::Callback("y", &Data::QuaternionType::SetY));
|
||||
setterFunctions.emplace("z", WrapSetter<decltype(&Data::QuaternionType::SetZ)>::Callback("z", &Data::QuaternionType::SetZ));
|
||||
setterFunctions.emplace("w", WrapSetter<decltype(&Data::QuaternionType::SetW)>::Callback("w", &Data::QuaternionType::SetW));
|
||||
setterFunctions.emplace("x", WrapSetter<decltype(&Data::QuaternionType::SetX)>::Callback("x", &Data::QuaternionType::SetX, "X"));
|
||||
setterFunctions.emplace("y", WrapSetter<decltype(&Data::QuaternionType::SetY)>::Callback("y", &Data::QuaternionType::SetY, "Y"));
|
||||
setterFunctions.emplace("z", WrapSetter<decltype(&Data::QuaternionType::SetZ)>::Callback("z", &Data::QuaternionType::SetZ, "Z"));
|
||||
setterFunctions.emplace("w", WrapSetter<decltype(&Data::QuaternionType::SetW)>::Callback("w", &Data::QuaternionType::SetW, "W"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -202,16 +204,16 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("x", WrapGetter<decltype(&Data::Vector2Type::GetX)>::Callback("x", &Data::Vector2Type::GetX));
|
||||
getterFunctions.emplace("y", WrapGetter<decltype(&Data::Vector2Type::GetY)>::Callback("y", &Data::Vector2Type::GetY));
|
||||
getterFunctions.emplace("x", WrapGetter<decltype(&Data::Vector2Type::GetX)>::Callback("x", &Data::Vector2Type::GetX, "X"));
|
||||
getterFunctions.emplace("y", WrapGetter<decltype(&Data::Vector2Type::GetY)>::Callback("y", &Data::Vector2Type::GetY, "Y"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("x", WrapSetter<decltype(&Data::Vector2Type::SetX)>::Callback("x", &Data::Vector2Type::SetX));
|
||||
setterFunctions.emplace("y", WrapSetter<decltype(&Data::Vector2Type::SetY)>::Callback("y", &Data::Vector2Type::SetY));
|
||||
setterFunctions.emplace("x", WrapSetter<decltype(&Data::Vector2Type::SetX)>::Callback("x", &Data::Vector2Type::SetX, "X"));
|
||||
setterFunctions.emplace("y", WrapSetter<decltype(&Data::Vector2Type::SetY)>::Callback("y", &Data::Vector2Type::SetY, "Y"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -222,18 +224,18 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("x", WrapGetter<decltype(&Data::Vector3Type::GetX)>::Callback("x", &Data::Vector3Type::GetX));
|
||||
getterFunctions.emplace("y", WrapGetter<decltype(&Data::Vector3Type::GetY)>::Callback("y", &Data::Vector3Type::GetY));
|
||||
getterFunctions.emplace("z", WrapGetter<decltype(&Data::Vector3Type::GetZ)>::Callback("z", &Data::Vector3Type::GetZ));
|
||||
getterFunctions.emplace("x", WrapGetter<decltype(&Data::Vector3Type::GetX)>::Callback("x", &Data::Vector3Type::GetX, "X"));
|
||||
getterFunctions.emplace("y", WrapGetter<decltype(&Data::Vector3Type::GetY)>::Callback("y", &Data::Vector3Type::GetY, "Y"));
|
||||
getterFunctions.emplace("z", WrapGetter<decltype(&Data::Vector3Type::GetZ)>::Callback("z", &Data::Vector3Type::GetZ, "Z"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("x", WrapSetter<decltype(&Data::Vector3Type::SetX)>::Callback("x", &Data::Vector3Type::SetX));
|
||||
setterFunctions.emplace("y", WrapSetter<decltype(&Data::Vector3Type::SetY)>::Callback("y", &Data::Vector3Type::SetY));
|
||||
setterFunctions.emplace("z", WrapSetter<decltype(&Data::Vector3Type::SetZ)>::Callback("z", &Data::Vector3Type::SetZ));
|
||||
setterFunctions.emplace("x", WrapSetter<decltype(&Data::Vector3Type::SetX)>::Callback("x", &Data::Vector3Type::SetX, "X"));
|
||||
setterFunctions.emplace("y", WrapSetter<decltype(&Data::Vector3Type::SetY)>::Callback("y", &Data::Vector3Type::SetY, "Y"));
|
||||
setterFunctions.emplace("z", WrapSetter<decltype(&Data::Vector3Type::SetZ)>::Callback("z", &Data::Vector3Type::SetZ, "Z"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -244,20 +246,20 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("x", WrapGetter<decltype(&Data::Vector4Type::GetX)>::Callback("x", &Data::Vector4Type::GetX));
|
||||
getterFunctions.emplace("y", WrapGetter<decltype(&Data::Vector4Type::GetY)>::Callback("y", &Data::Vector4Type::GetY));
|
||||
getterFunctions.emplace("z", WrapGetter<decltype(&Data::Vector4Type::GetZ)>::Callback("z", &Data::Vector4Type::GetZ));
|
||||
getterFunctions.emplace("w", WrapGetter<decltype(&Data::Vector4Type::GetW)>::Callback("w", &Data::Vector4Type::GetW));
|
||||
getterFunctions.emplace("x", WrapGetter<decltype(&Data::Vector4Type::GetX)>::Callback("x", &Data::Vector4Type::GetX, "X"));
|
||||
getterFunctions.emplace("y", WrapGetter<decltype(&Data::Vector4Type::GetY)>::Callback("y", &Data::Vector4Type::GetY, "Y"));
|
||||
getterFunctions.emplace("z", WrapGetter<decltype(&Data::Vector4Type::GetZ)>::Callback("z", &Data::Vector4Type::GetZ, "Z"));
|
||||
getterFunctions.emplace("w", WrapGetter<decltype(&Data::Vector4Type::GetW)>::Callback("w", &Data::Vector4Type::GetW, "W"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("x", WrapSetter<decltype(&Data::Vector4Type::SetX)>::Callback("x", &Data::Vector4Type::SetX));
|
||||
setterFunctions.emplace("y", WrapSetter<decltype(&Data::Vector4Type::SetY)>::Callback("y", &Data::Vector4Type::SetY));
|
||||
setterFunctions.emplace("z", WrapSetter<decltype(&Data::Vector4Type::SetZ)>::Callback("z", &Data::Vector4Type::SetZ));
|
||||
setterFunctions.emplace("w", WrapSetter<decltype(&Data::Vector4Type::SetW)>::Callback("w", &Data::Vector4Type::SetW));
|
||||
setterFunctions.emplace("x", WrapSetter<decltype(&Data::Vector4Type::SetX)>::Callback("x", &Data::Vector4Type::SetX, "X"));
|
||||
setterFunctions.emplace("y", WrapSetter<decltype(&Data::Vector4Type::SetY)>::Callback("y", &Data::Vector4Type::SetY, "Y"));
|
||||
setterFunctions.emplace("z", WrapSetter<decltype(&Data::Vector4Type::SetZ)>::Callback("z", &Data::Vector4Type::SetZ, "Z"));
|
||||
setterFunctions.emplace("w", WrapSetter<decltype(&Data::Vector4Type::SetW)>::Callback("w", &Data::Vector4Type::SetW, "W"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -268,20 +270,20 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("r", WrapGetter<decltype(&Data::ColorType::GetR)>::Callback("r", &Data::ColorType::GetR));
|
||||
getterFunctions.emplace("g", WrapGetter<decltype(&Data::ColorType::GetG)>::Callback("g", &Data::ColorType::GetG));
|
||||
getterFunctions.emplace("b", WrapGetter<decltype(&Data::ColorType::GetB)>::Callback("b", &Data::ColorType::GetB));
|
||||
getterFunctions.emplace("a", WrapGetter<decltype(&Data::ColorType::GetA)>::Callback("a", &Data::ColorType::GetA));
|
||||
getterFunctions.emplace("r", WrapGetter<decltype(&Data::ColorType::GetR)>::Callback("r", &Data::ColorType::GetR, "Red"));
|
||||
getterFunctions.emplace("g", WrapGetter<decltype(&Data::ColorType::GetG)>::Callback("g", &Data::ColorType::GetG, "Green"));
|
||||
getterFunctions.emplace("b", WrapGetter<decltype(&Data::ColorType::GetB)>::Callback("b", &Data::ColorType::GetB, "Blue"));
|
||||
getterFunctions.emplace("a", WrapGetter<decltype(&Data::ColorType::GetA)>::Callback("a", &Data::ColorType::GetA, "Alpha"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("r", WrapSetter<decltype(&Data::ColorType::SetR)>::Callback("r", &Data::ColorType::SetR));
|
||||
setterFunctions.emplace("g", WrapSetter<decltype(&Data::ColorType::SetG)>::Callback("g", &Data::ColorType::SetG));
|
||||
setterFunctions.emplace("b", WrapSetter<decltype(&Data::ColorType::SetB)>::Callback("b", &Data::ColorType::SetB));
|
||||
setterFunctions.emplace("a", WrapSetter<decltype(&Data::ColorType::SetA)>::Callback("a", &Data::ColorType::SetA));
|
||||
setterFunctions.emplace("r", WrapSetter<decltype(&Data::ColorType::SetR)>::Callback("r", &Data::ColorType::SetR, "Red"));
|
||||
setterFunctions.emplace("g", WrapSetter<decltype(&Data::ColorType::SetG)>::Callback("g", &Data::ColorType::SetG, "Green"));
|
||||
setterFunctions.emplace("b", WrapSetter<decltype(&Data::ColorType::SetB)>::Callback("b", &Data::ColorType::SetB, "Blue"));
|
||||
setterFunctions.emplace("a", WrapSetter<decltype(&Data::ColorType::SetA)>::Callback("a", &Data::ColorType::SetA, "Alpha"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -292,16 +294,16 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("normal", WrapGetter<decltype(&Data::PlaneType::GetNormal)>::Callback("normal", &Data::PlaneType::GetNormal));
|
||||
getterFunctions.emplace("distance", WrapGetter<decltype(&Data::PlaneType::GetDistance)>::Callback("distance", &Data::PlaneType::GetDistance));
|
||||
getterFunctions.emplace("mormal", WrapGetter<decltype(&Data::PlaneType::GetNormal)>::Callback("normal", &Data::PlaneType::GetNormal, "Normal"));
|
||||
getterFunctions.emplace("distance", WrapGetter<decltype(&Data::PlaneType::GetDistance)>::Callback("distance", &Data::PlaneType::GetDistance, "Distance"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("normal", WrapSetter<decltype(&Data::PlaneType::SetNormal)>::Callback("normal", &Data::PlaneType::SetNormal));
|
||||
setterFunctions.emplace("distance", WrapSetter<decltype(&Data::PlaneType::SetDistance)>::Callback("distance", &Data::PlaneType::SetDistance));
|
||||
setterFunctions.emplace("normal", WrapSetter<decltype(&Data::PlaneType::SetNormal)>::Callback("normal", &Data::PlaneType::SetNormal, "Normal"));
|
||||
setterFunctions.emplace("distance", WrapSetter<decltype(&Data::PlaneType::SetDistance)>::Callback("distance", &Data::PlaneType::SetDistance, "Distance"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -312,17 +314,17 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("basisX", WrapGetter<decltype(&Data::TransformType::GetBasisX)>::Callback("basisX", &Data::TransformType::GetBasisX));
|
||||
getterFunctions.emplace("basisY", WrapGetter<decltype(&Data::TransformType::GetBasisY)>::Callback("basisY", &Data::TransformType::GetBasisY));
|
||||
getterFunctions.emplace("basisZ", WrapGetter<decltype(&Data::TransformType::GetBasisZ)>::Callback("basisZ", &Data::TransformType::GetBasisZ));
|
||||
getterFunctions.emplace("translation", WrapGetter<decltype(&Data::TransformType::GetTranslation)>::Callback("translation", &Data::TransformType::GetTranslation));
|
||||
getterFunctions.emplace("basisX", WrapGetter<decltype(&Data::TransformType::GetBasisX)>::Callback("basisX", &Data::TransformType::GetBasisX, "X Axis"));
|
||||
getterFunctions.emplace("basisY", WrapGetter<decltype(&Data::TransformType::GetBasisY)>::Callback("basisY", &Data::TransformType::GetBasisY, "Y Axis"));
|
||||
getterFunctions.emplace("basisZ", WrapGetter<decltype(&Data::TransformType::GetBasisZ)>::Callback("basisZ", &Data::TransformType::GetBasisZ, "Z Axis"));
|
||||
getterFunctions.emplace("translation", WrapGetter<decltype(&Data::TransformType::GetTranslation)>::Callback("translation", &Data::TransformType::GetTranslation, "Translation"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("translation", WrapSetter<void(AZ::Transform::*)(const AZ::Vector3&)>::Callback("translation", &Data::TransformType::SetTranslation));
|
||||
setterFunctions.emplace("translation", WrapSetter<void(AZ::Transform::*)(const AZ::Vector3&)>::Callback("translation", &Data::TransformType::SetTranslation, "Translation"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -333,16 +335,16 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("min", WrapGetter<decltype(&Data::AABBType::GetMin)>::Callback("min", &Data::AABBType::GetMin));
|
||||
getterFunctions.emplace("max", WrapGetter<decltype(&Data::AABBType::GetMax)>::Callback("max", &Data::AABBType::GetMax));
|
||||
getterFunctions.emplace("min", WrapGetter<decltype(&Data::AABBType::GetMin)>::Callback("min", &Data::AABBType::GetMin, "Minimum"));
|
||||
getterFunctions.emplace("max", WrapGetter<decltype(&Data::AABBType::GetMax)>::Callback("max", &Data::AABBType::GetMax, "Maximum"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("min", WrapSetter<decltype(&Data::AABBType::SetMin)>::Callback("min", &Data::AABBType::SetMin));
|
||||
setterFunctions.emplace("max", WrapSetter<decltype(&Data::AABBType::SetMax)>::Callback("max", &Data::AABBType::SetMax));
|
||||
setterFunctions.emplace("min", WrapSetter<decltype(&Data::AABBType::SetMin)>::Callback("min", &Data::AABBType::SetMin, "Minimum"));
|
||||
setterFunctions.emplace("max", WrapSetter<decltype(&Data::AABBType::SetMax)>::Callback("max", &Data::AABBType::SetMax, "Maximum"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -353,23 +355,23 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("axisX", WrapGetter<decltype(&Data::OBBType::GetAxisX)>::Callback("axisX", &Data::OBBType::GetAxisX));
|
||||
getterFunctions.emplace("axisY", WrapGetter<decltype(&Data::OBBType::GetAxisY)>::Callback("axisY", &Data::OBBType::GetAxisY));
|
||||
getterFunctions.emplace("axisZ", WrapGetter<decltype(&Data::OBBType::GetAxisZ)>::Callback("axisZ", &Data::OBBType::GetAxisZ));
|
||||
getterFunctions.emplace("halfLengthX", WrapGetter<decltype(&Data::OBBType::GetHalfLengthX)>::Callback("halfLengthX", &Data::OBBType::GetHalfLengthX));
|
||||
getterFunctions.emplace("halfLengthY", WrapGetter<decltype(&Data::OBBType::GetHalfLengthY)>::Callback("halfLengthY", &Data::OBBType::GetHalfLengthY));
|
||||
getterFunctions.emplace("halfLengthZ", WrapGetter<decltype(&Data::OBBType::GetHalfLengthZ)>::Callback("halfLengthZ", &Data::OBBType::GetHalfLengthZ));
|
||||
getterFunctions.emplace("position", WrapGetter<decltype(&Data::OBBType::GetPosition)>::Callback("position", &Data::OBBType::GetPosition));
|
||||
getterFunctions.emplace("axisX", WrapGetter<decltype(&Data::OBBType::GetAxisX)>::Callback("axisX", &Data::OBBType::GetAxisX, "X Axis"));
|
||||
getterFunctions.emplace("axisY", WrapGetter<decltype(&Data::OBBType::GetAxisY)>::Callback("axisY", &Data::OBBType::GetAxisY, "Y Axis"));
|
||||
getterFunctions.emplace("Z Axis", WrapGetter<decltype(&Data::OBBType::GetAxisZ)>::Callback("axisZ", &Data::OBBType::GetAxisZ, "Z Axis"));
|
||||
getterFunctions.emplace("halfLengthX", WrapGetter<decltype(&Data::OBBType::GetHalfLengthX)>::Callback("halfLengthX", &Data::OBBType::GetHalfLengthX, "Half Length X"));
|
||||
getterFunctions.emplace("halfLengthY", WrapGetter<decltype(&Data::OBBType::GetHalfLengthY)>::Callback("halfLengthY", &Data::OBBType::GetHalfLengthY, "Half Length Y"));
|
||||
getterFunctions.emplace("halfLengthZ", WrapGetter<decltype(&Data::OBBType::GetHalfLengthZ)>::Callback("halfLengthZ", &Data::OBBType::GetHalfLengthZ, "Half Length Z"));
|
||||
getterFunctions.emplace("position", WrapGetter<decltype(&Data::OBBType::GetPosition)>::Callback("position", &Data::OBBType::GetPosition, "Position"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("halfLengthX", WrapSetter<decltype(&Data::OBBType::SetHalfLengthX)>::Callback("halfLengthX", &Data::OBBType::SetHalfLengthX));
|
||||
setterFunctions.emplace("halfLengthY", WrapSetter<decltype(&Data::OBBType::SetHalfLengthY)>::Callback("halfLengthY", &Data::OBBType::SetHalfLengthY));
|
||||
setterFunctions.emplace("halfLengthZ", WrapSetter<decltype(&Data::OBBType::SetHalfLengthZ)>::Callback("halfLengthZ", &Data::OBBType::SetHalfLengthZ));
|
||||
setterFunctions.emplace("position", WrapSetter<decltype(&Data::OBBType::SetPosition)>::Callback("position", &Data::OBBType::SetPosition));
|
||||
setterFunctions.emplace("halfLengthX", WrapSetter<decltype(&Data::OBBType::SetHalfLengthX)>::Callback("halfLengthX", &Data::OBBType::SetHalfLengthX, "Half Length X"));
|
||||
setterFunctions.emplace("halfLengthY", WrapSetter<decltype(&Data::OBBType::SetHalfLengthY)>::Callback("halfLengthY", &Data::OBBType::SetHalfLengthY, "Half Length Y"));
|
||||
setterFunctions.emplace("halfLengthZ", WrapSetter<decltype(&Data::OBBType::SetHalfLengthZ)>::Callback("halfLengthZ", &Data::OBBType::SetHalfLengthZ, "Half Length Z"));
|
||||
setterFunctions.emplace("position", WrapSetter<decltype(&Data::OBBType::SetPosition)>::Callback("position", &Data::OBBType::SetPosition, "Position"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -380,18 +382,18 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("basisX", WrapGetter<decltype(&Data::Matrix3x3Type::GetBasisX)>::Callback("basisX", &Data::Matrix3x3Type::GetBasisX));
|
||||
getterFunctions.emplace("basisY", WrapGetter<decltype(&Data::Matrix3x3Type::GetBasisY)>::Callback("basisY", &Data::Matrix3x3Type::GetBasisY));
|
||||
getterFunctions.emplace("basisZ", WrapGetter<decltype(&Data::Matrix3x3Type::GetBasisZ)>::Callback("basisZ", &Data::Matrix3x3Type::GetBasisZ));
|
||||
getterFunctions.emplace("basisX", WrapGetter<decltype(&Data::Matrix3x3Type::GetBasisX)>::Callback("basisX", &Data::Matrix3x3Type::GetBasisX, "Position"));
|
||||
getterFunctions.emplace("basisY", WrapGetter<decltype(&Data::Matrix3x3Type::GetBasisY)>::Callback("basisY", &Data::Matrix3x3Type::GetBasisY, "Position"));
|
||||
getterFunctions.emplace("basisZ", WrapGetter<decltype(&Data::Matrix3x3Type::GetBasisZ)>::Callback("basisZ", &Data::Matrix3x3Type::GetBasisZ, "Position"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("basisX", WrapSetter<void(AZ::Matrix3x3::*)(const AZ::Vector3&)>::Callback("basisX", &Data::Matrix3x3Type::SetBasisX));
|
||||
setterFunctions.emplace("basisY", WrapSetter<void(AZ::Matrix3x3::*)(const AZ::Vector3&)>::Callback("basisY", &Data::Matrix3x3Type::SetBasisY));
|
||||
setterFunctions.emplace("basisZ", WrapSetter<void(AZ::Matrix3x3::*)(const AZ::Vector3&)>::Callback("basisZ", &Data::Matrix3x3Type::SetBasisZ));
|
||||
setterFunctions.emplace("basisX", WrapSetter<void(AZ::Matrix3x3::*)(const AZ::Vector3&)>::Callback("basisX", &Data::Matrix3x3Type::SetBasisX, "X Axis"));
|
||||
setterFunctions.emplace("basisY", WrapSetter<void(AZ::Matrix3x3::*)(const AZ::Vector3&)>::Callback("basisY", &Data::Matrix3x3Type::SetBasisY, "Y Axis"));
|
||||
setterFunctions.emplace("basisZ", WrapSetter<void(AZ::Matrix3x3::*)(const AZ::Vector3&)>::Callback("basisZ", &Data::Matrix3x3Type::SetBasisZ, "Z Axis"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
@@ -402,20 +404,20 @@ namespace ScriptCanvas
|
||||
static GetterContainer GetGetterWrappers(const Data::Type&)
|
||||
{
|
||||
GetterContainer getterFunctions;
|
||||
getterFunctions.emplace("basisX", WrapGetter<decltype(&Data::Matrix4x4Type::GetBasisX)>::Callback("basisX", &Data::Matrix4x4Type::GetBasisX));
|
||||
getterFunctions.emplace("basisY", WrapGetter<decltype(&Data::Matrix4x4Type::GetBasisY)>::Callback("basisY", &Data::Matrix4x4Type::GetBasisY));
|
||||
getterFunctions.emplace("basisZ", WrapGetter<decltype(&Data::Matrix4x4Type::GetBasisZ)>::Callback("basisZ", &Data::Matrix4x4Type::GetBasisZ));
|
||||
getterFunctions.emplace("translation", WrapGetter<decltype(&Data::Matrix4x4Type::GetTranslation)>::Callback("translation", &Data::Matrix4x4Type::GetTranslation));
|
||||
getterFunctions.emplace("basisX", WrapGetter<decltype(&Data::Matrix4x4Type::GetBasisX)>::Callback("basisX", &Data::Matrix4x4Type::GetBasisX, "X Axis"));
|
||||
getterFunctions.emplace("basisY", WrapGetter<decltype(&Data::Matrix4x4Type::GetBasisY)>::Callback("basisY", &Data::Matrix4x4Type::GetBasisY, "Y Axis"));
|
||||
getterFunctions.emplace("basisZ", WrapGetter<decltype(&Data::Matrix4x4Type::GetBasisZ)>::Callback("basisZ", &Data::Matrix4x4Type::GetBasisZ, "Z Axis"));
|
||||
getterFunctions.emplace("Translation", WrapGetter<decltype(&Data::Matrix4x4Type::GetTranslation)>::Callback("translation", &Data::Matrix4x4Type::GetTranslation, "Translation"));
|
||||
return getterFunctions;
|
||||
}
|
||||
|
||||
static SetterContainer GetSetterWrappers(const Data::Type&)
|
||||
{
|
||||
SetterContainer setterFunctions;
|
||||
setterFunctions.emplace("basisX", WrapSetter<void(AZ::Matrix4x4::*)(const AZ::Vector4&)>::Callback("basisX", &Data::Matrix4x4Type::SetBasisX));
|
||||
setterFunctions.emplace("basisY", WrapSetter<void(AZ::Matrix4x4::*)(const AZ::Vector4&)>::Callback("basisY", &Data::Matrix4x4Type::SetBasisY));
|
||||
setterFunctions.emplace("basisZ", WrapSetter<void(AZ::Matrix4x4::*)(const AZ::Vector4&)>::Callback("basisZ", &Data::Matrix4x4Type::SetBasisZ));
|
||||
setterFunctions.emplace("translation", WrapSetter<void(AZ::Matrix4x4::*)(const AZ::Vector3&)>::Callback("translation", &Data::Matrix4x4Type::SetTranslation));
|
||||
setterFunctions.emplace("basisX", WrapSetter<void(AZ::Matrix4x4::*)(const AZ::Vector4&)>::Callback("basisX", &Data::Matrix4x4Type::SetBasisX, "X Axis"));
|
||||
setterFunctions.emplace("basisY", WrapSetter<void(AZ::Matrix4x4::*)(const AZ::Vector4&)>::Callback("basisY", &Data::Matrix4x4Type::SetBasisY, "Y Axis"));
|
||||
setterFunctions.emplace("basisZ", WrapSetter<void(AZ::Matrix4x4::*)(const AZ::Vector4&)>::Callback("basisZ", &Data::Matrix4x4Type::SetBasisZ, "Z Axis"));
|
||||
setterFunctions.emplace("translation", WrapSetter<void(AZ::Matrix4x4::*)(const AZ::Vector3&)>::Callback("translation", &Data::Matrix4x4Type::SetTranslation, "Translation"));
|
||||
return setterFunctions;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -132,7 +132,7 @@ namespace ScriptCanvas
|
||||
|
||||
void BooleanExpression::InitializeBooleanExpression()
|
||||
{
|
||||
AZ_Assert(false, "InitializeBooleanExpression must be overridden");
|
||||
AZ_Error("Script Canvas", false, "InitializeBooleanExpression implementation should be provided");
|
||||
}
|
||||
|
||||
void BooleanExpression::OnInit()
|
||||
|
||||
@@ -518,7 +518,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
const AZ::BehaviorParameter& argument(event.m_parameters[AZ::eBehaviorBusForwarderEventIndices::Result]);
|
||||
Data::Type inputType(AZ::BehaviorContextHelper::IsStringParameter(argument) ? Data::Type::String() : Data::FromAZType(argument.m_typeId));
|
||||
const AZStd::string argName(AZStd::string::format("Result: %s", Data::GetName(inputType).data()).data());
|
||||
const AZStd::string argName(Data::GetName(inputType));
|
||||
|
||||
DataSlotConfiguration resultConfiguration;
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include <ScriptCanvas/Libraries/Core/ExtractProperty.h>
|
||||
#include <Libraries/Core/MethodUtility.h>
|
||||
|
||||
@@ -183,6 +184,10 @@ namespace ScriptCanvas
|
||||
DataSlotConfiguration config;
|
||||
|
||||
AZStd::string slotName = AZStd::string::format("%s: %s", propertyName.data(), Data::GetName(getterWrapper.m_propertyType).data());
|
||||
if (!getterWrapper.m_displayName.empty())
|
||||
{
|
||||
slotName = getterWrapper.m_displayName;
|
||||
}
|
||||
|
||||
if (existingSlots.find(slotName) == existingSlots.end())
|
||||
{
|
||||
|
||||
@@ -193,7 +193,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
DataSlotConfiguration slotConfiguration;
|
||||
|
||||
slotConfiguration.m_name = AZStd::string::format("%s: %s", propertyName.data(), Data::GetName(getterWrapper.m_propertyType).data());
|
||||
slotConfiguration.m_name = (getterWrapper.m_displayName.empty()) ? propertyName.data() : getterWrapper.m_displayName;
|
||||
slotConfiguration.SetType(getterWrapper.m_propertyType);
|
||||
slotConfiguration.SetConnectionType(ConnectionType::Output);
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <Core/SlotExecutionMap.h>
|
||||
#include <Libraries/Core/MethodUtility.h>
|
||||
#include <ScriptCanvas/Utils/BehaviorContextUtils.h>
|
||||
#include <AzCore/StringFunc/StringFunc.h>
|
||||
|
||||
namespace MethodCPP
|
||||
{
|
||||
@@ -389,6 +390,9 @@ namespace ScriptCanvas
|
||||
MethodConfiguration config(*method, MethodType::Free);
|
||||
config.m_namespaces = &m_namespaces;
|
||||
config.m_lookupName = &methodName;
|
||||
config.m_prettyClassName = methodName;
|
||||
AZ::StringFunc::Replace(config.m_prettyClassName, "::Getter", "");
|
||||
AZ::StringFunc::Replace(config.m_prettyClassName, "::Setter", "");
|
||||
InitializeMethod(config);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,7 +204,7 @@ namespace ScriptCanvas
|
||||
|
||||
DataSlotConfiguration slotConfiguration;
|
||||
|
||||
slotConfiguration.m_name = AZStd::string::format("Result: %s", argumentTypeName.c_str());
|
||||
slotConfiguration.m_name = argumentTypeName;
|
||||
|
||||
slotConfiguration.SetConnectionType(ConnectionType::Input);
|
||||
slotConfiguration.ConfigureDatum(AZStd::move(Datum(inputType, Datum::eOriginality::Copy, nullptr, AZ::Uuid::CreateNull())));
|
||||
|
||||
@@ -272,7 +272,7 @@ namespace ScriptCanvas
|
||||
|
||||
Data::Type outputType(AZ::BehaviorContextHelper::IsStringParameter(*result) ? Data::Type::String() : Data::FromAZType(result->m_typeId));
|
||||
// multiple outs will need out value names
|
||||
const AZStd::string resultSlotName(AZStd::string::format("Result: %s", Data::GetName(outputType).c_str()));
|
||||
const AZStd::string resultSlotName(Data::GetName(outputType));
|
||||
|
||||
DataSlotConfiguration slotConfiguration;
|
||||
|
||||
@@ -343,7 +343,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
Data::Type outputType(AZ::BehaviorContextHelper::IsStringParameter(*result) ? Data::Type::String() : Data::FromAZType(result->m_typeId));
|
||||
// multiple outs will need out value names
|
||||
const AZStd::string resultSlotName(AZStd::string::format("Result: %s", Data::GetName(outputType).c_str()));
|
||||
const AZStd::string resultSlotName(Data::GetName(outputType));
|
||||
|
||||
Slot* slot = GetSlotByName(resultSlotName);
|
||||
|
||||
|
||||
@@ -294,7 +294,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
DataSlotConfiguration slotConfiguration;
|
||||
|
||||
slotConfiguration.m_name = AZStd::string::format("%s: %s", propertyName.data(), Data::GetName(getterWrapper.m_propertyType).data());
|
||||
slotConfiguration.m_name = (getterWrapper.m_displayName.empty()) ? propertyName.data() : getterWrapper.m_displayName;
|
||||
slotConfiguration.SetType(getterWrapper.m_propertyType);
|
||||
slotConfiguration.SetConnectionType(ConnectionType::Output);
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace ScriptCanvas
|
||||
namespace EntityNodes
|
||||
{
|
||||
using namespace Data;
|
||||
static const char* k_categoryName = "Entity/Entity";
|
||||
static constexpr const char* k_categoryName = "Entity/Entity";
|
||||
|
||||
template<int t_Index>
|
||||
AZ_INLINE void DefaultScale(Node& node) { SetDefaultValuesByIndex<t_Index>::_(node, Data::One()); }
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
using namespace Data;
|
||||
using namespace MathNodeUtilities;
|
||||
static const char* k_categoryName = "Math/AABB";
|
||||
static constexpr const char* k_categoryName = "Math/AABB";
|
||||
|
||||
AZ_INLINE AABBType AddAABB(AABBType a, const AABBType& b)
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
namespace CRCNodes
|
||||
{
|
||||
static const char* k_categoryName = "Math/Crc32";
|
||||
static constexpr const char* k_categoryName = "Math/Crc32";
|
||||
|
||||
AZ_INLINE Data::CRCType FromString(Data::StringType value)
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
using namespace Data;
|
||||
using namespace MathNodeUtilities;
|
||||
static const char* k_categoryName = "Math/Color";
|
||||
static constexpr const char* k_categoryName = "Math/Color";
|
||||
|
||||
AZ_INLINE ColorType Add(ColorType a, ColorType b)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
namespace MathNodes
|
||||
{
|
||||
static const char* k_categoryName = "Math";
|
||||
static constexpr const char* k_categoryName = "Math";
|
||||
|
||||
AZ_INLINE Data::NumberType MultiplyAndAdd(Data::NumberType multiplicand, Data::NumberType multiplier, Data::NumberType addend)
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
namespace RandomNodes
|
||||
{
|
||||
static const char* k_categoryName = "Math/Random";
|
||||
static constexpr const char* k_categoryName = "Math/Random";
|
||||
|
||||
// RandomColor
|
||||
AZ_INLINE void SetRandomColorDefaults(Node& node)
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
namespace Matrix3x3Nodes
|
||||
{
|
||||
static const char* k_categoryName = "Math/Matrix3x3";
|
||||
static constexpr const char* k_categoryName = "Math/Matrix3x3";
|
||||
|
||||
AZ_INLINE Data::Matrix3x3Type Add(const Data::Matrix3x3Type& lhs, const Data::Matrix3x3Type& rhs)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
namespace Matrix4x4Nodes
|
||||
{
|
||||
static const char* k_categoryName = "Math/Matrix4x4";
|
||||
static constexpr const char* k_categoryName = "Math/Matrix4x4";
|
||||
|
||||
AZ_INLINE Data::Matrix4x4Type FromColumns(const Data::Vector4Type& col0, const Data::Vector4Type& col1, const Data::Vector4Type& col2, const Data::Vector4Type& col3)
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
using namespace Data;
|
||||
using namespace MathNodeUtilities;
|
||||
static const char* k_categoryName = "Math/OBB";
|
||||
static constexpr const char* k_categoryName = "Math/OBB";
|
||||
|
||||
AZ_INLINE OBBType FromAabb(const AABBType& source)
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
using namespace Data;
|
||||
using namespace MathNodeUtilities;
|
||||
static const char* k_categoryName = "Math/Plane";
|
||||
static constexpr const char* k_categoryName = "Math/Plane";
|
||||
|
||||
AZ_INLINE NumberType DistanceToPoint(PlaneType source, Vector3Type point)
|
||||
{
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
using namespace Data;
|
||||
using namespace MathNodeUtilities;
|
||||
static const char* k_categoryName = "Math/Quaternion";
|
||||
static constexpr const char* k_categoryName = "Math/Quaternion";
|
||||
|
||||
AZ_INLINE QuaternionType Add(QuaternionType a, QuaternionType b)
|
||||
{
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
using namespace Data;
|
||||
using namespace MathNodeUtilities;
|
||||
static const char* k_categoryName = "Math/Transform";
|
||||
static constexpr const char* k_categoryName = "Math/Transform";
|
||||
|
||||
AZ_INLINE std::tuple<NumberType, TransformType> ExtractUniformScale(TransformType source)
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
using namespace MathNodeUtilities;
|
||||
using namespace Data;
|
||||
static const char* k_categoryName = "Math/Vector2";
|
||||
static constexpr const char* k_categoryName = "Math/Vector2";
|
||||
|
||||
AZ_INLINE Vector2Type Absolute(const Vector2Type source)
|
||||
{
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
using namespace MathNodeUtilities;
|
||||
using namespace Data;
|
||||
static const char* k_categoryName = "Math/Vector3";
|
||||
static constexpr const char* k_categoryName = "Math/Vector3";
|
||||
|
||||
AZ_INLINE Vector3Type Absolute(const Vector3Type source)
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
using namespace MathNodeUtilities;
|
||||
using namespace Data;
|
||||
static const char* k_categoryName = "Math/Vector4";
|
||||
static constexpr const char* k_categoryName = "Math/Vector4";
|
||||
|
||||
AZ_INLINE Vector4Type Absolute(const Vector4Type source)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace ScriptCanvas
|
||||
{
|
||||
namespace StringNodes
|
||||
{
|
||||
static const char* k_categoryName = "String";
|
||||
static constexpr const char* k_categoryName = "String";
|
||||
|
||||
AZ_INLINE Data::StringType ToLower(Data::StringType sourceString)
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,209 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AzCore/std/string/string.h>
|
||||
#include <AzCore/std/containers/vector.h>
|
||||
|
||||
#include <AzCore/Math/Crc.h>
|
||||
#include <AzCore/RTTI/ReflectContext.h>
|
||||
#include <AzCore/Serialization/EditContext.h>
|
||||
#include <AzCore/Script/ScriptContextAttributes.h>
|
||||
|
||||
namespace AZ
|
||||
{
|
||||
class BehaviorClass;
|
||||
class BehaviorContext;
|
||||
class BehaviorEBus;
|
||||
class BehaviorMethod;
|
||||
class BehaviorProperty;
|
||||
class Entity;
|
||||
class SerializeContext;
|
||||
}
|
||||
|
||||
namespace ScriptCanvasEditorTools
|
||||
{
|
||||
//! Utility structures for generating the JSON files used for names of elements in Script Canvas
|
||||
struct EntryDetails
|
||||
{
|
||||
AZStd::string m_name;
|
||||
AZStd::string m_tooltip;
|
||||
AZStd::string m_category;
|
||||
AZStd::string m_subtitle;
|
||||
};
|
||||
using EntryDetailsList = AZStd::vector<EntryDetails>;
|
||||
|
||||
//! Utility structure that represents a method's argument
|
||||
struct Argument
|
||||
{
|
||||
AZStd::string m_typeId;
|
||||
EntryDetails m_details;
|
||||
};
|
||||
|
||||
//! Utility structure that represents a method
|
||||
struct Method
|
||||
{
|
||||
AZStd::string m_key;
|
||||
AZStd::string m_context;
|
||||
|
||||
EntryDetails m_details;
|
||||
|
||||
EntryDetails m_entry;
|
||||
EntryDetails m_exit;
|
||||
|
||||
AZStd::vector<Argument> m_arguments;
|
||||
AZStd::vector<Argument> m_results;
|
||||
};
|
||||
|
||||
//! Utility structure that represents a Script Canvas slot
|
||||
struct Slot
|
||||
{
|
||||
AZStd::string m_key;
|
||||
|
||||
EntryDetails m_details;
|
||||
|
||||
Argument m_data;
|
||||
};
|
||||
|
||||
//! Utility structure that represents an reflected element
|
||||
struct Entry
|
||||
{
|
||||
AZStd::string m_key;
|
||||
AZStd::string m_context;
|
||||
AZStd::string m_variant;
|
||||
|
||||
EntryDetails m_details;
|
||||
|
||||
AZStd::vector<Method> m_methods;
|
||||
AZStd::vector<Slot> m_slots;
|
||||
};
|
||||
|
||||
// The root level JSON object
|
||||
struct TranslationFormat
|
||||
{
|
||||
AZStd::vector<Entry> m_entries;
|
||||
};
|
||||
|
||||
|
||||
//! Class the wraps all the generation of translation data for all scripting types.
|
||||
class TranslationGeneration
|
||||
{
|
||||
public:
|
||||
|
||||
TranslationGeneration();
|
||||
|
||||
//! Generate the translation data for a given BehaviorClass
|
||||
bool TranslateBehaviorClass(const AZ::BehaviorClass* behaviorClass);
|
||||
|
||||
//! Generate the translation data for all Behavior Context classes
|
||||
void TranslateBehaviorClasses();
|
||||
|
||||
//! Generate the translation data for Behavior Ebus, handles both Handlers and Senders
|
||||
void TranslateEBus(const AZ::BehaviorEBus* behaviorEBus);
|
||||
|
||||
//! Generate the translation data for a specific AZ::Event
|
||||
bool TranslateSingleAZEvent(const AZ::BehaviorMethod* method);
|
||||
|
||||
//! Generate the translation data for AZ::Events
|
||||
void TranslateAZEvents();
|
||||
|
||||
//! Generate the translation data for all ScriptCanvas::Node types
|
||||
void TranslateNodes();
|
||||
|
||||
//! Generate the translation data for the specified TypeId (must inherit from ScriptCanvas::Node)
|
||||
void TranslateNode(const AZ::TypeId& nodeTypeId);
|
||||
|
||||
//! Generate the translation data for on-demand reflected types
|
||||
void TranslateOnDemandReflectedTypes(TranslationFormat& translationRoot);
|
||||
|
||||
//! Generates the translation data for all global properties and methods in the BehaviorContext
|
||||
void TranslateBehaviorGlobals();
|
||||
|
||||
//! Generates the translation data for the specified property in the BehaviorContext (global, by name)
|
||||
void TranslateBehaviorProperty(const AZStd::string& propertyName);
|
||||
|
||||
//! Generates the translation data for the specified property in the BehaviorContext
|
||||
void TranslateBehaviorProperty(const AZ::BehaviorProperty* behaviorProperty, const AZStd::string& className, const AZStd::string& context, Entry* entry = nullptr);
|
||||
|
||||
//! Generates a type map from reflected types that are suitable for BehaviorContext objects used by ScriptCanvas
|
||||
void TranslateDataTypes();
|
||||
|
||||
private:
|
||||
|
||||
//! Returns the entity for a valid AZ::Event
|
||||
AZ::Entity* GetAZEventNode(const AZ::BehaviorMethod& method);
|
||||
|
||||
//! Utility to populate a BehaviorMethod's translation data
|
||||
void TranslateMethod(AZ::BehaviorMethod* behaviorMethod, Method& methodEntry);
|
||||
|
||||
//! Generates the translation data for a BehaviorEBus that has an BehaviorEBusHandler
|
||||
bool TranslateEBusHandler(const AZ::BehaviorEBus* behaviorEbus, TranslationFormat& translationRoot);
|
||||
|
||||
//! Utility function that saves a TranslationFormat object in the desired JSON format
|
||||
void SaveJSONData(const AZStd::string& filename, TranslationFormat& translationRoot);
|
||||
|
||||
//! Utility function that splits camel-case syntax string into separate words
|
||||
void SplitCamelCase(AZStd::string&);
|
||||
|
||||
//! Evaluates if the specified object has exclusion flags and should be skipped from generation
|
||||
template <typename T>
|
||||
bool ShouldSkip(const T* object) const
|
||||
{
|
||||
using namespace AZ::Script::Attributes;
|
||||
|
||||
// Check for "ignore" attribute for ScriptCanvas
|
||||
const auto& excludeClassAttributeData = azdynamic_cast<AZ::Edit::AttributeData<ExcludeFlags>*>(AZ::FindAttribute(ExcludeFrom, object->m_attributes));
|
||||
const bool excludeClass = excludeClassAttributeData && (static_cast<AZ::u64>(excludeClassAttributeData->Get(nullptr)) & static_cast<AZ::u64>(ExcludeFlags::List | ExcludeFlags::Documentation));
|
||||
|
||||
if (excludeClass)
|
||||
{
|
||||
return true; // skip this class
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
AZ::SerializeContext* m_serializeContext;
|
||||
AZ::BehaviorContext* m_behaviorContext;
|
||||
};
|
||||
|
||||
namespace Helpers
|
||||
{
|
||||
//! Generic function that fetches from a valid type that has attributes a string attribute
|
||||
template <typename T>
|
||||
AZStd::string GetStringAttribute(const T* source, const AZ::Crc32& attribute)
|
||||
{
|
||||
AZStd::string attributeValue = "";
|
||||
if (auto attributeItem = azrtti_cast<AZ::AttributeData<AZStd::string>*>(AZ::FindAttribute(attribute, source->m_attributes)))
|
||||
{
|
||||
attributeValue = attributeItem->Get(nullptr);
|
||||
}
|
||||
return attributeValue;
|
||||
}
|
||||
|
||||
//! Utility function that fetches from an AttributeArray a string attribute whether it's an AZStd::string or a const char*
|
||||
AZStd::string ReadStringAttribute(const AZ::AttributeArray& attributes, const AZ::Crc32& attribute);
|
||||
|
||||
//! Utility function to verify if a BehaviorMethod has the specified attribute
|
||||
bool MethodHasAttribute(const AZ::BehaviorMethod* method, AZ::Crc32 attribute);
|
||||
|
||||
//! Utility function to find a valid name from the ClassData/EditContext
|
||||
void GetTypeNameAndDescription(AZ::TypeId typeId, AZStd::string& outName, AZStd::string& outDescription);
|
||||
|
||||
//! Utility function to get the path to the specified gem
|
||||
AZStd::string GetGemPath(const AZStd::string& gemName);
|
||||
|
||||
//! Get the category attribute for a given ClassData
|
||||
AZStd::string GetCategory(const AZ::SerializeContext::ClassData* classData);
|
||||
|
||||
//! Get the category for a ScriptCanvas node library
|
||||
AZStd::string GetLibraryCategory(const AZ::SerializeContext& serializeContext, const AZStd::string& nodeName);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
#
|
||||
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
#
|
||||
#
|
||||
|
||||
set(FILES
|
||||
Tools/TranslationGeneration.h
|
||||
Tools/TranslationGeneration.cpp
|
||||
)
|
||||
Reference in New Issue
Block a user