You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
4.9 KiB
C++
134 lines
4.9 KiB
C++
/*
|
|
* 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
|
|
*
|
|
*/
|
|
|
|
#include "NodeUtils.h"
|
|
|
|
#include <GraphCanvas/Components/Nodes/NodeBus.h>
|
|
#include <GraphCanvas/Components/Slots/SlotBus.h>
|
|
#include <GraphCanvas/Components/DynamicOrderingDynamicSlotComponent.h>
|
|
|
|
#include <ScriptCanvas/Core/PureData.h>
|
|
#include <ScriptCanvas/Core/NodeBus.h>
|
|
|
|
namespace
|
|
{
|
|
void CopyTranslationKeyedNameToDatumLabel(ScriptCanvas::PureData* node,
|
|
const GraphCanvas::TranslationKeyedString& name)
|
|
{
|
|
ScriptCanvas::SlotId slotId = node->GetSlotId(ScriptCanvas::PureData::k_setThis);
|
|
if (!slotId.IsValid())
|
|
{
|
|
return;
|
|
}
|
|
|
|
ScriptCanvas::ModifiableDatumView datumView;
|
|
node->FindModifiableDatumView(slotId, datumView);
|
|
|
|
datumView.RelabelDatum(name.GetDisplayString());
|
|
}
|
|
|
|
ScriptCanvas::ConnectionType ToScriptCanvasConnectionType(GraphCanvas::ConnectionType connectionType)
|
|
{
|
|
ScriptCanvas::ConnectionType scriptCanvasConnectionType = ScriptCanvas::ConnectionType::Unknown;
|
|
switch (connectionType)
|
|
{
|
|
case GraphCanvas::CT_Input:
|
|
scriptCanvasConnectionType = ScriptCanvas::ConnectionType::Input;
|
|
break;
|
|
case GraphCanvas::CT_Output:
|
|
scriptCanvasConnectionType = ScriptCanvas::ConnectionType::Output;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return scriptCanvasConnectionType;
|
|
}
|
|
}
|
|
|
|
namespace ScriptCanvasEditor::Nodes
|
|
{
|
|
void CopyTranslationKeyedNameToDatumLabel(const AZ::EntityId& graphCanvasNodeId,
|
|
ScriptCanvas::SlotId scSlotId,
|
|
const AZ::EntityId& graphCanvasSlotId)
|
|
{
|
|
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();
|
|
if (scNodeEntityId.IsValid())
|
|
{
|
|
ScriptCanvas::ModifiableDatumView datumView;
|
|
ScriptCanvas::NodeRequestBus::Event(scNodeEntityId, &ScriptCanvas::NodeRequests::FindModifiableDatumView, scSlotId, datumView);
|
|
|
|
datumView.RelabelDatum(name.GetDisplayString());
|
|
}
|
|
}
|
|
|
|
void CopySlotTranslationKeyedNamesToDatums(AZ::EntityId graphCanvasNodeId)
|
|
{
|
|
AZStd::vector<AZ::EntityId> graphCanvasSlotIds;
|
|
GraphCanvas::NodeRequestBus::EventResult(graphCanvasSlotIds, graphCanvasNodeId, &GraphCanvas::NodeRequests::GetSlotIds);
|
|
for (AZ::EntityId graphCanvasSlotId : graphCanvasSlotIds)
|
|
{
|
|
AZStd::any* slotUserData{};
|
|
GraphCanvas::SlotRequestBus::EventResult(slotUserData, graphCanvasSlotId, &GraphCanvas::SlotRequests::GetUserData);
|
|
|
|
if (auto scriptCanvasSlotId = AZStd::any_cast<ScriptCanvas::SlotId>(slotUserData))
|
|
{
|
|
CopyTranslationKeyedNameToDatumLabel(graphCanvasNodeId, *scriptCanvasSlotId, graphCanvasSlotId);
|
|
}
|
|
}
|
|
}
|
|
|
|
//////////////////////
|
|
// 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 {};
|
|
}
|
|
}
|