The Great ScriptCanvas Purge, Part V

Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
chcurran
2021-07-06 15:05:37 -07:00
parent 360236b89e
commit 0a910a31aa
66 changed files with 24 additions and 1731 deletions
@@ -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();
}
@@ -1,200 +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::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,91 +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:
// 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;
};
}