Merged stabilization/2106 -> development (resolved merge conflicts).

Signed-off-by: Chris Galvan <chgalvan@amazon.com>
This commit is contained in:
Chris Galvan
2021-07-08 13:56:47 -05:00
489 changed files with 1685 additions and 13777 deletions
@@ -1,157 +0,0 @@
/*
* 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 "precompiled.h"
#include <ScriptCanvas/Assets/Functions/ScriptCanvasFunctionAssetHandler.h>
#include <ScriptCanvas/Asset/RuntimeAsset.h>
#include <ScriptCanvas/Bus/ScriptCanvasBus.h>
#include <Core/ScriptCanvasBus.h>
#include <ScriptCanvas/Components/EditorGraph.h>
#include <ScriptCanvas/Components/EditorScriptCanvasComponent.h>
#include <ScriptCanvas/Components/EditorGraphVariableManagerComponent.h>
#include <GraphCanvas/GraphCanvasBus.h>
#include <AzCore/IO/GenericStreams.h>
#include <AzCore/IO/FileIO.h>
#include <AzCore/Serialization/Utils.h>
#include <AzCore/Serialization/SerializeContext.h>
#include <AzCore/Component/ComponentApplicationBus.h>
#include <AzCore/Component/Entity.h>
#include <AzCore/std/string/string_view.h>
#include <AzFramework/StringFunc/StringFunc.h>
#include <AzToolsFramework/API/EditorAssetSystemAPI.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
namespace ScriptCanvasEditor
{
ScriptCanvasFunctionAssetHandler::ScriptCanvasFunctionAssetHandler(AZ::SerializeContext* context)
: ScriptCanvasAssetHandler(context)
{
AZ::AssetTypeInfoBus::MultiHandler::BusConnect(azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>());
}
ScriptCanvasFunctionAssetHandler::~ScriptCanvasFunctionAssetHandler()
{
AZ::AssetTypeInfoBus::MultiHandler::BusDisconnect();
}
AZ::Data::AssetPtr ScriptCanvasFunctionAssetHandler::CreateAsset(const AZ::Data::AssetId& id, const AZ::Data::AssetType& type)
{
AZ_UNUSED(type);
ScriptCanvasEditor::ScriptCanvasFunctionAsset* assetData = aznew ScriptCanvasEditor::ScriptCanvasFunctionAsset(id);
AZ::Entity* scriptCanvasEntity = aznew AZ::Entity(ScriptCanvas::AssetDescription::GetEntityName<ScriptCanvasEditor::ScriptCanvasFunctionAsset>());
SystemRequestBus::Broadcast(&SystemRequests::CreateEditorComponentsOnEntity, scriptCanvasEntity, azrtti_typeid<ScriptCanvas::SubgraphInterfaceAsset>());
assetData->m_cachedComponent = scriptCanvasEntity->CreateComponent<ScriptCanvasEditor::ScriptCanvasFunctionDataComponent>();
assetData->SetScriptCanvasEntity(scriptCanvasEntity);
return assetData;
}
AZ::Data::AssetHandler::LoadResult ScriptCanvasFunctionAssetHandler::LoadAssetData(
const AZ::Data::Asset<AZ::Data::AssetData>& asset,
AZStd::shared_ptr<AZ::Data::AssetDataStream> stream,
const AZ::Data::AssetFilterCB& assetLoadFilterCB)
{
ScriptCanvasEditor::ScriptCanvasFunctionAsset* scriptCanvasAsset = asset.GetAs<ScriptCanvasEditor::ScriptCanvasFunctionAsset>();
AZ_Assert(m_serializeContext, "ScriptCanvasFunctionAssetHandler needs to be initialized with a SerializeContext");
if (scriptCanvasAsset)
{
stream->Seek(0U, AZ::IO::GenericStream::ST_SEEK_BEGIN);
bool loadSuccess = AZ::Utils::LoadObjectFromStreamInPlace(*stream, scriptCanvasAsset->GetScriptCanvasData(), m_serializeContext, AZ::ObjectStream::FilterDescriptor(assetLoadFilterCB, AZ::ObjectStream::FILTERFLAG_IGNORE_UNKNOWN_CLASSES));
if (loadSuccess)
{
scriptCanvasAsset->m_cachedComponent = scriptCanvasAsset->GetScriptCanvasData().GetScriptCanvasEntity()->FindComponent<ScriptCanvasEditor::ScriptCanvasFunctionDataComponent>();
}
return loadSuccess ? AZ::Data::AssetHandler::LoadResult::LoadComplete : AZ::Data::AssetHandler::LoadResult::Error;
}
return AZ::Data::AssetHandler::LoadResult::Error;
}
bool ScriptCanvasFunctionAssetHandler::SaveAssetData(const AZ::Data::Asset<AZ::Data::AssetData>& asset, AZ::IO::GenericStream* stream)
{
return SaveAssetData(asset.GetAs<ScriptCanvasEditor::ScriptCanvasFunctionAsset>(), stream);
}
bool ScriptCanvasFunctionAssetHandler::SaveAssetData(const ScriptCanvasEditor::ScriptCanvasFunctionAsset* assetData, AZ::IO::GenericStream* stream)
{
return SaveAssetData(assetData, stream, AZ::DataStream::ST_XML);
}
bool ScriptCanvasFunctionAssetHandler::SaveAssetData(const ScriptCanvasEditor::ScriptCanvasFunctionAsset* assetData, AZ::IO::GenericStream* stream, AZ::DataStream::StreamType streamType)
{
if (assetData && m_serializeContext)
{
AZStd::vector<char> byteBuffer;
AZ::IO::ByteContainerStream<decltype(byteBuffer)> byteStream(&byteBuffer);
AZ::ObjectStream* objStream = AZ::ObjectStream::Create(&byteStream, *m_serializeContext, streamType);
const ScriptCanvas::ScriptCanvasData& functionData = assetData->GetScriptCanvasData();
bool assetSaved = objStream->WriteClass(&functionData);
objStream->Finalize();
assetSaved = stream->Write(byteBuffer.size(), byteBuffer.data()) == byteBuffer.size() && assetSaved;
return assetSaved;
}
return false;
}
AZ::Data::AssetType ScriptCanvasFunctionAssetHandler::GetAssetType() const
{
return ScriptCanvasFunctionAssetHandler::GetAssetTypeStatic();
}
const char* ScriptCanvasFunctionAssetHandler::GetAssetTypeDisplayName() const
{
return ScriptCanvas::AssetDescription::GetAssetTypeDisplayName<ScriptCanvasEditor::ScriptCanvasFunctionAsset>();
}
bool ScriptCanvasFunctionAssetHandler::CanCreateComponent([[maybe_unused]] const AZ::Data::AssetId& assetId) const
{
return false;
}
void ScriptCanvasFunctionAssetHandler::GetAssetTypeExtensions(AZStd::vector<AZStd::string>& extensions)
{
const AZ::Uuid& assetType = *AZ::AssetTypeInfoBus::GetCurrentBusId();
if (assetType == AZ::AzTypeInfo<ScriptCanvasEditor::ScriptCanvasFunctionAsset>::Uuid())
{
extensions.push_back(ScriptCanvas::AssetDescription::GetExtension<ScriptCanvasEditor::ScriptCanvasFunctionAsset>());
}
}
void ScriptCanvasFunctionAssetHandler::GetHandledAssetTypes(AZStd::vector<AZ::Data::AssetType>& assetTypes)
{
assetTypes.push_back(AZ::AzTypeInfo<ScriptCanvasEditor::ScriptCanvasFunctionAsset>::Uuid());
}
AZ::Data::AssetType ScriptCanvasFunctionAssetHandler::GetAssetTypeStatic()
{
return azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>();
}
const char* ScriptCanvasFunctionAssetHandler::GetGroup() const
{
return ScriptCanvas::AssetDescription::GetGroup<ScriptCanvasEditor::ScriptCanvasFunctionAsset>();
}
const char* ScriptCanvasFunctionAssetHandler::GetBrowserIcon() const
{
return ScriptCanvas::AssetDescription::GetIconPath<ScriptCanvasEditor::ScriptCanvasFunctionAsset>();
}
}
@@ -1,201 +0,0 @@
/*
* 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 "precompiled.h"
#include <LyViewPaneNames.h>
#include <Editor/Assets/Functions/ScriptCanvasFunctionAssetHolder.h>
#include <ScriptCanvas/Asset/AssetRegistry.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <ScriptCanvas/Assets/ScriptCanvasAssetHandler.h>
#include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
#include <ScriptCanvas/Bus/RequestBus.h>
#include <ScriptCanvas/Bus/ScriptCanvasBus.h>
#include <ScriptCanvas/Core/ScriptCanvasBus.h>
#include <AzCore/Serialization/EditContext.h>
#include <AzCore/Component/ComponentApplicationBus.h>
#include <AzCore/Serialization/IdUtils.h>
#include <AzCore/Asset/AssetManager.h>
#include <AzToolsFramework/API/ToolsApplicationAPI.h>
namespace ScriptCanvasEditor
{
//=========================================================================
void ScriptCanvasFunctionAssetHolder::Reflect(AZ::ReflectContext* context)
{
if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<ScriptCanvasFunctionAssetHolder>()
->Version(1)
->Field("m_asset", &ScriptCanvasFunctionAssetHolder::m_scriptCanvasAssetId)
;
if (AZ::EditContext* editContext = serializeContext->GetEditContext())
{
editContext->Class<ScriptCanvasFunctionAssetHolder>("Script Canvas", "Script Canvas Function Asset Holder")
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasFunctionAssetHolder::m_scriptCanvasAssetId, "Script Canvas Function Asset", "Script Canvas asset associated with this component")
->Attribute(AZ::Edit::Attributes::ChangeNotify, &ScriptCanvasFunctionAssetHolder::OnScriptChanged)
->Attribute("EditButton", "Editor/Icons/PropertyEditor/open_in.png")
->Attribute("EditDescription", "Open in Script Canvas Editor")
->Attribute("EditCallback", &ScriptCanvasFunctionAssetHolder::LaunchScriptCanvasEditor)
;
}
}
}
ScriptCanvasFunctionAssetHolder::ScriptCanvasFunctionAssetHolder(AZ::Data::AssetId assetId, const ScriptChangedCB& scriptChangedCB)
: m_scriptCanvasAssetId(assetId)
, m_scriptNotifyCallback(scriptChangedCB)
{
}
ScriptCanvasFunctionAssetHolder::~ScriptCanvasFunctionAssetHolder()
{
AZ::Data::AssetBus::Handler::BusDisconnect();
}
void ScriptCanvasFunctionAssetHolder::Init(AZ::EntityId ownerId)
{
m_ownerId = ownerId;
if (m_scriptCanvasAssetId.IsValid())
{
AZ::Data::AssetBus::Handler::BusDisconnect();
AZ::Data::AssetBus::Handler::BusConnect(m_scriptCanvasAssetId);
}
}
void ScriptCanvasFunctionAssetHolder::LaunchScriptCanvasEditor(const AZ::Data::AssetId&, const AZ::Data::AssetType&) const
{
OpenEditor();
}
void ScriptCanvasFunctionAssetHolder::OpenEditor() const
{
AzToolsFramework::OpenViewPane(LyViewPane::ScriptCanvas);
AZ::Outcome<int, AZStd::string> openOutcome = AZ::Failure(AZStd::string());
if (m_scriptCanvasAssetId.IsValid())
{
GeneralRequestBus::BroadcastResult(openOutcome, &GeneralRequests::OpenScriptCanvasAsset, m_scriptCanvasAssetId, -1);
if (!openOutcome)
{
AZ_Warning("Script Canvas", openOutcome, "%s", openOutcome.GetError().data());
}
}
else if (m_ownerId.IsValid())
{
AzToolsFramework::EntityIdList selectedEntityIds;
AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(selectedEntityIds, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities);
// Going to bypass the multiple selected entities flow for right now.
if (selectedEntityIds.size() == 1)
{
GeneralRequestBus::Broadcast(&GeneralRequests::CreateScriptCanvasAssetFor, m_ownerId);
}
}
}
AZ::EntityId ScriptCanvasFunctionAssetHolder::GetGraphId() const
{
AZ::EntityId graphId;
if (m_scriptCanvasAsset.IsReady())
{
ScriptCanvas::SystemRequestBus::BroadcastResult(graphId, &ScriptCanvas::SystemRequests::FindGraphId, m_scriptCanvasAsset.Get()->GetScriptCanvasEntity());
}
return graphId;
}
void ScriptCanvasFunctionAssetHolder::SetScriptChangedCB(const ScriptChangedCB& scriptChangedCB)
{
m_scriptNotifyCallback = scriptChangedCB;
}
void ScriptCanvasFunctionAssetHolder::Load(bool loadBlocking)
{
if (!m_scriptCanvasAsset.IsReady())
{
AZ::Data::AssetInfo assetInfo;
AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, m_scriptCanvasAsset.GetId());
if (assetInfo.m_assetId.IsValid())
{
const AZ::Data::AssetType assetTypeId = azrtti_typeid<ScriptCanvasAsset>();
auto& assetManager = AZ::Data::AssetManager::Instance();
m_scriptCanvasAsset = assetManager.GetAsset(m_scriptCanvasAsset.GetId(), azrtti_typeid<ScriptCanvasAsset>(), true, nullptr, loadBlocking);
}
}
}
AZ::u32 ScriptCanvasFunctionAssetHolder::OnScriptChanged()
{
SetAsset(m_scriptCanvasAsset.GetId());
Load(false);
if (m_scriptNotifyCallback)
{
m_scriptNotifyCallback(m_scriptCanvasAsset);
}
return AZ::Edit::PropertyRefreshLevels::EntireTree;
}
void ScriptCanvasFunctionAssetHolder::OnAssetReady(AZ::Data::Asset<AZ::Data::AssetData> asset)
{
SetAsset(asset.GetId());
EditorScriptCanvasAssetNotificationBus::Event(m_scriptCanvasAsset.GetId(), &EditorScriptCanvasAssetNotifications::OnScriptCanvasAssetReady, m_scriptCanvasAsset);
}
void ScriptCanvasFunctionAssetHolder::OnAssetReloaded(AZ::Data::Asset<AZ::Data::AssetData> asset)
{
SetAsset(asset.GetId());
EditorScriptCanvasAssetNotificationBus::Event(m_scriptCanvasAsset.GetId(), &EditorScriptCanvasAssetNotifications::OnScriptCanvasAssetReloaded, m_scriptCanvasAsset);
}
void ScriptCanvasFunctionAssetHolder::OnAssetUnloaded(const AZ::Data::AssetId assetId, const AZ::Data::AssetType)
{
EditorScriptCanvasAssetNotificationBus::Event(assetId, &EditorScriptCanvasAssetNotifications::OnScriptCanvasAssetUnloaded, assetId);
}
void ScriptCanvasFunctionAssetHolder::OnAssetSaved(AZ::Data::Asset<AZ::Data::AssetData> asset, bool isSuccessful)
{
SetAsset(asset.GetId());
auto currentBusId = AZ::Data::AssetBus::GetCurrentBusId();
if (currentBusId)
{
EditorScriptCanvasAssetNotificationBus::Event(*currentBusId, &EditorScriptCanvasAssetNotifications::OnScriptCanvasAssetSaved, asset.GetId());
}
}
void ScriptCanvasFunctionAssetHolder::SetAsset(AZ::Data::AssetId assetId)
{
m_scriptCanvasAssetId = assetId;
if (!AZ::Data::AssetBus::Handler::BusIsConnectedId(m_scriptCanvasAssetId))
{
AZ::Data::AssetBus::Handler::BusDisconnect();
if (m_scriptCanvasAssetId.IsValid())
{
AZ::Data::AssetBus::Handler::BusConnect(m_scriptCanvasAssetId);
}
}
}
//AZ::Data::Asset<ScriptCanvasAsset> ScriptCanvasFunctionAssetHolder::GetAsset() const
//{
// return m_scriptCanvasAsset;
//}
AZ::Data::AssetId ScriptCanvasFunctionAssetHolder::GetAssetId() const
{
return m_scriptCanvasAssetId;
}
}
@@ -1,75 +0,0 @@
/*
* 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/Component/EntityId.h>
#include <AzCore/Asset/AssetCommon.h>
namespace ScriptCanvas
{
class ScriptCanvasFunctionAsset;
}
namespace ScriptCanvasEditor
{
class ScriptCanvasFunctionAsset;
/*! ScriptCanvasAssetHolder
Wraps a ScriptCanvasAsset reference and registers for the individual AssetBus events
for saving, loading and unloading the asset.
The ScriptCanvasAsset Holder contains functionality for activating the ScriptCanvasEntity stored on the reference asset
as well as attempting to open the ScriptCanvasAsset within the ScriptCanvas Editor.
It also provides the EditContext reflection for opening the asset in the ScriptCanvas Editor via a button
*/
class ScriptCanvasFunctionAssetHolder
: private AZ::Data::AssetBus::Handler
{
public:
AZ_RTTI(ScriptCanvasFunctionAssetHolder, "{21693AFA-5664-4AAE-9213-8B944A398BA1}");
AZ_CLASS_ALLOCATOR(ScriptCanvasFunctionAssetHolder, AZ::SystemAllocator, 0);
using ScriptChangedCB = AZStd::function<void(const AZ::Data::Asset<ScriptCanvasAsset>&)>;
ScriptCanvasFunctionAssetHolder() = default;
ScriptCanvasFunctionAssetHolder(AZ::Data::AssetId assetId, const ScriptChangedCB& = {});
~ScriptCanvasFunctionAssetHolder() override;
static void Reflect(AZ::ReflectContext* context);
void Init(AZ::EntityId ownerId = AZ::EntityId());
void SetAsset(AZ::Data::AssetId assetId);
AZ::Data::AssetId GetAssetId() const;
AZ::EntityId GetGraphId() const;
void LaunchScriptCanvasEditor(const AZ::Data::AssetId&, const AZ::Data::AssetType&) const;
void OpenEditor() const;
void SetScriptChangedCB(const ScriptChangedCB&);
void Load(bool loadBlocking = false);
protected:
//=====================================================================
// AZ::Data::AssetBus
void OnAssetReady(AZ::Data::Asset<AZ::Data::AssetData> asset) override;
void OnAssetReloaded(AZ::Data::Asset<AZ::Data::AssetData> asset) override;
void OnAssetUnloaded(const AZ::Data::AssetId assetId, const AZ::Data::AssetType assetType) override;
void OnAssetSaved(AZ::Data::Asset<AZ::Data::AssetData> asset, bool isSuccessful) override;
//=====================================================================
//! Reloads the Script From the AssetData if it has changed
AZ::u32 OnScriptChanged();
AZ::Data::AssetId m_scriptCanvasAssetId;
AZ::Data::Asset<ScriptCanvas::ScriptCanvasFunctionAsset> m_scriptCanvasAsset;
AZ::EntityId m_ownerId; // Id of Entity which stores this AssetHolder object
ScriptChangedCB m_scriptNotifyCallback;
};
}
@@ -8,7 +8,6 @@
#include <Editor/Assets/ScriptCanvasAssetHelpers.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
namespace ScriptCanvasEditor
@@ -149,37 +148,13 @@ namespace ScriptCanvasEditor
}
bool IsValidSourceFile(const AZStd::string& filePath, ScriptCanvas::ScriptCanvasId scriptCanvasId)
bool IsValidSourceFile(const AZStd::string& filePath, [[maybe_unused]] ScriptCanvas::ScriptCanvasId scriptCanvasId)
{
bool isValidSourceFile = true;
if (scriptCanvasId.IsValid())
ScriptCanvasAssetDescription assetDescription;
return AZ::StringFunc::EndsWith(filePath, assetDescription.GetExtensionImpl(), false);
{
bool isRuntimeGraph = false;
EditorGraphRequestBus::EventResult(isRuntimeGraph, scriptCanvasId, &EditorGraphRequests::IsRuntimeGraph);
if (isRuntimeGraph)
{
ScriptCanvasAssetDescription assetDescription;
if (!AZ::StringFunc::EndsWith(filePath, assetDescription.GetExtensionImpl(), false))
{
isValidSourceFile = false;
}
}
// Assume it's a function for now
else
{
ScriptCanvasEditor::ScriptCanvasFunctionDescription assetDescription;
if (!AZ::StringFunc::EndsWith(filePath, assetDescription.GetExtensionImpl(), false))
{
isValidSourceFile = false;
}
}
return true;
}
return isValidSourceFile;
}
}
}
@@ -1,154 +0,0 @@
/*
* 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 "precompiled.h"
#include <AzCore/Component/Entity.h>
#include <AzCore/Serialization/IdUtils.h>
#include <Editor/Assets/ScriptCanvasAssetInstance.h>
namespace ScriptCanvasEditor
{
ScriptCanvasAssetInstance::~ScriptCanvasAssetInstance()
{
}
void ScriptCanvasAssetInstance::Reflect(AZ::ReflectContext* context)
{
if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<ScriptCanvasAssetInstance>()
// TODO: This results in more data being saved per instance, but is needed to make Id remapping transparent.
// Allow a way to enumerate the elements for Id Remapping, while disallowing serialization
->Field("m_data", &ScriptCanvasAssetInstance::m_scriptCanvasData)
->Field("m_assetRef", &ScriptCanvasAssetInstance::m_assetRef)
->Field("m_entityInstanceMap", &ScriptCanvasAssetInstance::m_baseToInstanceMap)
->Field("m_dataFlags", &ScriptCanvasAssetInstance::m_entityToDataFlags)
->Field("m_dataPatch", &ScriptCanvasAssetInstance::m_dataPatch)
;
}
}
ScriptCanvasAssetReference& ScriptCanvasAssetInstance::GetReference()
{
return m_assetRef;
}
const ScriptCanvasAssetReference& ScriptCanvasAssetInstance::GetReference() const
{
return m_assetRef;
}
ScriptCanvas::ScriptCanvasData& ScriptCanvasAssetInstance::GetScriptCanvasData()
{
return m_scriptCanvasData;
}
const ScriptCanvas::ScriptCanvasData& ScriptCanvasAssetInstance::GetScriptCanvasData() const
{
return m_scriptCanvasData;
}
void ScriptCanvasAssetInstance::ComputeDataPatch()
{
if (!m_assetRef.GetAsset().IsReady())
{
return;
}
ScriptCanvas::ScriptCanvasData& baseData = m_assetRef.GetAsset().Get()->GetScriptCanvasData();
AZ::SerializeContext* serializeContext{};
AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext);
decltype(m_baseToInstanceMap) entityIdReverseLookUp;
for (const auto& baseToInstancePair : m_baseToInstanceMap)
{
entityIdReverseLookUp.emplace(baseToInstancePair.second, baseToInstancePair.first);
}
// remap entity ids to the "original"
AZ::IdUtils::Remapper<AZ::EntityId>::ReplaceIdsAndIdRefs(&m_scriptCanvasData, [&entityIdReverseLookUp](AZ::EntityId sourceId, [[maybe_unused]] bool isEntityId, const AZ::IdUtils::Remapper<AZ::EntityId>::IdGenerator&) -> AZ::EntityId
{
auto findIt = entityIdReverseLookUp.find(sourceId);
return findIt != entityIdReverseLookUp.end() ? findIt->second : sourceId;
}, serializeContext);
// compute the delta (what we changed from the base slice)
m_dataPatch.Create(&baseData, &m_scriptCanvasData, AZ::DataPatch::FlagsMap(), GetDataFlagsForPatching(), serializeContext);
// remap entity ids back to the "instance onces"
AZ::IdUtils::Remapper<AZ::EntityId>::ReplaceIdsAndIdRefs(&m_scriptCanvasData, [this](AZ::EntityId sourceId, [[maybe_unused]] bool isEntityId, const AZ::IdUtils::Remapper<AZ::EntityId>::IdGenerator&) -> AZ::EntityId {
auto findIt = m_baseToInstanceMap.find(sourceId);
return findIt != m_baseToInstanceMap.end() ? findIt->second : sourceId;
}, serializeContext);
}
void ScriptCanvasAssetInstance::ApplyDataPatch()
{
if (!m_assetRef.GetAsset().IsReady())
{
return;
}
ScriptCanvas::ScriptCanvasData& baseData = m_assetRef.GetAsset().Get()->GetScriptCanvasData();
AZ::SerializeContext* serializeContext{};
AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext);
// An empty map indicates its a fresh instance (i.e. has never be instantiated and then serialized).
if (m_baseToInstanceMap.empty())
{
// Generate new Ids and populate the map.
AZ_Assert(!m_dataPatch.IsValid(), "Data patch is valid for scene slice instance, but base scene to instantiated scene Id map is not!");
serializeContext->CloneObjectInplace(m_scriptCanvasData, &baseData);
AZ::IdUtils::Remapper<AZ::EntityId>::GenerateNewIdsAndFixRefs(&m_scriptCanvasData, m_baseToInstanceMap);
}
else
{
// Clone entities while applying any data patches.
AZ_Assert(m_dataPatch.IsValid(), "Data patch is not valid for existing scene slice instance!");
ScriptCanvas::ScriptCanvasData* patchedSceneData = m_dataPatch.Apply(&baseData, serializeContext);
// Remap Ids & references.
AZ::IdUtils::Remapper<AZ::EntityId>::GenerateNewIdsAndFixRefs(patchedSceneData, m_baseToInstanceMap);
serializeContext->CloneObjectInplace(m_scriptCanvasData, patchedSceneData);
}
}
AZ::DataPatch::FlagsMap ScriptCanvasAssetInstance::GetDataFlagsForPatching() const
{
// Collect all entities' data flags
AZ::DataPatch::FlagsMap dataFlags;
for (auto& baseIdInstanceIdPair : m_baseToInstanceMap)
{
// Make the addressing relative to InstantiatedContainer (m_dataFlags stores flags relative to the individual entity)
AZ::DataPatch::AddressType addressPrefix;
addressPrefix.push_back(AZ_CRC("Entities", 0x50ec64e5));
addressPrefix.push_back(static_cast<AZ::u64>(baseIdInstanceIdPair.first));
auto findIt = m_entityToDataFlags.find(baseIdInstanceIdPair.second);
if (findIt != m_entityToDataFlags.end())
{
for (auto& addressDataFlagsPair : findIt->second)
{
const AZ::DataPatch::AddressType& originalAddress = addressDataFlagsPair.first;
AZ::DataPatch::AddressType prefixedAddress;
prefixedAddress.reserve(addressPrefix.size() + originalAddress.size());
prefixedAddress.insert(prefixedAddress.end(), addressPrefix.begin(), addressPrefix.end());
prefixedAddress.insert(prefixedAddress.end(), originalAddress.begin(), originalAddress.end());
dataFlags.emplace(AZStd::move(prefixedAddress), addressDataFlagsPair.second);
}
}
}
return dataFlags;
}
}
@@ -1,46 +0,0 @@
/*
* 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 <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <Editor/Assets/ScriptCanvasAssetReference.h>
namespace ScriptCanvasEditor
{
class ScriptCanvasAssetInstance
{
public:
AZ_TYPE_INFO(ScriptCanvasAssetInstance, "{96B16AAB-DB63-4D32-9FC9-7A5DE440B0B7}");
AZ_CLASS_ALLOCATOR(ScriptCanvasAssetInstance, AZ::SystemAllocator, 0);
ScriptCanvasAssetInstance() = default;
~ScriptCanvasAssetInstance();
static void Reflect(AZ::ReflectContext* context);
const AZStd::unordered_map<AZ::EntityId, AZ::EntityId>& GetBaseToInstanceMap() const { return m_baseToInstanceMap; }
ScriptCanvasAssetReference& GetReference();
const ScriptCanvasAssetReference& GetReference() const;
ScriptCanvas::ScriptCanvasData& GetScriptCanvasData();
const ScriptCanvas::ScriptCanvasData& GetScriptCanvasData() const;
void ComputeDataPatch();
void ApplyDataPatch();
private:
ScriptCanvasAssetInstance(const ScriptCanvasAssetInstance&) = delete;
AZ::DataPatch::FlagsMap GetDataFlagsForPatching() const;
ScriptCanvas::ScriptCanvasData m_scriptCanvasData;
ScriptCanvasAssetReference m_assetRef;
AZStd::unordered_map<AZ::EntityId, AZ::EntityId> m_baseToInstanceMap;
AZStd::unordered_map<AZ::EntityId, AZ::DataPatch::FlagsMap> m_entityToDataFlags;
AZ::DataPatch m_dataPatch;
bool m_canApplyPatch;
};
}
@@ -1,57 +0,0 @@
/*
* 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 "precompiled.h"
#include <AzCore/Serialization/IdUtils.h>
#include <Editor/Assets/ScriptCanvasAssetReference.h>
#include <Editor/Assets/ScriptCanvasAssetReferenceContainer.h>
namespace ScriptCanvasEditor
{
void ScriptCanvasAssetReference::Reflect(AZ::ReflectContext* context)
{
if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<ScriptCanvasAssetReference>()
->DataContainer<ScriptCanvasAssetReferenceContainer>()
;
}
}
ScriptCanvasAssetReference::ScriptCanvasAssetReference(AZ::Data::Asset<ScriptCanvasAsset> sliceAsset, bool storeInObjectStream)
{
SetAsset(sliceAsset);
SetAssetDataStoredInternally(storeInObjectStream);
}
void ScriptCanvasAssetReference::SetAsset(AZ::Data::Asset<ScriptCanvasAsset> sliceAsset)
{
m_asset = sliceAsset;
}
const AZ::Data::Asset<ScriptCanvasAsset>& ScriptCanvasAssetReference::GetAsset() const
{
return m_asset;
}
AZ::Data::Asset<ScriptCanvasAsset>& ScriptCanvasAssetReference::GetAsset()
{
return m_asset;
}
void ScriptCanvasAssetReference::SetAssetDataStoredInternally(bool storeInObjectStream)
{
m_storeInObjectStream = storeInObjectStream;
}
bool ScriptCanvasAssetReference::GetAssetDataStoredInternally() const
{
return m_storeInObjectStream;
}
}
@@ -1,70 +0,0 @@
/*
* 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/Serialization/DataPatch.h>
#include <AzCore/Asset/AssetCommon.h>
namespace ScriptCanvas
{
class ScriptCanvasData;
}
namespace ScriptCanvasEditor
{
class ScriptCanvasAsset;
class ScriptCanvasAssetReference
{
public:
AZ_TYPE_INFO(ScriptCanvasAssetReference, "{C1B24507-887C-4E20-A259-BFEEDD7EDF9D}");
AZ_CLASS_ALLOCATOR(ScriptCanvasAssetReference, AZ::SystemAllocator, 0);
ScriptCanvasAssetReference() = default;
ScriptCanvasAssetReference(AZ::Data::Asset<ScriptCanvasAsset> scriptCanvasAsset, bool storeInObjectStream = false);
static void Reflect(AZ::ReflectContext* context);
/*!
\param scriptCanvasAsset asset reference to store
\param storeInObjectStream bool which determines if the asset data will serialized out as part of the ObjectStream when serializing
*/
void SetAsset(AZ::Data::Asset<ScriptCanvasAsset> scriptCanvasAsset);
const AZ::Data::Asset<ScriptCanvasAsset>& GetAsset() const;
AZ::Data::Asset<ScriptCanvasAsset>& GetAsset();
/*!
\param storeInObjectStream bool which determines if the asset data will serialized out as part of the ObjectStream when serializing
*/
void SetAssetDataStoredInternally(bool storeInObjectStream);
/*!
Indicates if this scriptCanvas reference contains an asset whose data is stored internally in this class.
\return true if the asset is asset data is serialize as part of this class object stream
*/
bool GetAssetDataStoredInternally() const;
private:
bool m_storeInObjectStream = false; ///< If true the asset data is stored in the object stream with this class
AZ::Data::Asset<ScriptCanvasAsset> m_asset;
friend class ScriptCanvasAssetReferenceContainer;
};
}
namespace AZStd
{
template<>
struct hash<ScriptCanvasEditor::ScriptCanvasAssetReference>
{
using argument_type = ScriptCanvasEditor::ScriptCanvasAssetReference;
using result_type = AZStd::size_t;
AZ_FORCE_INLINE size_t operator()(const argument_type& key) const
{
AZStd::hash<AZ::Data::AssetId> hasher;
return hasher(key.GetAsset().GetId());
}
};
}
@@ -1,234 +0,0 @@
/*
* 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/Asset/AssetManager.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <Editor/Assets/ScriptCanvasAssetReference.h>
namespace ScriptCanvasEditor
{
class ScriptCanvasAssetReferenceContainer
: public AZ::SerializeContext::IDataContainer
{
public:
ScriptCanvasAssetReferenceContainer()
{
m_storeInObjectStreamElement.m_name = "m_storeInObjectStream";
m_storeInObjectStreamElement.m_nameCrc = AZ_CRC("m_storeInObjectStream", 0xf5a45371);
m_storeInObjectStreamElement.m_typeId = azrtti_typeid<bool>();
m_storeInObjectStreamElement.m_offset = 0;
m_storeInObjectStreamElement.m_dataSize = sizeof(bool);
m_storeInObjectStreamElement.m_azRtti = nullptr;
m_storeInObjectStreamElement.m_genericClassInfo = AZ::SerializeGenericTypeInfo<bool>::GetGenericInfo();
m_storeInObjectStreamElement.m_editData = nullptr;
m_storeInObjectStreamElement.m_flags = 0;
m_assetElement.m_name = "m_asset";
m_assetElement.m_nameCrc = AZ_CRC("m_asset", 0x4e58e538);
m_assetElement.m_typeId = AZ::SerializeGenericTypeInfo<AZ::Data::Asset<ScriptCanvasAsset>>::GetClassTypeId();
m_assetElement.m_offset = m_storeInObjectStreamElement.m_dataSize;
m_assetElement.m_dataSize = sizeof(AZ::Data::Asset<ScriptCanvasAsset>);
m_assetElement.m_azRtti = AZ::GetRttiHelper<AZ::Data::Asset<ScriptCanvasAsset>>();
m_assetElement.m_genericClassInfo = AZ::SerializeGenericTypeInfo<AZ::Data::Asset<ScriptCanvasAsset>>::GetGenericInfo();
m_assetElement.m_editData = nullptr;
m_assetElement.m_flags = 0;
m_baseDataElement.m_name = "m_scriptCanvasData";
m_baseDataElement.m_nameCrc = AZ_CRC("m_scriptCanvasData", 0x78a93f93);
m_baseDataElement.m_typeId = AZ::SerializeGenericTypeInfo<ScriptCanvas::ScriptCanvasData>::GetClassTypeId();
m_baseDataElement.m_offset = m_assetElement.m_offset + m_assetElement.m_dataSize;
m_baseDataElement.m_dataSize = sizeof(ScriptCanvas::ScriptCanvasData);
m_baseDataElement.m_azRtti = AZ::GetRttiHelper<ScriptCanvas::ScriptCanvasData>();
m_baseDataElement.m_genericClassInfo = AZ::SerializeGenericTypeInfo<ScriptCanvas::ScriptCanvasData>::GetGenericInfo();
m_baseDataElement.m_editData = nullptr;
m_baseDataElement.m_flags = 0;
}
/// Null if element with this name can't be found.
const AZ::SerializeContext::ClassElement* GetElement(AZ::u32 elementNameCrc) const override
{
if (m_storeInObjectStreamElement.m_nameCrc == elementNameCrc)
{
return &m_storeInObjectStreamElement;
}
if (m_assetElement.m_nameCrc == elementNameCrc)
{
return &m_assetElement;
}
if (m_baseDataElement.m_nameCrc == elementNameCrc)
{
return &m_baseDataElement;
}
return nullptr;
}
bool GetElement(AZ::SerializeContext::ClassElement& classElement, const AZ::SerializeContext::DataElement& dataElement) const override
{
if (m_storeInObjectStreamElement.m_nameCrc == dataElement.m_nameCrc)
{
classElement = m_storeInObjectStreamElement;
return true;
}
if (m_assetElement.m_nameCrc == dataElement.m_nameCrc)
{
classElement = m_assetElement;
return true;
}
if (m_baseDataElement.m_nameCrc == dataElement.m_nameCrc)
{
classElement = m_baseDataElement;
return true;
}
return false;
}
/// Enumerate elements in the array.
void EnumElements(void* instance, const ElementCB& cb) override
{
auto assetRef = reinterpret_cast<ScriptCanvasAssetReference*>(instance);
if (!cb(&assetRef->m_storeInObjectStream, m_storeInObjectStreamElement.m_typeId, m_storeInObjectStreamElement.m_genericClassInfo ? m_storeInObjectStreamElement.m_genericClassInfo->GetClassData() : nullptr, &m_storeInObjectStreamElement))
{
return;
}
if (!cb(&assetRef->m_asset, m_assetElement.m_typeId, m_assetElement.m_genericClassInfo ? m_assetElement.m_genericClassInfo->GetClassData() : nullptr, &m_assetElement))
{
return;
}
if (assetRef->m_storeInObjectStream && assetRef->m_asset.Get())
{
cb(&assetRef->m_asset.Get()->GetScriptCanvasData(), m_baseDataElement.m_typeId, m_baseDataElement.m_genericClassInfo ? m_baseDataElement.m_genericClassInfo->GetClassData() : nullptr, &m_baseDataElement);
}
}
void EnumTypes(const ElementTypeCB& cb) override
{
cb(m_storeInObjectStreamElement.m_typeId, &m_storeInObjectStreamElement);
cb(m_assetElement.m_typeId, &m_assetElement);
cb(m_baseDataElement.m_typeId, &m_baseDataElement);
}
/// Return number of elements in the container.
size_t Size(void* instance) const override
{
auto assetRef = reinterpret_cast<ScriptCanvasAssetReference*>(instance);
return assetRef->m_storeInObjectStream && assetRef->m_asset.Get() ? m_numClassElements : m_numClassElements - 1;
}
/// Returns the capacity of the container. Returns 0 for objects without fixed capacity.
size_t Capacity(void*) const override
{
return m_numClassElements;
}
/// Returns true if elements pointers don't change on add/remove. If false you MUST enumerate all elements.
bool IsStableElements() const override { return true; }
/// Returns true if the container is fixed size, otherwise false.
bool IsFixedSize() const override { return false; }
/// Returns if the container is fixed capacity, otherwise false
bool IsFixedCapacity() const override { return true; }
/// Returns true if the container is a smart pointer.
bool IsSmartPointer() const override { return false; }
/// Returns true if elements can be retrieved by index.
bool CanAccessElementsByIndex() const override { return false; }
/// Reserve element
void* ReserveElement(void* instance, const AZ::SerializeContext::ClassElement* classElement) override
{
auto assetRef = reinterpret_cast<ScriptCanvasAssetReference*>(instance);
if (classElement->m_nameCrc == m_storeInObjectStreamElement.m_nameCrc)
{
return &assetRef->m_storeInObjectStream;
}
if (classElement->m_nameCrc == m_assetElement.m_nameCrc)
{
if (assetRef->m_storeInObjectStream)
{
assetRef->m_asset.SetFlags(static_cast<AZ::u8>(AZ::Data::AssetLoadBehavior::NoLoad));
}
return &assetRef->m_asset;
}
if (assetRef->m_storeInObjectStream && classElement->m_nameCrc == m_baseDataElement.m_nameCrc)
{
auto* scriptCanvasAsset = aznew ScriptCanvasAsset(assetRef->m_asset.GetId(), AZ::Data::AssetData::AssetStatus::Ready);
assetRef->m_asset = { scriptCanvasAsset, AZ::Data::AssetLoadBehavior::Default };
return &assetRef->m_asset.Get()->GetScriptCanvasData();
}
return instance;
}
/// Get an element's address by its index (called before the element is loaded).
void* GetElementByIndex(void*, const AZ::SerializeContext::ClassElement*, size_t) override
{
return nullptr;
}
/// Store element
void StoreElement(void* instance, void* element) override
{
auto assetRef = reinterpret_cast<ScriptCanvasAssetReference*>(instance);
if (assetRef->m_storeInObjectStream && assetRef->m_asset.Get() && element == &assetRef->m_asset.Get()->GetScriptCanvasData())
{
auto existingAsset = AZ::Data::AssetManager::Instance().FindAsset<ScriptCanvasAsset>(assetRef->m_asset.GetId(), assetRef->m_asset.GetAutoLoadBehavior());
if (existingAsset.IsReady())
{
assetRef->m_asset = existingAsset;
}
}
}
/// Remove element in the container.
bool RemoveElement(void* instance, const void* element, AZ::SerializeContext* deletePointerDataContext) override
{
if (deletePointerDataContext)
{
auto assetRef = reinterpret_cast<ScriptCanvasAssetReference*>(instance);
if (&assetRef->m_storeInObjectStream == element)
{
DeletePointerData(deletePointerDataContext, &m_storeInObjectStreamElement, &assetRef->m_storeInObjectStream);
}
else if (&assetRef->m_asset == element)
{
DeletePointerData(deletePointerDataContext, &m_assetElement, &assetRef->m_asset);
}
}
return false;
}
/// Remove elements (removed array of elements) regardless if the container is Stable or not (IsStableElements)
size_t RemoveElements(void* instance, const void** elements, size_t numElements, AZ::SerializeContext* deletePointerDataContext) override
{
if (deletePointerDataContext)
{
for (size_t i = 0; i < numElements; ++i)
{
RemoveElement(instance, elements[i], deletePointerDataContext);
}
}
return 0;
}
/// Clear elements in the instance.
void ClearElements(void*, AZ::SerializeContext*) override
{
}
AZ::SerializeContext::ClassElement m_storeInObjectStreamElement;
AZ::SerializeContext::ClassElement m_assetElement;
AZ::SerializeContext::ClassElement m_baseDataElement;
const size_t m_numClassElements = 3;
};
}
@@ -22,7 +22,6 @@
#include <Editor/Assets/ScriptCanvasMemoryAsset.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <ScriptCanvas/Assets/ScriptCanvasAssetHandler.h>
#include <ScriptCanvas/Core/ScriptCanvasBus.h>
@@ -80,11 +80,6 @@ namespace ScriptCanvasEditor
AZ::Data::Asset<ScriptCanvasAsset> newAsset = Clone<ScriptCanvasAsset>();
memoryAsset.m_inMemoryAsset = newAsset;
}
else if (m_assetType == azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>())
{
AZ::Data::Asset<ScriptCanvasEditor::ScriptCanvasFunctionAsset> newAsset = Clone<ScriptCanvasEditor::ScriptCanvasFunctionAsset>();
memoryAsset.m_inMemoryAsset = newAsset;
}
else
{
AZ_Assert(false, "Unsupported Script Canvas Asset Type");
@@ -107,10 +102,6 @@ namespace ScriptCanvasEditor
{
asset = assetHandler->CreateAsset(assetId, azrtti_typeid<ScriptCanvasAsset>());
}
else if (assetType == azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>())
{
asset = assetHandler->CreateAsset(assetId, azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>());
}
m_inMemoryAsset = AZ::Data::Asset<AssetType>(asset, AZ::Data::AssetLoadBehavior::PreLoad);
@@ -155,8 +146,6 @@ namespace ScriptCanvasEditor
streamInfo.m_streamFlags = AZ::IO::OpenMode::ModeWrite;
streamInfo.m_streamName = m_saveAsPath;
ScriptCanvasEditor::ScriptCanvasDataRequestBus::Event(GetScriptCanvasId(), &ScriptCanvasEditor::ScriptCanvasDataRequests::SetPrettyName, GetTabName().c_str());
if (!streamInfo.IsValid())
{
return;
@@ -223,10 +212,6 @@ namespace ScriptCanvasEditor
{
m_inMemoryAsset = AZ::Data::AssetManager::Instance().GetAsset<ScriptCanvasAsset>(assetId, AZ::Data::AssetLoadBehavior::Default);
}
else if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>())
{
m_inMemoryAsset = AZ::Data::AssetManager::Instance().GetAsset<ScriptCanvasEditor::ScriptCanvasFunctionAsset>(assetId, AZ::Data::AssetLoadBehavior::Default);
}
if (m_inMemoryAsset)
{
@@ -290,15 +275,8 @@ namespace ScriptCanvasEditor
return;
}
if (m_assetType == azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>())
{
editorGraph->MarkFunctionGraph();
}
m_scriptCanvasId = editorGraph->GetScriptCanvasId();
ScriptCanvasEditor::ScriptCanvasDataRequestBus::Event(m_scriptCanvasId, &ScriptCanvasEditor::ScriptCanvasDataRequests::SetPrettyName, GetTabName().c_str());
EditorGraphNotificationBus::Handler::BusDisconnect();
EditorGraphNotificationBus::Handler::BusConnect(m_scriptCanvasId);
@@ -538,10 +516,6 @@ namespace ScriptCanvasEditor
{
return CloneAssetData<ScriptCanvasAsset>(newAssetId);
}
else if (m_assetType == azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>())
{
return CloneAssetData<ScriptCanvasEditor::ScriptCanvasFunctionAsset>(newAssetId);
}
AZ_Assert(false, "The provides asset type is not supported as a valid Script Canvas memory asset");
return AZ::Data::Asset<AZ::Data::AssetData>();
@@ -21,7 +21,6 @@
#include <Editor/Assets/ScriptCanvasAssetTrackerDefinitions.h>
#include <ScriptCanvas/Asset/ScriptCanvasAssetBase.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <ScriptCanvas/Assets/ScriptCanvasAssetHandler.h>
#include <ScriptCanvas/Bus/ScriptCanvasBus.h>
@@ -38,9 +38,6 @@ AZ_POP_DISABLE_WARNING
#include <ScriptCanvas/Libraries/Core/EBusEventHandler.h>
#include <ScriptCanvas/Libraries/Core/FunctionDefinitionNode.h>
#include <Editor/Include/ScriptCanvas/GraphCanvas/MappingBus.h>
#include <Core/PureData.h>
#include <Editor/Include/ScriptCanvas/GraphCanvas/NodeDescriptorBus.h>
#include <Editor/Nodes/NodeCreateUtils.h>
#include <Editor/Nodes/NodeDisplayUtils.h>
@@ -63,7 +60,6 @@ AZ_POP_DISABLE_WARNING
#include <Editor/GraphCanvas/PropertyInterfaces/ScriptCanvasEnumComboBoxPropertyDataInterface.h>
#include <Editor/GraphCanvas/PropertyInterfaces/ScriptCanvasStringPropertyDataInterface.h>
#include <Editor/Nodes/ScriptCanvasAssetNode.h>
#include <Editor/Translation/TranslationHelper.h>
#include <Editor/View/Dialogs/SettingsDialog.h>
#include <Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h>
@@ -1087,66 +1083,6 @@ namespace ScriptCanvasEditor
return CanCreateConnectionBetween(scSourceEndpoint, scTargetEndpoint).IsSuccess();
}
GraphCanvas::ConnectionValidationTooltip Graph::GetConnectionValidityTooltip(const GraphCanvas::Endpoint& sourcePoint, const GraphCanvas::Endpoint& targetPoint) const
{
ScriptCanvas::Endpoint scSourceEndpoint = ConvertToScriptCanvasEndpoint(sourcePoint);
ScriptCanvas::Endpoint scTargetEndpoint = ConvertToScriptCanvasEndpoint(targetPoint);
AZ::Outcome<void, AZStd::string> connectionResult = CanCreateConnectionBetween(scSourceEndpoint, scTargetEndpoint);
GraphCanvas::ConnectionValidationTooltip validationTooltip;
validationTooltip.m_isValid = connectionResult.IsSuccess();
if (!connectionResult)
{
validationTooltip.m_failureReason = connectionResult.GetError();
}
return validationTooltip;
}
bool Graph::IsValidVariableAssignment(const AZ::EntityId& variableId, const GraphCanvas::Endpoint& targetPoint) const
{
AZStd::any* userData = nullptr;
GraphCanvas::NodeRequestBus::EventResult(userData, variableId, &GraphCanvas::NodeRequests::GetUserData);
AZ::EntityId variableNodeId = (userData && userData->is<AZ::EntityId>()) ? *AZStd::any_cast<AZ::EntityId>(userData) : AZ::EntityId();
ScriptCanvas::SlotId variableSlotId;
ScriptCanvas::NodeRequestBus::EventResult(variableSlotId, variableNodeId, &ScriptCanvas::NodeRequests::GetSlotId, ScriptCanvas::PureData::k_getThis);
ScriptCanvas::Endpoint variableSourceEndpoint(variableNodeId, variableSlotId);
ScriptCanvas::Endpoint targetEndpoint = ConvertToScriptCanvasEndpoint(targetPoint);
return CanCreateConnectionBetween(variableSourceEndpoint, targetEndpoint).IsSuccess();
}
GraphCanvas::ConnectionValidationTooltip Graph::GetVariableAssignmentValidityTooltip(const AZ::EntityId& variableId, const GraphCanvas::Endpoint& targetPoint) const
{
AZStd::any* userData = nullptr;
GraphCanvas::NodeRequestBus::EventResult(userData, variableId, &GraphCanvas::NodeRequests::GetUserData);
AZ::EntityId variableNodeId = (userData && userData->is<AZ::EntityId>()) ? *AZStd::any_cast<AZ::EntityId>(userData) : AZ::EntityId();
ScriptCanvas::SlotId variableSlotId;
ScriptCanvas::NodeRequestBus::EventResult(variableSlotId, variableNodeId, &ScriptCanvas::NodeRequests::GetSlotId, ScriptCanvas::PureData::k_getThis);
ScriptCanvas::Endpoint variableSourceEndpoint(variableNodeId, variableSlotId);
ScriptCanvas::Endpoint targetEndpoint = ConvertToScriptCanvasEndpoint(targetPoint);
AZ::Outcome<void, AZStd::string> connectionResult = CanCreateConnectionBetween(variableSourceEndpoint, targetEndpoint);
GraphCanvas::ConnectionValidationTooltip validationTooltip;
validationTooltip.m_isValid = connectionResult.IsSuccess();
if (!connectionResult)
{
validationTooltip.m_failureReason = connectionResult.GetError();
}
return validationTooltip;
}
AZStd::string Graph::GetDataTypeString(const AZ::Uuid& typeId)
{
return TranslationHelper::GetSafeTypeName(ScriptCanvas::Data::FromAZType(typeId));
@@ -3190,16 +3126,6 @@ namespace ScriptCanvasEditor
}
}
bool Graph::IsRuntimeGraph() const
{
return GetAssetType() == azrtti_typeid<ScriptCanvas::RuntimeAsset>();
}
bool Graph::IsFunctionGraph() const
{
return GetAssetType() == azrtti_typeid<ScriptCanvas::SubgraphInterfaceAsset>();
}
bool Graph::CanExposeEndpoint(const GraphCanvas::Endpoint& endpoint)
{
bool isEnabled = false;
@@ -14,7 +14,6 @@
#include <AzCore/Script/ScriptContext.h>
#include <AzFramework/API/ApplicationAPI.h>
#include <Editor/Framework/ScriptCanvasReporter.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <ScriptCanvas/Asset/RuntimeAsset.h>
#include <ScriptCanvas/Asset/RuntimeAssetHandler.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
@@ -20,10 +20,8 @@
#include <ScriptCanvas/Core/ScriptCanvasBus.h>
#include <ScriptCanvas/Data/Data.h>
#include <ScriptCanvas/Libraries/Comparison/Comparison.h>
#include <ScriptCanvas/Libraries/Core/BehaviorContextObjectNode.h>
#include <ScriptCanvas/Libraries/Core/BinaryOperator.h>
#include <ScriptCanvas/Libraries/Core/CoreNodes.h>
#include <ScriptCanvas/Libraries/Entity/EntityRef.h>
#include <ScriptCanvas/Libraries/Libraries.h>
#include <ScriptCanvas/Libraries/Logic/Logic.h>
#include <ScriptCanvas/Libraries/Math/Math.h>
@@ -44,17 +42,6 @@ namespace ScriptCanvasEditor
{
class ScriptCanvasAsset;
struct LoadTestFunctionResult
{
AZStd::string_view m_graphPath;
AZStd::unique_ptr<AZ::Entity> m_entity;
ScriptCanvas::RuntimeComponent* m_runtimeComponent = nullptr;
bool m_nativeFunctionFound = false;
AZ::Data::Asset<ScriptCanvasEditor::ScriptCanvasFunctionAsset> m_editorAsset;
AZ::Data::Asset<ScriptCanvas::SubgraphInterfaceAsset> m_runtimeAsset;
AZ::Data::Asset<AZ::ScriptAsset> m_scriptAsset;
};
struct LoadTestGraphResult
{
AZStd::string_view m_graphPath;
@@ -1,126 +0,0 @@
/*
* 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 "precompiled.h"
#include <GraphCanvas/Components/Nodes/NodeTitleBus.h>
#include "EntityRefNodeDescriptorComponent.h"
#include "ScriptCanvas/Core/Datum.h"
#include "ScriptCanvas/Core/PureData.h"
#include "ScriptCanvas/Core/Slot.h"
namespace ScriptCanvasEditor
{
/////////////////////////////////////
// EntityRefNodeDescriptorComponent
/////////////////////////////////////
void EntityRefNodeDescriptorComponent::Reflect(AZ::ReflectContext* reflectContext)
{
AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(reflectContext);
if (serializeContext)
{
serializeContext->Class<EntityRefNodeDescriptorComponent, NodeDescriptorComponent>()
->Version(1)
;
}
}
EntityRefNodeDescriptorComponent::EntityRefNodeDescriptorComponent()
: NodeDescriptorComponent(NodeDescriptorType::EntityRef)
{
}
void EntityRefNodeDescriptorComponent::OnEntityNameChanged([[maybe_unused]] const AZStd::string& name)
{
UpdateNodeTitle();
}
void EntityRefNodeDescriptorComponent::OnSlotInputChanged(const ScriptCanvas::SlotId& slotId)
{
if (slotId == m_endpoint.GetSlotId())
{
AZ::EntityBus::Handler::BusDisconnect();
AZ::EntityId referencedId = GetReferencedEntityId();
if (referencedId.IsValid())
{
AZ::EntityBus::Handler::BusConnect(referencedId);
}
UpdateNodeTitle();
}
}
void EntityRefNodeDescriptorComponent::OnAddedToGraphCanvasGraph([[maybe_unused]] const GraphCanvas::GraphId& sceneId, const AZ::EntityId& scriptCanvasNodeId)
{
ScriptCanvas::SlotId scriptCanvasSlotId;
ScriptCanvas::NodeRequestBus::EventResult(scriptCanvasSlotId, scriptCanvasNodeId, &ScriptCanvas::NodeRequests::GetSlotId, ScriptCanvas::PureData::k_setThis);
m_endpoint = ScriptCanvas::Endpoint(scriptCanvasNodeId, scriptCanvasSlotId);
if (m_endpoint.IsValid())
{
AZ::EntityId referencedId = GetReferencedEntityId();
if (referencedId.IsValid())
{
AZ::EntityBus::Handler::BusConnect(referencedId);
}
}
UpdateNodeTitle();
}
AZ::EntityId EntityRefNodeDescriptorComponent::GetReferencedEntityId() const
{
AZ::EntityId retVal;
const ScriptCanvas::Datum* object = nullptr;
ScriptCanvas::NodeRequestBus::EventResult(object, m_endpoint.GetNodeId(), &ScriptCanvas::NodeRequests::FindDatum, m_endpoint.GetSlotId());
if (object && object->IS_A<AZ::EntityId>())
{
retVal = (*object->GetAs<AZ::EntityId>());
}
return retVal;
}
void EntityRefNodeDescriptorComponent::UpdateNodeTitle()
{
bool needsTitle = true;
if (m_endpoint.IsValid())
{
AZ::EntityId referencedId = GetReferencedEntityId();
AZStd::string entityName;
AZ::ComponentApplicationBus::BroadcastResult(entityName, &AZ::ComponentApplicationRequests::GetEntityName, referencedId);
if (!entityName.empty())
{
needsTitle = false;
GraphCanvas::NodeTitleRequestBus::Event(GetEntityId(), &GraphCanvas::NodeTitleRequests::SetTitle, entityName.c_str());
}
else if (referencedId.IsValid())
{
needsTitle = false;
GraphCanvas::NodeTitleRequestBus::Event(GetEntityId(), &GraphCanvas::NodeTitleRequests::SetTitle, referencedId.ToString().c_str());
}
}
if (needsTitle)
{
GraphCanvas::NodeTitleRequestBus::Event(GetEntityId(), &GraphCanvas::NodeTitleRequests::SetTitle, "<None>");
}
GraphCanvas::NodeTitleRequestBus::Event(GetEntityId(), &GraphCanvas::NodeTitleRequests::SetSubTitle, "EntityRef");
}
}
@@ -1,48 +0,0 @@
/*
* 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 <GraphCanvas/Components/Nodes/NodeBus.h>
#include <AzCore/Component/EntityBus.h>
#include "Editor/GraphCanvas/Components/NodeDescriptors/NodeDescriptorComponent.h"
#include "ScriptCanvas/Core/NodeBus.h"
#include "ScriptCanvas/Core/Endpoint.h"
namespace ScriptCanvasEditor
{
class EntityRefNodeDescriptorComponent
: public NodeDescriptorComponent
, public AZ::EntityBus::Handler
{
public:
AZ_COMPONENT(EntityRefNodeDescriptorComponent, "{887AE9AC-C793-4FE5-BAE2-AF6A7F70A374}", NodeDescriptorComponent);
static void Reflect(AZ::ReflectContext* reflectContext);
EntityRefNodeDescriptorComponent();
~EntityRefNodeDescriptorComponent() = default;
// AZ::EntityBus
void OnEntityNameChanged(const AZStd::string& name) override;
////
// ScriptCanvas::NodeNotificationsBus
void OnSlotInputChanged(const ScriptCanvas::SlotId& slotId) override;
////
private:
void OnAddedToGraphCanvasGraph(const GraphCanvas::GraphId& graphId, const AZ::EntityId& scriptCanvasNodeId) override;
AZ::EntityId GetReferencedEntityId() const;
void UpdateNodeTitle();
ScriptCanvas::Endpoint m_endpoint;
};
}
@@ -10,8 +10,6 @@
#include <GraphCanvas/Components/VisualBus.h>
#include <Editor/GraphCanvas/Components/NodeDescriptors/NodeDescriptorComponent.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <ScriptCanvas/Bus/RequestBus.h>
#include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
@@ -1,68 +0,0 @@
/*
* 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/Asset/AssetManager.h>
#include <AzCore/Asset/AssetTypeInfoBus.h>
#include <AzCore/Serialization/ObjectStream.h>
#include <ScriptCanvas/Asset/AssetDescription.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <ScriptCanvas/Assets/ScriptCanvasAssetHandler.h>
namespace AZ
{
class SerializeContext;
}
namespace ScriptCanvasEditor
{
class ScriptCanvasFunctionAsset;
/**
* Manages editor Script Canvas graph assets.
*/
class ScriptCanvasFunctionAssetHandler
: public ScriptCanvasAssetHandler
{
public:
AZ_CLASS_ALLOCATOR(ScriptCanvasFunctionAssetHandler, AZ::SystemAllocator, 0);
AZ_RTTI(ScriptCanvasFunctionAssetHandler, "{CE1EB0B7-D8DA-4B9B-858B-A34DF5092BC2}", ScriptCanvasAssetHandler);
ScriptCanvasFunctionAssetHandler(AZ::SerializeContext* context = nullptr);
~ScriptCanvasFunctionAssetHandler();
AZ::Data::AssetPtr CreateAsset(const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) override;
AZ::Data::AssetHandler::LoadResult LoadAssetData(
const AZ::Data::Asset<AZ::Data::AssetData>& asset,
AZStd::shared_ptr<AZ::Data::AssetDataStream> stream,
const AZ::Data::AssetFilterCB& assetLoadFilterCB) override;
bool SaveAssetData(const AZ::Data::Asset<AZ::Data::AssetData>& asset, AZ::IO::GenericStream* stream) override;
bool SaveAssetData(const ScriptCanvasEditor::ScriptCanvasFunctionAsset* assetData, AZ::IO::GenericStream* stream);
bool SaveAssetData(const ScriptCanvasEditor::ScriptCanvasFunctionAsset* assetData, AZ::IO::GenericStream* stream, AZ::DataStream::StreamType streamType);
// Called by asset database on registration.
void GetAssetTypeExtensions(AZStd::vector<AZStd::string>& extensions) override;
void GetHandledAssetTypes(AZStd::vector<AZ::Data::AssetType>& assetTypes) override;
// Provides editor with information about script canvas graph assets.
AZ::Data::AssetType GetAssetType() const override;
const char* GetAssetTypeDisplayName() const override;
bool CanCreateComponent(const AZ::Data::AssetId& assetId) const override;
const char* GetGroup() const override;
const char* GetBrowserIcon() const override;
static AZ::Data::AssetType GetAssetTypeStatic();
ScriptCanvasEditor::ScriptCanvasFunctionAsset* m_scriptCanvasAsset;
};
}
@@ -154,10 +154,6 @@ namespace ScriptCanvasEditor
virtual bool ConvertReferenceToVariableNode(const GraphCanvas::Endpoint& endpoint) = 0;
virtual void QueueVersionUpdate(const AZ::EntityId& graphCanvasNodeId) = 0;
virtual bool IsRuntimeGraph() const = 0;
virtual bool IsFunctionGraph() const = 0;
virtual bool CanExposeEndpoint(const GraphCanvas::Endpoint& endpoint) = 0;
virtual ScriptCanvas::Endpoint ConvertToScriptCanvasEndpoint(const GraphCanvas::Endpoint& endpoinnt) const = 0;
@@ -110,12 +110,12 @@ namespace ScriptCanvasEditor
, m_graphCanvasSaveVersion(GraphCanvas::EntitySaveDataContainer::CurrentVersion)
, m_upgradeSM(this)
{}
~Graph() override;
void Activate() override;
void Deactivate() override;
static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
{
ScriptCanvas::Graph::GetProvidedServices(provided);
@@ -160,10 +160,6 @@ namespace ScriptCanvasEditor
bool CreateConnection(const GraphCanvas::ConnectionId& connectionId, const GraphCanvas::Endpoint& sourcePoint, const GraphCanvas::Endpoint& targetPoint) override;
bool IsValidConnection(const GraphCanvas::Endpoint& sourcePoint, const GraphCanvas::Endpoint& targetPoint) const override;
GraphCanvas::ConnectionValidationTooltip GetConnectionValidityTooltip(const GraphCanvas::Endpoint& sourcePoint, const GraphCanvas::Endpoint& targetPoint) const override;
bool IsValidVariableAssignment(const AZ::EntityId& variableId, const GraphCanvas::Endpoint& targetPoint) const override;
GraphCanvas::ConnectionValidationTooltip GetVariableAssignmentValidityTooltip(const AZ::EntityId& variableId, const GraphCanvas::Endpoint& targetPoint) const override;
AZStd::string GetDataTypeString(const AZ::Uuid& typeId) override;
@@ -192,7 +188,7 @@ namespace ScriptCanvasEditor
GraphCanvas::CanHandleMimeEventOutcome CanHandleValueMimeEvent(const GraphCanvas::Endpoint& endpoint, const QMimeData* mimeData) override;
bool HandleValueMimeEvent(const GraphCanvas::Endpoint& endpoint, const QMimeData* mimeData) override;
GraphCanvas::SlotId RequestExtension(const GraphCanvas::NodeId& nodeId, const GraphCanvas::ExtenderId& extenderId, GraphModelRequests::ExtensionRequestReason ) override;
GraphCanvas::SlotId RequestExtension(const GraphCanvas::NodeId& nodeId, const GraphCanvas::ExtenderId& extenderId, GraphModelRequests::ExtensionRequestReason) override;
void ExtensionCancelled(const GraphCanvas::NodeId& nodeId, const GraphCanvas::ExtenderId& extenderId) override;
void FinalizeExtension(const GraphCanvas::NodeId& nodeId, const GraphCanvas::ExtenderId& extenderId) override;
@@ -216,7 +212,7 @@ namespace ScriptCanvasEditor
void PostCreationEvent() override;
void OnPasteBegin() override;
void OnPasteEnd() override;
void OnViewRegistered() override;
/////////////////////////////////////////////////////////////////////////////////////////////
@@ -262,7 +258,7 @@ namespace ScriptCanvasEditor
AZStd::vector<NodeIdPair> GetNodesOfType(const ScriptCanvas::NodeTypeIdentifier&) override;
AZStd::vector<NodeIdPair> GetVariableNodes(const ScriptCanvas::VariableId&) override;
void RemoveUnusedVariables() override;
bool CanConvertVariableNodeToReference(const GraphCanvas::NodeId& nodeId) override;
@@ -270,12 +266,9 @@ namespace ScriptCanvasEditor
bool ConvertReferenceToVariableNode(const GraphCanvas::Endpoint& endpoint) override;
void QueueVersionUpdate(const AZ::EntityId& graphCanvasNodeId) override;
bool IsRuntimeGraph() const override;
bool IsFunctionGraph() const override;
bool CanExposeEndpoint(const GraphCanvas::Endpoint& endpoint) override;
ScriptCanvas::Endpoint ConvertToScriptCanvasEndpoint(const GraphCanvas::Endpoint& endpoint) const override;
GraphCanvas::Endpoint ConvertToGraphCanvasEndpoint(const ScriptCanvas::Endpoint& endpoint) const override;
////
@@ -333,8 +326,8 @@ namespace ScriptCanvasEditor
Graph(const Graph&) = delete;
void DisplayUpdateToast();
AZ::EntityId ConvertToScriptCanvasNodeId(const GraphCanvas::NodeId& nodeId) const;
AZ::EntityId ConvertToScriptCanvasNodeId(const GraphCanvas::NodeId& nodeId) const;
GraphCanvas::NodePropertyDisplay* CreateDisplayPropertyForSlot(const AZ::EntityId& scriptCanvasNodeId, const ScriptCanvas::SlotId& scriptCanvasSlotId) const;
@@ -370,10 +363,10 @@ namespace ScriptCanvasEditor
AZ::EntityId m_wrapperNodeDropTarget;
VariableComboBoxDataModel m_variableDataModel;
WrappedNodeGroupingMap m_wrappedNodeGroupings;
AZStd::vector< AZ::EntityId > m_lastGraphCanvasCreationGroup;
AZ::Entity* m_graphCanvasSceneEntity;
GraphCanvas::EntitySaveDataContainer::VersionInformation m_graphCanvasSaveVersion;
@@ -37,7 +37,7 @@ namespace ScriptCanvasEditor
EBusHandler,
EBusHandlerEvent,
EBusSender,
EntityRef,
_deprecated_,
VariableNode,
SetVariable,
GetVariable,
@@ -1,56 +0,0 @@
/*
* 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 "precompiled.h"
#include <AzCore/Serialization/EditContext.h>
#include <Editor/Nodes/EditorLibrary.h>
#include <Editor/Nodes/ScriptCanvasAssetNode.h>
namespace ScriptCanvasEditor
{
namespace Library
{
void Editor::Reflect(AZ::ReflectContext* reflection)
{
AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(reflection);
if (serializeContext)
{
serializeContext->Class<Editor, LibraryDefinition>()
->Version(1)
;
AZ::EditContext* editContext = serializeContext->GetEditContext();
if (editContext)
{
editContext->Class<Editor>("Editor", "")
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/All.png")
;
}
}
}
void Editor::InitNodeRegistry(ScriptCanvas::NodeRegistry& nodeRegistry)
{
ScriptCanvas::Library::AddNodeToRegistry<Editor, ScriptCanvasAssetNode>(nodeRegistry);
}
AZStd::vector<AZ::ComponentDescriptor*> Editor::GetComponentDescriptors()
{
return AZStd::vector<AZ::ComponentDescriptor*>({
ScriptCanvasAssetNode::CreateDescriptor(),
});
}
}
AZStd::vector<AZ::ComponentDescriptor*> GetLibraryDescriptors()
{
return Library::Editor::GetComponentDescriptors();
}
}
@@ -1,32 +0,0 @@
/*
* 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 <ScriptCanvas/Libraries/Libraries.h>
namespace AZ
{
class ReflectContext;
class ComponentDescriptor;
}
namespace ScriptCanvasEditor
{
namespace Library
{
struct Editor : public ScriptCanvas::Library::LibraryDefinition
{
AZ_RTTI(Editor, "{59697735-4B64-4DC5-8380-02B2999FFCFE}", ScriptCanvas::Library::LibraryDefinition);
static void Reflect(AZ::ReflectContext*);
static void InitNodeRegistry(ScriptCanvas::NodeRegistry& nodeRegistry);
static AZStd::vector<AZ::ComponentDescriptor*> GetComponentDescriptors();
};
}
AZStd::vector<AZ::ComponentDescriptor*> GetLibraryDescriptors();
}
@@ -26,7 +26,6 @@
#include <ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h>
#include <ScriptCanvas/Libraries/Core/SendScriptEvent.h>
#include <ScriptCanvas/Libraries/Core/SetVariable.h>
#include <ScriptCanvas/Libraries/Entity/EntityRef.h>
namespace ScriptCanvasEditor::Nodes
{
@@ -132,36 +131,6 @@ namespace ScriptCanvasEditor::Nodes
return AZStd::make_pair(node, nodeIdPair);
}
NodeIdPair CreateEntityNode(const AZ::EntityId& sourceId, const ScriptCanvas::ScriptCanvasId& scriptCanvasId)
{
AZ_PROFILE_TIMER("ScriptCanvas", __FUNCTION__);
NodeIdPair nodeIdPair;
ScriptCanvas::Node* node = nullptr;
AZ::Entity* scriptCanvasEntity{ aznew AZ::Entity };
scriptCanvasEntity->Init();
nodeIdPair.m_scriptCanvasId = scriptCanvasEntity->GetId();
ScriptCanvas::SystemRequestBus::BroadcastResult(node, &ScriptCanvas::SystemRequests::CreateNodeOnEntity, scriptCanvasEntity->GetId(), scriptCanvasId, ScriptCanvas::Nodes::Entity::EntityRef::RTTI_Type());
auto* entityNode = azrtti_cast<ScriptCanvas::Nodes::Entity::EntityRef*>(node);
entityNode->SetEntityRef(sourceId);
// Set the name
AZ::Entity* sourceEntity = nullptr;
AZ::ComponentApplicationBus::BroadcastResult(sourceEntity, &AZ::ComponentApplicationRequests::FindEntity, sourceId);
if (sourceEntity)
{
scriptCanvasEntity->SetName(AZStd::string::format("SC-EntityRef(%s)", sourceEntity->GetName().data()));
}
AZ::EntityId graphCanvasGraphId;
EditorGraphRequestBus::EventResult(graphCanvasGraphId, scriptCanvasId, &EditorGraphRequests::GetGraphCanvasGraphId);
nodeIdPair.m_graphCanvasId = DisplayEntityNode(graphCanvasGraphId, entityNode);
return nodeIdPair;
}
NodeIdPair CreateObjectMethodNode(AZStd::string_view className, AZStd::string_view methodName, const ScriptCanvas::ScriptCanvasId& scriptCanvasId, ScriptCanvas::PropertyStatus propertyStatus)
{
AZ_PROFILE_TIMER("ScriptCanvas", __FUNCTION__);
@@ -28,7 +28,6 @@ namespace ScriptCanvasEditor::Nodes
// Specific create methods which will also handle displaying the node.
AZStd::pair<ScriptCanvas::Node*, NodeIdPair> CreateAndGetNode(const AZ::Uuid& classData, const ScriptCanvas::ScriptCanvasId& scriptCanvasId, const StyleConfiguration& styleConfiguration, AZStd::function<void(ScriptCanvas::Node*)> = nullptr);
NodeIdPair CreateNode(const AZ::Uuid& classData, const ScriptCanvas::ScriptCanvasId& scriptCanvasId, const StyleConfiguration& styleConfiguration);
NodeIdPair CreateEntityNode(const AZ::EntityId& sourceId, const ScriptCanvas::ScriptCanvasId& scriptCanvasId);
NodeIdPair CreateObjectMethodNode(AZStd::string_view className, AZStd::string_view methodName, const ScriptCanvas::ScriptCanvasId& scriptCanvasId, ScriptCanvas::PropertyStatus propertyStatus);
NodeIdPair CreateObjectMethodOverloadNode(AZStd::string_view className, AZStd::string_view methodName, const ScriptCanvas::ScriptCanvasId& scriptCanvasGraphId);
NodeIdPair CreateGlobalMethodNode(AZStd::string_view methodName, const ScriptCanvas::ScriptCanvasId& scriptCanvasId);
@@ -18,7 +18,6 @@
#include <GraphCanvas/Components/NodeDescriptors/EBusHandlerEventNodeDescriptorComponent.h>
#include <GraphCanvas/Components/NodeDescriptors/EBusHandlerNodeDescriptorComponent.h>
#include <GraphCanvas/Components/NodeDescriptors/EBusSenderNodeDescriptorComponent.h>
#include <GraphCanvas/Components/NodeDescriptors/EntityRefNodeDescriptorComponent.h>
#include <GraphCanvas/Components/NodeDescriptors/FunctionNodeDescriptorComponent.h>
#include <GraphCanvas/Components/NodeDescriptors/GetVariableNodeDescriptorComponent.h>
#include <GraphCanvas/Components/NodeDescriptors/NodelingDescriptorComponent.h>
@@ -44,8 +43,6 @@
#include <ScriptCanvas/Libraries/Core/Method.h>
#include <ScriptCanvas/Libraries/Core/SendScriptEvent.h>
#include <ScriptCanvas/Libraries/Core/SetVariable.h>
#include <ScriptCanvas/Libraries/Entity/EntityRef.h>
namespace ScriptCanvasEditor::Nodes::SlotDisplayHelper
{
@@ -231,57 +228,6 @@ namespace ScriptCanvasEditor::Nodes
return DisplayGeneralScriptCanvasNode(graphCanvasGraphId, node, nodeConfiguration);
}
AZ::EntityId DisplayEntityNode(AZ::EntityId, const ScriptCanvas::Nodes::Entity::EntityRef* entityNode)
{
AZ::EntityId graphCanvasNodeId;
AZ::Entity* graphCanvasEntity = nullptr;
GraphCanvas::GraphCanvasRequestBus::BroadcastResult(graphCanvasEntity, &GraphCanvas::GraphCanvasRequests::CreateGeneralNode, ".entity");
AZ_Assert(graphCanvasEntity, "Unable to create GraphCanvas Bus Node");
graphCanvasNodeId = graphCanvasEntity->GetId();
// Add the icon component
graphCanvasEntity->CreateComponent<IconComponent>(ScriptCanvas::Nodes::Entity::EntityRef::RTTI_Type());
graphCanvasEntity->CreateComponent<EntityRefNodeDescriptorComponent>();
graphCanvasEntity->CreateComponent<SlotMappingComponent>(entityNode->GetEntityId());
graphCanvasEntity->CreateComponent<SceneMemberMappingComponent>(entityNode->GetEntityId());
graphCanvasEntity->Init();
graphCanvasEntity->Activate();
// Set the user data on the GraphCanvas node to be the EntityId of the ScriptCanvas node
AZStd::any* graphCanvasUserData = nullptr;
GraphCanvas::NodeRequestBus::EventResult(graphCanvasUserData, graphCanvasNodeId, &GraphCanvas::NodeRequests::GetUserData);
if (graphCanvasUserData)
{
*graphCanvasUserData = entityNode->GetEntityId();
}
// Create the GraphCanvas slots
for (const auto& slot : entityNode->GetSlots())
{
if (slot.GetDescriptor() == ScriptCanvas::SlotDescriptors::DataOut() && slot.IsVisible())
{
DisplayScriptCanvasSlot(graphCanvasNodeId, slot);
}
}
AZ::Entity* sourceEntity = nullptr;
AZ::ComponentApplicationBus::BroadcastResult(sourceEntity, &AZ::ComponentApplicationRequests::FindEntity, entityNode->GetEntityRef());
if (sourceEntity)
{
graphCanvasEntity->SetName(AZStd::string::format("GC-EntityRef(%s)", sourceEntity->GetName().data()));
}
else
{
graphCanvasEntity->SetName(AZStd::string::format("GC-EntityRef(%s)", entityNode->GetEntityRef().ToString().c_str()));
}
return graphCanvasNodeId;
}
static void ConfigureGeneralScriptCanvasEntity(const ScriptCanvas::Node* node, AZ::Entity* graphCanvasEntity, const GraphCanvas::SlotGroup& slotGroup = GraphCanvas::SlotGroups::Invalid)
{
if (node->RequiresDynamicSlotOrdering())
@@ -1145,10 +1091,6 @@ namespace ScriptCanvasEditor::Nodes
{
graphCanvasNodeId = DisplayAzEventHandlerNode(graphCanvasGraphId, azEventHandlerNode);
}
else if (azrtti_istypeof<ScriptCanvas::Nodes::Entity::EntityRef>(node))
{
graphCanvasNodeId = DisplayEntityNode(graphCanvasGraphId, static_cast<const ScriptCanvas::Nodes::Entity::EntityRef*>(node));
}
else if (azrtti_istypeof<ScriptCanvas::Nodes::Core::ReceiveScriptEvent>(node))
{
graphCanvasNodeId = DisplayScriptEventWrapperNode(graphCanvasGraphId, static_cast<const ScriptCanvas::Nodes::Core::ReceiveScriptEvent*>(node));
@@ -30,10 +30,6 @@ namespace ScriptCanvas::Nodes::Core
class SetVariableNode;
class SendScriptEvent;
}
namespace ScriptCanvas::Nodes::Entity
{
class EntityRef;
}
namespace ScriptEvents
{
class Method;
@@ -45,7 +41,6 @@ namespace ScriptCanvasEditor::Nodes
AZ::EntityId DisplayScriptCanvasNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Node* node);
// Core Node
AZ::EntityId DisplayEntityNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Entity::EntityRef* entityNode);
AZ::EntityId DisplayEbusEventNode(AZ::EntityId graphCanvasGraphId, const AZStd::string& busName, const AZStd::string& eventName, const ScriptCanvas::EBusEventId& eventId);
AZ::EntityId DisplayEbusWrapperNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::EBusEventHandler* busNode);
AZ::EntityId DisplayGetVariableNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::GetVariableNode* variableNode);
@@ -11,26 +11,10 @@
#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;
@@ -1,205 +0,0 @@
/*
* 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 "precompiled.h"
#include <Editor/Nodes/ScriptCanvasAssetNode.h>
#include <ScriptCanvas/Core/Graph.h>
#include <Editor/Assets/ScriptCanvasAssetTrackerBus.h>
namespace ScriptCanvasEditor
{
/**
* \note when we reflecting we can check if the class is inheriting from IEventHandler
* and use the this->events.
*/
class ScriptCanvasAssetNodeEventHandler
: public AZ::SerializeContext::IEventHandler
{
void OnReadBegin(void* classPtr)
{
auto* scriptCanvasAssetNode = reinterpret_cast<ScriptCanvasAssetNode*>(classPtr);
scriptCanvasAssetNode->ComputeDataPatch();
}
};
void ScriptCanvasAssetNode::Reflect(AZ::ReflectContext* context)
{
AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
if (!serializeContext)
{
return;
}
serializeContext->Class<ScriptCanvasAssetNode, ScriptCanvas::Node>()
->Version(0)
->EventHandler<ScriptCanvasAssetNodeEventHandler>()
->Field("m_assetInstance", &ScriptCanvasAssetNode::m_scriptCanvasAssetInstance)
;
if (AZ::EditContext* editContext = serializeContext->GetEditContext())
{
editContext->Class<ScriptCanvasAssetNode>("ScriptCanvas Asset", "Script Canvas Asset Node which contains a reference to another ScriptCanvas graph")
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
->Attribute(AZ::Edit::Attributes::Icon, "Icons/ScriptCanvas/Placeholder.png")
->Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::List)
;
}
}
ScriptCanvasAssetNode::ScriptCanvasAssetNode(const AZ::Data::Asset<ScriptCanvasAsset>& scriptCanvasAsset, bool storeAssetDataInternally)
{
SetAssetDataStoredInternally(storeAssetDataInternally);
SetAsset(scriptCanvasAsset);
}
ScriptCanvasAssetNode::~ScriptCanvasAssetNode()
{
}
void ScriptCanvasAssetNode::OnInputSignal(const ScriptCanvas::SlotId&)
{
}
void ScriptCanvasAssetNode::OnInit()
{
if (GetAsset().GetId().IsValid())
{
AZ::Data::AssetBus::Handler::BusConnect(GetAsset().GetId());
AZ::Entity* scriptCanvasEntity = GetScriptCanvasEntity();
if (scriptCanvasEntity)
{
if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed)
{
scriptCanvasEntity->Init();
}
if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init)
{
scriptCanvasEntity->Activate();
}
}
}
}
bool ScriptCanvasAssetNode::GetAssetDataStoredInternally() const
{
return m_scriptCanvasAssetInstance.GetReference().GetAssetDataStoredInternally();
}
void ScriptCanvasAssetNode::SetAssetDataStoredInternally(bool storeInObjectStream)
{
m_scriptCanvasAssetInstance.GetReference().SetAssetDataStoredInternally(storeInObjectStream);
}
ScriptCanvas::ScriptCanvasData& ScriptCanvasAssetNode::GetScriptCanvasData()
{
return m_scriptCanvasAssetInstance.GetScriptCanvasData();
}
const ScriptCanvas::ScriptCanvasData& ScriptCanvasAssetNode::GetScriptCanvasData() const
{
return m_scriptCanvasAssetInstance.GetScriptCanvasData();
}
AZ::Entity* ScriptCanvasAssetNode::GetScriptCanvasEntity() const
{
return GetScriptCanvasData().GetScriptCanvasEntity();
}
AZ::Data::Asset<ScriptCanvasAsset>& ScriptCanvasAssetNode::GetAsset()
{
return m_scriptCanvasAssetInstance.GetReference().GetAsset();
}
const AZ::Data::Asset<ScriptCanvasAsset>& ScriptCanvasAssetNode::GetAsset() const
{
return m_scriptCanvasAssetInstance.GetReference().GetAsset();
}
void ScriptCanvasAssetNode::SetAsset(const AZ::Data::Asset<ScriptCanvasAsset>& scriptCanvasAsset)
{
m_scriptCanvasAssetInstance.GetReference().SetAsset(scriptCanvasAsset);
if (scriptCanvasAsset.GetId().IsValid())
{
auto onAssetReady = [](ScriptCanvasMemoryAsset&) {};
AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::Load, scriptCanvasAsset.GetId(), azrtti_typeid<ScriptCanvasAsset>(), onAssetReady);
AZ::Data::AssetBus::Handler::BusConnect(scriptCanvasAsset.GetId());
ApplyDataPatch();
}
}
void ScriptCanvasAssetNode::OnAssetReloaded(AZ::Data::Asset<AZ::Data::AssetData> asset)
{
SetAsset(asset);
if (!GetAsset().IsReady())
{
AZ_Error("Script Canvas", false, "Reloaded graph with id %s is not valid", asset.GetId().ToString<AZStd::string>().data());
return;
}
// Update data patches against the old version of the asset.
ApplyDataPatch();
}
void ScriptCanvasAssetNode::OnAssetUnloaded(const AZ::Data::AssetId assetId, const AZ::Data::AssetType)
{
AZ::Data::AssetBus::Handler::BusDisconnect(assetId);
}
void ScriptCanvasAssetNode::ComputeDataPatch()
{
m_scriptCanvasAssetInstance.ComputeDataPatch();
}
void ScriptCanvasAssetNode::ApplyDataPatch()
{
m_scriptCanvasAssetInstance.ApplyDataPatch();
}
bool ScriptCanvasAssetNode::Visit(const VisitCB& preVisitCB, const VisitCB & postVisitCB)
{
AZStd::unordered_set<AZ::Data::AssetId> visitedGraphs;
return Visit(preVisitCB, postVisitCB, visitedGraphs);
}
bool ScriptCanvasAssetNode::Visit(const VisitCB& preVisitCB, const VisitCB & postVisitCB, AZStd::unordered_set<AZ::Data::AssetId>& visitedGraphs)
{
const AZ::Data::AssetId& visitedAssetId = GetAsset().GetId();
if (visitedGraphs.count(visitedAssetId) > 0)
{
AZ_Error("Script Canvas", false, "The Script Canvas Asset %s has already been visited, processing will stop", visitedAssetId.ToString<AZStd::string>().data());
return false;
}
if (!preVisitCB || preVisitCB(*this))
{
auto graph = GetScriptCanvasEntity() ? AZ::EntityUtils::FindFirstDerivedComponent<ScriptCanvas::Graph>(GetScriptCanvasEntity()) : nullptr;
if (graph)
{
for (AZ::Entity* nodeEntity : graph->GetNodeEntities())
{
if (auto childAssetNode = AZ::EntityUtils::FindFirstDerivedComponent<ScriptCanvasAssetNode>(nodeEntity))
{
// Visit ScriptCanvasAssetNodes that are in the asset referenced by @assetNode
if (!childAssetNode->Visit(preVisitCB, postVisitCB, visitedGraphs))
{
break;
}
}
}
}
}
// Visit siblings ScriptCanvasAssetNodes
bool visitSiblings = !postVisitCB || postVisitCB(*this);
visitedGraphs.insert(visitedAssetId);
return visitSiblings;
}
}
@@ -1,92 +0,0 @@
/*
* 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/Component/Component.h>
#include <ScriptCanvas/Core/Node.h>
#include <ScriptCanvas/Bus/GraphBus.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <Editor/Assets/ScriptCanvasAssetInstance.h>
namespace ScriptCanvasEditor
{
//! A group of entities in a scene
class ScriptCanvasAssetNode
: public ScriptCanvas::Node
, protected AZ::Data::AssetBus::Handler
{
public:
AZ_COMPONENT(ScriptCanvasAssetNode, "{65A34956-B6ED-4EB2-966C-5BC844F7B05E}", ScriptCanvas::Node);
static void Reflect(AZ::ReflectContext* context);
ScriptCanvasAssetNode() = default;
ScriptCanvasAssetNode(const AZ::Data::Asset<ScriptCanvasAsset>& scriptCanvasAsset, bool storeAssetDataInternally);
~ScriptCanvasAssetNode() override;
// AZ::Component
static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
{
provided.push_back(AZ_CRC("ScriptCanvas_AssetService", 0x17a357ae));
}
static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
{
incompatible.push_back(AZ_CRC("ScriptCanvas_AssetService", 0x17a357ae));
}
static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent)
{
(void)dependent;
}
static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
{
(void)required;
}
////
void OnInit() override;
// Retrieves the asset associated with this node
AZ::Data::Asset<ScriptCanvasAsset>& GetAsset();
const AZ::Data::Asset<ScriptCanvasAsset>& GetAsset() const;
// Sets the asset associated with this node
void SetAsset(const AZ::Data::Asset<ScriptCanvasAsset>& scriptCanvasAsset);
bool GetAssetDataStoredInternally() const;
void SetAssetDataStoredInternally(bool storeInObjectStream);
ScriptCanvas::ScriptCanvasData& GetScriptCanvasData();
const ScriptCanvas::ScriptCanvasData& GetScriptCanvasData() const;
AZ::Entity* GetScriptCanvasEntity() const;
using VisitCB = AZStd::function<bool(ScriptCanvasAssetNode& scriptCanvasAssetNode)>;
bool Visit(const VisitCB& preVisitCB, const VisitCB & postVisitCB);
bool Visit(const VisitCB& preVisitCB, const VisitCB & postVisitCB, AZStd::unordered_set<AZ::Data::AssetId>& visitedGraphs);
////
protected:
void OnInputSignal(const ScriptCanvas::SlotId&) override;
// AssetBus::Handler
void OnAssetReloaded(AZ::Data::Asset<AZ::Data::AssetData> asset) override;
void OnAssetUnloaded(const AZ::Data::AssetId assetId, const AZ::Data::AssetType) override;
////
friend class ScriptCanvasAssetNodeEventHandler;
void ComputeDataPatch();
void ApplyDataPatch();
private:
ScriptCanvasAssetNode(const ScriptCanvasAssetNode&) = delete;
//! References to the Script Canvas asset used by this component
ScriptCanvasAssetInstance m_scriptCanvasAssetInstance;
};
}
@@ -13,10 +13,6 @@
#include <AzCore/Serialization/EditContext.h>
#include <Editor/Assets/ScriptCanvasAssetHolder.h>
#include <Editor/Assets/ScriptCanvasAssetReference.h>
#include <Editor/Assets/ScriptCanvasAssetInstance.h>
#include <Editor/Nodes/EditorLibrary.h>
#include <Editor/View/Dialogs/SettingsDialog.h>
#include <Editor/View/Widgets/LoggingPanel/LiveWindowSession/LiveLoggingWindowSession.h>
@@ -36,12 +32,9 @@ namespace ScriptCanvasEditor
void ReflectComponent::Reflect(AZ::ReflectContext* context)
{
ScriptCanvas::ScriptCanvasData::Reflect(context);
ScriptCanvasAssetReference::Reflect(context);
ScriptCanvasAssetInstance::Reflect(context);
ScriptCanvasAssetHolder::Reflect(context);
EditorSettings::EditorWorkspace::Reflect(context);
EditorSettings::ScriptCanvasEditorSettings::Reflect(context);
Library::Editor::Reflect(context);
LiveLoggingUserSettings::Reflect(context);
UndoData::Reflect(context);
@@ -59,7 +52,6 @@ namespace ScriptCanvasEditor
CreateEBusHandlerMimeEvent::Reflect(context);
CreateEBusHandlerEventMimeEvent::Reflect(context);
CreateEBusSenderMimeEvent::Reflect(context);
CreateEntityRefNodeMimeEvent::Reflect(context);
CreateGetVariableNodeMimeEvent::Reflect(context);
CreateSetVariableNodeMimeEvent::Reflect(context);
CreateVariableChangedNodeMimeEvent::Reflect(context);
@@ -35,7 +35,6 @@
#include <Editor/Model/EntityMimeDataHandler.h>
#include <Libraries/Libraries.h>
#include <Editor/Nodes/EditorLibrary.h>
#include <ScriptCanvas/Components/EditorGraph.h>
#include <ScriptCanvas/Components/EditorGraphVariableManagerComponent.h>
@@ -53,7 +52,6 @@
#include <Editor/GraphCanvas/Components/NodeDescriptors/ScriptEventReceiverNodeDescriptorComponent.h>
#include <Editor/GraphCanvas/Components/NodeDescriptors/ScriptEventSenderNodeDescriptorComponent.h>
#include <Editor/GraphCanvas/Components/NodeDescriptors/EBusSenderNodeDescriptorComponent.h>
#include <Editor/GraphCanvas/Components/NodeDescriptors/EntityRefNodeDescriptorComponent.h>
#include <Editor/GraphCanvas/Components/NodeDescriptors/GetVariableNodeDescriptorComponent.h>
#include <Editor/GraphCanvas/Components/NodeDescriptors/NodeDescriptorComponent.h>
#include <Editor/GraphCanvas/Components/NodeDescriptors/NodelingDescriptorComponent.h>
@@ -108,7 +106,6 @@ namespace ScriptCanvas
ScriptCanvasEditor::ScriptEventReceiverNodeDescriptorComponent::CreateDescriptor(),
ScriptCanvasEditor::ScriptEventSenderNodeDescriptorComponent::CreateDescriptor(),
ScriptCanvasEditor::EBusSenderNodeDescriptorComponent::CreateDescriptor(),
ScriptCanvasEditor::EntityRefNodeDescriptorComponent::CreateDescriptor(),
ScriptCanvasEditor::VariableNodeDescriptorComponent::CreateDescriptor(),
ScriptCanvasEditor::GetVariableNodeDescriptorComponent::CreateDescriptor(),
ScriptCanvasEditor::SetVariableNodeDescriptorComponent::CreateDescriptor(),
@@ -117,10 +114,6 @@ namespace ScriptCanvas
ScriptCanvasEditor::FunctionDefinitionNodeDescriptorComponent::CreateDescriptor(),
ScriptCanvasEditor::NodelingDescriptorComponent::CreateDescriptor()
});
auto libraryDescriptors = ScriptCanvasEditor::GetLibraryDescriptors();
m_descriptors.insert(m_descriptors.end(), libraryDescriptors.begin(), libraryDescriptors.end());
ScriptCanvasEditor::Library::Editor::InitNodeRegistry(GetNodeRegistry().Get());
}
AZ::ComponentTypeList ScriptCanvasModule::GetRequiredSystemComponents() const
@@ -47,8 +47,6 @@
#include <AzFramework/IO/FileOperations.h>
#include <AzCore/Serialization/Utils.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
namespace ScriptCanvasEditor
{
static const size_t cs_jobThreads = 1;
@@ -332,12 +330,6 @@ namespace ScriptCanvasEditor
isScriptCanvasAsset = true;
}
ScriptCanvasFunctionDescription scriptCanvasFunctionAssetDescription;
if (!isScriptCanvasAsset && AZStd::wildcard_match(AZStd::string::format("*%s", scriptCanvasFunctionAssetDescription.GetExtensionImpl()).c_str(), fullSourceFileName))
{
isScriptCanvasAsset = true;
}
if (isScriptCanvasAsset)
{
auto scriptCanvasEditorCallback = [this]([[maybe_unused]] const char* fullSourceFileNameInCall, const AZ::Uuid& sourceUUIDInCall)
@@ -412,7 +404,7 @@ namespace ScriptCanvasEditor
nullptr,
[this](const AZ::Data::AssetId, const AZ::Data::AssetInfo& assetInfo) {
if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasAsset>() || assetInfo.m_assetType == azrtti_typeid<ScriptCanvasFunctionAsset>())
if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasAsset>())
{
AddAssetToUpgrade(assetInfo);
}
@@ -456,11 +448,7 @@ namespace ScriptCanvasEditor
if (query == m_assetsToConvert.end())
{
if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasFunctionAsset>())
{
m_assetsToConvert.push_front(assetInfo);
}
else if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasAsset>())
if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasAsset>())
{
m_assetsToConvert.push_back(assetInfo);
}
@@ -15,9 +15,6 @@
#include <ScriptCanvas/Bus/NodeIdPair.h>
#include <ScriptCanvas/Bus/RequestBus.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <Editor/View/Widgets/NodePalette/CreateNodeMimeEvent.h>
#include <ScriptCanvas/GraphCanvas/NodeDescriptorBus.h>
@@ -23,7 +23,6 @@
#include <Editor/Settings.h>
#include <Editor/Translation/TranslationHelper.h>
#include <ScriptCanvas/Core/PureData.h>
#include <ScriptCanvas/Data/DataRegistry.h>
#include <ScriptCanvas/Libraries/Libraries.h>
#include <ScriptCanvas/Libraries/Core/GetVariable.h>
@@ -342,12 +341,6 @@ namespace
continue;
}
// Detect primitive types os we avoid making nodes out of them.
// Or anything that is 'pure data' and should be populated through a different mechanism.
if (nodeClassData->m_azRtti && nodeClassData->m_azRtti->IsTypeOf<ScriptCanvas::PureData>())
{
continue;
}
// Skip over some of our more dynamic nodes that we want to populate using different means
else if (nodeClassData->m_azRtti && nodeClassData->m_azRtti->IsTypeOf<ScriptCanvas::Nodes::Core::GetVariableNode>())
{
@@ -1323,56 +1316,6 @@ namespace ScriptCanvasEditor
return identifiers;
}
AZStd::vector<ScriptCanvas::NodeTypeIdentifier> NodePaletteModel::RegisterFunctionInformation(ScriptCanvasFunctionAsset* functionAsset)
{
const AZ::Data::AssetId& assetId = functionAsset->GetId();
FunctionNodeModelInformation* modelInformation = aznew FunctionNodeModelInformation();
modelInformation->m_functionAssetId = assetId;
modelInformation->m_titlePaletteOverride = "FunctionNodeTitlePalette";
modelInformation->m_nodeIdentifier = ScriptCanvas::NodeUtils::ConstructFunctionNodeIdentifier(assetId);
// Temporary until I drive data from the function asset itself
AZStd::string rootPath;
AZ::Data::AssetInfo assetInfo = AssetHelpers::GetAssetInfo(assetId, rootPath);
AZStd::string absolutePath;
AzFramework::StringFunc::Path::Join(rootPath.c_str(), assetInfo.m_relativePath.c_str(), absolutePath);
AZStd::string category = "User Functions";
AZStd::string relativePath;
if (AzFramework::StringFunc::Path::GetFolderPath(assetInfo.m_relativePath.c_str(), relativePath))
{
AZStd::to_lower(relativePath.begin(), relativePath.end());
const AZStd::string root = "scriptcanvas/functions/";
if (relativePath.starts_with(root))
{
relativePath = relativePath.substr(root.size(), relativePath.size() - root.size());
}
category.append("/");
category.append(relativePath);
}
modelInformation->m_categoryPath = category;
AzFramework::StringFunc::Path::Normalize(absolutePath);
AzFramework::StringFunc::Path::GetFileName(absolutePath.c_str(), modelInformation->m_displayName);
////
m_registeredNodes.emplace(AZStd::make_pair(modelInformation->m_nodeIdentifier, modelInformation));
m_assetMapping.insert(AZStd::make_pair(assetId, modelInformation->m_nodeIdentifier));
AZStd::vector<ScriptCanvas::NodeTypeIdentifier> nodeTypeIdentifiers;
nodeTypeIdentifiers.push_back(modelInformation->m_nodeIdentifier);
return nodeTypeIdentifiers;
}
void NodePaletteModel::RegisterCategoryInformation(const AZStd::string& category, const CategoryInformation& categoryInformation)
{
auto categoryIter = m_categoryInformation.find(category);
@@ -1559,24 +1502,6 @@ namespace ScriptCanvasEditor
AZ_TracePrintf("NodePaletteModel", "Could not refresh node palette properly, the asset failed to load correctly.");
}
}
else if (productEntry->GetAssetType() == azrtti_typeid<ScriptCanvasFunctionAsset>())
{
const AZ::Data::AssetId& assetId = productEntry->GetAssetId();
auto functionAsset = AZ::Data::AssetManager::Instance().GetAsset(assetId, azrtti_typeid<ScriptCanvasFunctionAsset>(), AZ::Data::AssetLoadBehavior::PreLoad);
functionAsset.BlockUntilLoadComplete();
if (functionAsset.IsReady())
{
ScriptCanvasFunctionAsset* data = functionAsset.GetAs<ScriptCanvasFunctionAsset>();
return RegisterFunctionInformation(data);
}
else
{
AZ_TracePrintf("NodePaletteModel", "Could not refresh node palette properly, the asset failed to load correctly.");
}
}
}
}
@@ -22,7 +22,6 @@
#include <Editor/View/Widgets/NodePalette/NodePaletteModelBus.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <ScriptCanvas/Asset/RuntimeAsset.h>
#include <ScriptCanvas/Core/Core.h>
@@ -87,7 +86,6 @@ namespace ScriptCanvasEditor
// Asset Based Registrations
AZStd::vector<ScriptCanvas::NodeTypeIdentifier> RegisterScriptEvent(ScriptEvents::ScriptEventsAsset* scriptEventAsset);
AZStd::vector<ScriptCanvas::NodeTypeIdentifier> RegisterFunctionInformation(ScriptCanvasFunctionAsset* functionAsset);
void RegisterCategoryInformation(const AZStd::string& category, const CategoryInformation& categoryInformation);
const CategoryInformation* FindCategoryInformation(const AZStd::string& categoryStyle) const;
@@ -24,51 +24,9 @@
#include "Editor/GraphCanvas/GraphCanvasEditorNotificationBusId.h"
#include <Core/Attributes.h>
#include <Libraries/Entity/EntityRef.h>
namespace ScriptCanvasEditor
{
/////////////////////////////////
// CreateEntityRefNodeMimeEvent
/////////////////////////////////
void CreateEntityRefNodeMimeEvent::Reflect(AZ::ReflectContext* reflectContext)
{
AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(reflectContext);
if (serializeContext)
{
serializeContext->Class<CreateEntityRefNodeMimeEvent, GraphCanvas::GraphCanvasMimeEvent>()
->Version(0)
->Field("EntityId", &CreateEntityRefNodeMimeEvent::m_entityId)
;
}
}
CreateEntityRefNodeMimeEvent::CreateEntityRefNodeMimeEvent(const AZ::EntityId& entityId)
: m_entityId(entityId)
{
}
ScriptCanvasEditor::NodeIdPair CreateEntityRefNodeMimeEvent::CreateNode(const ScriptCanvas::ScriptCanvasId& scriptCanvasId) const
{
return Nodes::CreateEntityNode(m_entityId, scriptCanvasId);
}
/////////////////////////////////
// EntityRefNodePaletteTreeItem
/////////////////////////////////
EntityRefNodePaletteTreeItem::EntityRefNodePaletteTreeItem(AZStd::string_view nodeName, [[maybe_unused]] const QString& iconPath)
: DraggableNodePaletteTreeItem(nodeName, ScriptCanvasEditor::AssetEditorId)
{
}
GraphCanvas::GraphCanvasMimeEvent* EntityRefNodePaletteTreeItem::CreateMimeEvent() const
{
return aznew CreateEntityRefNodeMimeEvent();
}
///////////////////////////////
// CreateCommentNodeMimeEvent
///////////////////////////////
@@ -11,39 +11,6 @@
namespace ScriptCanvasEditor
{
// <EntityRefNode>
class CreateEntityRefNodeMimeEvent
: public CreateNodeMimeEvent
{
public:
AZ_RTTI(CreateEntityRefNodeMimeEvent, "{20CD5AF5-216E-4A41-9630-191C2803899B}", CreateNodeMimeEvent);
AZ_CLASS_ALLOCATOR(CreateEntityRefNodeMimeEvent, AZ::SystemAllocator, 0);
static void Reflect(AZ::ReflectContext* reflectContext);
CreateEntityRefNodeMimeEvent() = default;
CreateEntityRefNodeMimeEvent(const AZ::EntityId& entityId);
~CreateEntityRefNodeMimeEvent() = default;
protected:
ScriptCanvasEditor::NodeIdPair CreateNode(const ScriptCanvas::ScriptCanvasId& scriptCanvasId) const override;
private:
AZ::EntityId m_entityId;
};
class EntityRefNodePaletteTreeItem
: public GraphCanvas::DraggableNodePaletteTreeItem
{
public:
AZ_CLASS_ALLOCATOR(EntityRefNodePaletteTreeItem, AZ::SystemAllocator, 0);
EntityRefNodePaletteTreeItem(AZStd::string_view nodeName, const QString& iconPath);
~EntityRefNodePaletteTreeItem() = default;
GraphCanvas::GraphCanvasMimeEvent* CreateMimeEvent() const override;
};
// </EntityRefNode>
// <CommentNode>
class CreateCommentNodeMimeEvent
: public SpecializedCreateNodeMimeEvent
@@ -30,8 +30,6 @@
#include "Editor/Include/ScriptCanvas/GraphCanvas/NodeDescriptorBus.h"
#include <Core/Attributes.h>
#include <Libraries/Core/Assign.h>
#include <Libraries/Core/BehaviorContextObjectNode.h>
#include <Libraries/Core/Method.h>
#include <Editor/GraphCanvas/GraphCanvasEditorNotificationBusId.h>
@@ -60,7 +60,6 @@
#include <ScriptCanvas/Libraries/Core/GetVariable.h>
#include <ScriptCanvas/Libraries/Core/Method.h>
#include <ScriptCanvas/Libraries/Core/SetVariable.h>
#include <ScriptCanvas/Libraries/Entity/EntityRef.h>
#include <ScriptCanvas/Libraries/Libraries.h>
#include <ScriptCanvas/Utils/NodeUtils.h>
#include <ScriptEvents/ScriptEventsAsset.h>
@@ -224,7 +223,7 @@ namespace ScriptCanvasEditor
void ScriptCanvasRootPaletteTreeItem::SetActiveScriptCanvasId(const ScriptCanvas::ScriptCanvasId& scriptCanvasId)
{
ScriptCanvas::RuntimeRequestBus::EventResult(m_previousAssetId, scriptCanvasId, &ScriptCanvas::RuntimeRequests::GetAssetId);
ScriptCanvas::GraphRequestBus::EventResult(m_previousAssetId, scriptCanvasId, &ScriptCanvas::GraphRequests::GetAssetId);
for (auto functionTreePair : m_globalFunctionTreeItems)
{
@@ -16,7 +16,6 @@
#include <Editor/GraphCanvas/GraphCanvasEditorNotificationBusId.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <ScriptCanvas/Bus/RequestBus.h>
namespace
@@ -181,8 +180,7 @@ namespace ScriptCanvasEditor
{
AZ::Data::AssetInfo assetInfo;
AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetInfoById, assetId);
if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasAsset>()
|| assetInfo.m_assetType == azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>())
if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasAsset>())
{
m_scriptCanvasAssetTreeRoot->RegisterAsset(assetId, assetInfo.m_assetType);
}
@@ -197,8 +195,7 @@ namespace ScriptCanvasEditor
{
AZ::Data::AssetInfo assetInfo;
AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetInfoById, assetId);
if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasAsset>()
|| assetInfo.m_assetType == azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>())
if (assetInfo.m_assetType == azrtti_typeid<ScriptCanvasAsset>())
{
m_scriptCanvasAssetTreeRoot->RemoveAsset(assetId);
}
@@ -440,8 +437,7 @@ namespace ScriptCanvasEditor
{
const AzToolsFramework::AssetBrowser::ProductAssetBrowserEntry* productEntry = static_cast<const AzToolsFramework::AssetBrowser::ProductAssetBrowserEntry*>(entry);
if (productEntry->GetAssetType() == azrtti_typeid<ScriptCanvasAsset>()
|| productEntry->GetAssetType() == azrtti_typeid<ScriptCanvasEditor::ScriptCanvasFunctionAsset>())
if (productEntry->GetAssetType() == azrtti_typeid<ScriptCanvasAsset>())
{
const AZ::Data::AssetId& assetId = productEntry->GetAssetId();
@@ -31,7 +31,6 @@
#include <Editor/View/Widgets/ScriptCanvasNodePaletteDockWidget.h>
#include <Editor/View/Widgets/NodePalette/VariableNodePaletteTreeItemTypes.h>
#include <ScriptCanvas/Asset/RuntimeAsset.h>
#include <ScriptCanvas/Execution/RuntimeBus.h>
#include <ScriptCanvas/Bus/RequestBus.h>
#include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
@@ -722,7 +721,7 @@ namespace ScriptCanvasEditor
ScriptCanvas::GraphVariableManagerNotificationBus::Handler::BusDisconnect();
m_assetType = AZ::Data::AssetType::CreateNull();
ScriptCanvas::RuntimeRequestBus::EventResult(m_assetType, scriptCanvasId, &ScriptCanvas::RuntimeRequests::GetAssetType);
ScriptCanvas::GraphRequestBus::EventResult(m_assetType, scriptCanvasId, &ScriptCanvas::GraphRequests::GetAssetType);
m_scriptCanvasId = scriptCanvasId;
@@ -1054,9 +1053,6 @@ namespace ScriptCanvasEditor
AZ::SerializeContext* serializeContext = AZ::EntityUtils::GetApplicationSerializeContext();
AZ::Utils::LoadObjectFromBufferInPlace(byteArray.constData(), static_cast<AZStd::size_t>(byteArray.size()), copiedVariableData, serializeContext);
bool isRuntimeGraph = false;
EditorGraphRequestBus::EventResult(isRuntimeGraph, scriptCanvasId, &EditorGraphRequests::IsRuntimeGraph);
ScriptCanvas::GraphVariableManagerRequests* requests = ScriptCanvas::GraphVariableManagerRequestBus::FindFirstHandler(scriptCanvasId);
if (requests == nullptr)
@@ -50,7 +50,6 @@
#include <ScriptCanvas/Core/NodeBus.h>
#include <ScriptCanvas/Data/DataRegistry.h>
#include <ScriptCanvas/Execution/RuntimeBus.h>
#include <ScriptCanvas/GraphCanvas/NodeDescriptorBus.h>
#include <ScriptCanvas/Asset/RuntimeAsset.h>
@@ -50,7 +50,6 @@
#include <ScriptCanvas/Core/NodeBus.h>
#include <ScriptCanvas/Data/DataRegistry.h>
#include <ScriptCanvas/Execution/RuntimeBus.h>
#include <ScriptCanvas/GraphCanvas/NodeDescriptorBus.h>
#include <ScriptCanvas/Asset/RuntimeAsset.h>
@@ -757,9 +756,9 @@ namespace ScriptCanvasEditor
AZStd::vector<AZ::EntityId> selection;
ScriptCanvas::RuntimeRequests* runtimeRequests = ScriptCanvas::RuntimeRequestBus::FindFirstHandler(m_scriptCanvasId);
auto owningGraph = ScriptCanvas::GraphRequestBus::FindFirstHandler(m_scriptCanvasId);
if (runtimeRequests == nullptr)
if (owningGraph == nullptr)
{
return;
}
@@ -770,7 +769,7 @@ namespace ScriptCanvasEditor
if (propertiesComponent)
{
ScriptCanvas::GraphVariable* graphVariable = runtimeRequests->FindVariableById(varId);;
ScriptCanvas::GraphVariable* graphVariable = owningGraph->FindVariableById(varId);;
propertiesComponent->SetVariable(graphVariable);
selection.push_back(propertiesComponent->GetEntityId());
@@ -150,8 +150,6 @@
#include <ScriptCanvas/Asset/AssetDescription.h>
#include <ScriptCanvas/Components/EditorScriptCanvasComponent.h>
#include <ScriptCanvas/Assets/Functions/ScriptCanvasFunctionAssetHandler.h>
#include <ScriptCanvas/Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
#include <Editor/QtMetaTypes.h>
@@ -264,14 +262,7 @@ namespace ScriptCanvasEditor
if (editorRequests)
{
if (editorRequests->IsFunctionGraph())
{
assetSaveData.m_assetType = azrtti_typeid<ScriptCanvasFunctionAsset>();
}
else
{
assetSaveData.m_assetType = azrtti_typeid<ScriptCanvasAsset>();
}
assetSaveData.m_assetType = azrtti_typeid<ScriptCanvasAsset>();
}
activeAssets.push_back(assetSaveData);
@@ -1303,8 +1294,7 @@ namespace ScriptCanvasEditor
return AZ::Failure(AZStd::string("Unknown AssetId"));
}
if (assetInfo.m_assetType != azrtti_typeid<ScriptCanvasAsset>() &&
assetInfo.m_assetType != azrtti_typeid<ScriptCanvasFunctionAsset>())
if (assetInfo.m_assetType != azrtti_typeid<ScriptCanvasAsset>())
{
return AZ::Failure(AZStd::string("Invalid AssetId provided, it's not a Script Canvas supported type"));
}
@@ -3680,10 +3670,6 @@ namespace ScriptCanvasEditor
{
buttonEnabled = false;
}
else
{
EditorGraphRequestBus::EventResult(buttonEnabled, GetActiveScriptCanvasId(), &EditorGraphRequests::IsRuntimeGraph);
}
m_assignToSelectedEntity->setEnabled(buttonEnabled);
}
@@ -55,59 +55,6 @@
namespace ScriptCanvasEditor
{
//////////////////////////////
// AddSelectedEntitiesAction
//////////////////////////////
AddSelectedEntitiesAction::AddSelectedEntitiesAction(QObject* parent)
: GraphCanvas::ContextMenuAction("", parent)
{
}
GraphCanvas::ActionGroupId AddSelectedEntitiesAction::GetActionGroupId() const
{
return AZ_CRC("EntityActionGroup", 0x17e16dfe);
}
void AddSelectedEntitiesAction::RefreshAction(const GraphCanvas::GraphId&, const AZ::EntityId&)
{
AzToolsFramework::EntityIdList selectedEntities;
AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntities, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities);
setEnabled(!selectedEntities.empty());
if (selectedEntities.size() <= 1)
{
setText("Reference selected entity");
}
else
{
setText("Reference selected entities");
}
}
GraphCanvas::ContextMenuAction::SceneReaction AddSelectedEntitiesAction::TriggerAction(const AZ::EntityId& graphCanvasGraphId, const AZ::Vector2& scenePos)
{
AzToolsFramework::EntityIdList selectedEntities;
AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntities, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities);
ScriptCanvas::ScriptCanvasId scriptCanvasId;
GeneralRequestBus::BroadcastResult(scriptCanvasId, &GeneralRequests::GetScriptCanvasId, graphCanvasGraphId);
GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::ClearSelection);
AZ::Vector2 addPosition = scenePos;
for (const AZ::EntityId& id : selectedEntities)
{
NodeIdPair nodePair = Nodes::CreateEntityNode(id, scriptCanvasId);
GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::AddNode, nodePair.m_graphCanvasId, addPosition, false);
addPosition += AZ::Vector2(20, 20);
}
return GraphCanvas::ContextMenuAction::SceneReaction::PostUndo;
}
////////////////////////////
// EndpointSelectionAction
////////////////////////////
@@ -860,12 +807,6 @@ namespace ScriptCanvasEditor
{
const bool inContextMenu = true;
Widget::ScriptCanvasNodePaletteConfig paletteConfig(paletteModel, assetModel, inContextMenu);
m_addSelectedEntitiesAction = aznew AddSelectedEntitiesAction(this);
AddActionGroup(m_addSelectedEntitiesAction->GetActionGroupId());
AddMenuAction(m_addSelectedEntitiesAction);
AddNodePaletteMenuAction(paletteConfig);
}
@@ -905,8 +846,6 @@ namespace ScriptCanvasEditor
m_graphCanvasConstructGroups.SetCommentsEnabled(false);
m_nodeGroupPresets.SetEnabled(false);
m_alignmentActionsGroups.SetEnabled(false);
m_addSelectedEntitiesAction->setEnabled(false);
}
//////////////////////////
@@ -32,22 +32,6 @@ namespace ScriptCanvasEditor
// CustomActions
//////////////////
class AddSelectedEntitiesAction
: public GraphCanvas::ContextMenuAction
{
Q_OBJECT
public:
AZ_CLASS_ALLOCATOR(AddSelectedEntitiesAction, AZ::SystemAllocator, 0);
AddSelectedEntitiesAction(QObject* parent);
virtual ~AddSelectedEntitiesAction() = default;
GraphCanvas::ActionGroupId GetActionGroupId() const override;
void RefreshAction(const GraphCanvas::GraphId& graphCanvasGraphId, const AZ::EntityId& targetId) override;
SceneReaction TriggerAction(const GraphCanvas::GraphId& graphCanvasGraphId, const AZ::Vector2& scenePos) override;
};
class EndpointSelectionAction
: public QAction
{
@@ -217,8 +201,6 @@ namespace ScriptCanvasEditor
protected:
AZ::EntityId m_sourceSlotId;
AddSelectedEntitiesAction* m_addSelectedEntitiesAction;
};
class ConnectionContextMenu
@@ -16,8 +16,6 @@
#include "UpgradeHelper.h"
#include <Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <AzCore/Component/ComponentApplicationBus.h>
#include <AzCore/Component/TickBus.h>
#include <AzCore/IO/SystemFile.h>
@@ -12,8 +12,6 @@
#include "UpgradeTool.h"
#include <Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <AzCore/Component/ComponentApplicationBus.h>
#include <AzCore/Component/TickBus.h>
#include <AzCore/IO/SystemFile.h>
@@ -284,10 +282,6 @@ namespace ScriptCanvasEditor
{
tmpFilesaved = AZ::Utils::SaveObjectToStream<ScriptCanvas::ScriptCanvasData>(fileStream, AZ::DataStream::ST_XML, &asset.GetAs<ScriptCanvasAsset>()->GetScriptCanvasData());
}
else if (asset.GetType() == azrtti_typeid<ScriptCanvasFunctionAsset>())
{
tmpFilesaved = AZ::Utils::SaveObjectToStream<ScriptCanvas::ScriptCanvasData>(fileStream, AZ::DataStream::ST_XML, &asset.GetAs<ScriptCanvasFunctionAsset>()->GetScriptCanvasData());
}
fileStream.Close();
}
@@ -708,10 +702,6 @@ namespace ScriptCanvasEditor
{
scriptCanvasEntity = UpgradeGraph<ScriptCanvasAsset>(asset, this);
}
else if (asset.GetType() == azrtti_typeid<ScriptCanvasFunctionAsset>())
{
scriptCanvasEntity = UpgradeGraph<ScriptCanvasFunctionAsset>(asset, this);
}
if (!scriptCanvasEntity)
{
@@ -16,8 +16,6 @@
#include "VersionExplorer.h"
#include <Asset/Functions/ScriptCanvasFunctionAsset.h>
#include <AzCore/Asset/AssetManagerBus.h>
#include <AzCore/Component/ComponentApplicationBus.h>
#include <AzCore/Component/TickBus.h>
@@ -323,10 +321,6 @@ namespace ScriptCanvasEditor
{
m_scriptCanvasEntity = UpgradeGraphProcess<ScriptCanvasAsset>(asset, this);
}
else if (asset.GetType() == azrtti_typeid<ScriptCanvasFunctionAsset>())
{
m_scriptCanvasEntity = UpgradeGraphProcess<ScriptCanvasFunctionAsset>(asset, this);
}
if (!m_scriptCanvasEntity)
{
@@ -358,10 +352,6 @@ namespace ScriptCanvasEditor
{
tmpFilesaved = AZ::Utils::SaveObjectToStream<ScriptCanvas::ScriptCanvasData>(fileStream, AZ::DataStream::ST_XML, &asset.GetAs<ScriptCanvasAsset>()->GetScriptCanvasData());
}
else if (asset.GetType() == azrtti_typeid<ScriptCanvasFunctionAsset>())
{
tmpFilesaved = AZ::Utils::SaveObjectToStream<ScriptCanvas::ScriptCanvasData>(fileStream, AZ::DataStream::ST_XML, &asset.GetAs<ScriptCanvasFunctionAsset>()->GetScriptCanvasData());
}
fileStream.Close();
}
@@ -647,17 +637,6 @@ namespace ScriptCanvasEditor
scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity();
AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity");
}
else if (asset.GetType() == azrtti_typeid<ScriptCanvasFunctionAsset>())
{
ScriptCanvasFunctionAsset* scriptCanvasAsset = asset.GetAs<ScriptCanvasFunctionAsset>();
if (!scriptCanvasAsset)
{
return;
}
scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity();
AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity");
}
auto graphComponent = scriptCanvasEntity->FindComponent<ScriptCanvasEditor::Graph>();
AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component");