diff --git a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.cpp b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.cpp index fe89c57009..31b63e8fad 100644 --- a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.cpp +++ b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.cpp @@ -16,6 +16,38 @@ #include #include +namespace BuildVariableOverridesCpp +{ + enum Version + { + EditorAssetRedux, + + // add description above + Current + }; + + bool VersionConverter + ( [[maybe_unused]] AZ::SerializeContext& serializeContext + , [[maybe_unused]] AZ::SerializeContext::DataElementNode& rootElement) + { + // #sc_editor_asset +// ScriptCanvasBuilder::BuildVariableOverrides overrides; +// overrides.m_source = SourceHandle(nullptr, assetHolder.GetAssetId().m_guid, {}); +// +// for (auto& variable : editableData.GetVariables()) +// { +// overrides.m_overrides.push_back(variable.m_graphVariable); +// } +// +// if (!rootElement.AddElementWithData(serializeContext, "runtimeDataOverrides", overrides)) +// { +// AZ_Error("ScriptCanvas", false, "EditorScriptCanvasComponent conversion failed: failed to add 'runtimeDataOverrides'"); +// return false; +// } + return true; + } +} + namespace ScriptCanvasBuilder { void BuildVariableOverrides::Clear() @@ -109,7 +141,7 @@ namespace ScriptCanvasBuilder if (auto serializeContext = azrtti_cast(reflectContext)) { serializeContext->Class() - ->Version(1) + ->Version(BuildVariableOverridesCpp::Version::Current, &BuildVariableOverridesCpp::VersionConverter) ->Field("source", &BuildVariableOverrides::m_source) ->Field("variables", &BuildVariableOverrides::m_variables) ->Field("entityId", &BuildVariableOverrides::m_entityIds) diff --git a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.h b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.h index 0dedd67847..5cffa823dc 100644 --- a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.h +++ b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilder.h @@ -49,7 +49,6 @@ namespace ScriptCanvasBuilder // these two variable lists are all that gets exposed to the edit context AZStd::vector m_overrides; AZStd::vector m_overridesUnused; - // AZStd::vector m_entityIdRuntimeInputIndices; since all oSf the entity ids need to go in, they may not need indices AZStd::vector m_dependencies; }; diff --git a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorker.h b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorker.h index e1bf80aa2e..77b90df3e0 100644 --- a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorker.h +++ b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorker.h @@ -59,10 +59,7 @@ namespace ScriptCanvasBuilder PrefabIntegration, CorrectGraphVariableVersion, ReflectEntityIdNodes, - - ForceBuildForDevTest0, - ForceBuildForDevTest1, - ForceBuildForDevTest2, + FixExecutionStateNodeableConstrution, // add new entries above Current, diff --git a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetHolder.cpp b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetHolder.cpp index c5c08d5bbe..f8c89ae7e5 100644 --- a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetHolder.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetHolder.cpp @@ -82,31 +82,6 @@ namespace ScriptCanvasEditor void ScriptCanvasAssetHolder::OpenEditor() const { - // #sc_editor_asset -// AzToolsFramework::OpenViewPane(LyViewPane::ScriptCanvas); -// -// AZ::Outcome openOutcome = AZ::Failure(AZStd::string()); -// -// if (m_scriptCanvasAsset.IsReady()) -// { -// GeneralRequestBus::BroadcastResult(openOutcome, &GeneralRequests::OpenScriptCanvasAsset, m_scriptCanvasAsset.GetId(), -1); -// -// if (!openOutcome) -// { -// AZ_Warning("Script Canvas", openOutcome, "%s", openOutcome.GetError().data()); -// } -// } -// else if (m_ownerId.first.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); -// } -// } } ScriptCanvas::ScriptCanvasId ScriptCanvasAssetHolder::GetScriptCanvasId() const diff --git a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTracker.cpp b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTracker.cpp index 5ec620a907..09b967281d 100644 --- a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTracker.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTracker.cpp @@ -60,109 +60,6 @@ namespace ScriptCanvasEditor void AssetTracker::SaveAs(AZ::Data::AssetId /*assetId*/, const AZStd::string& /*path*/, Callbacks::OnSave /*onSaveCallback*/) { -// auto assetIter = m_assetsInUse.find(assetId); -// -// if (assetIter != m_assetsInUse.end()) -// { -// auto onSave = [this, assetId, onSaveCallback](bool saveSuccess, AZ::Data::AssetPtr asset, AZ::Data::AssetId previousFileAssetId) -// { -// AZ::Data::AssetId signalId = assetId; -// AZ::Data::AssetId fileAssetId = asset->GetId(); -// -// // If there is a previous file Id is valid, it means this is a save-as operation and we need to remap the tracking. -// if (previousFileAssetId.IsValid()) -// { -// if (saveSuccess) -// { -// fileAssetId = m_assetsInUse[assetId]->GetFileAssetId(); -// m_remappedAsset[asset->GetId()] = fileAssetId; -// -// // Erase the asset first so the smart pointer can deal with it's things. -// m_assetsInUse.erase(fileAssetId); -// -// // Then perform the insert once we know nothing will attempt to delete this while we are operating on it. -// m_assetsInUse[fileAssetId] = m_assetsInUse[assetId]; -// m_assetsInUse.erase(assetId); -// } -// -// m_savingAssets.erase(assetId); -// m_savingAssets.insert(fileAssetId); -// -// signalId = fileAssetId; -// -// if (m_queuedCloses.erase(assetId)) -// { -// m_queuedCloses.insert(fileAssetId); -// } -// -// auto assetIter = m_assetsInUse.find(fileAssetId); -// -// if (assetIter != m_assetsInUse.end()) -// { -// AZStd::invoke(onSaveCallback, saveSuccess, m_assetsInUse[fileAssetId]->GetAsset().Get(), previousFileAssetId); -// } -// else -// { -// AZ_Error("ScriptCanvas", !saveSuccess, "Unable to find Memory Asset for Asset(%s)", fileAssetId.ToString().c_str()); -// AZStd::invoke(onSaveCallback, saveSuccess, asset, previousFileAssetId); -// } -// } -// else -// { -// if (saveSuccess) -// { -// // This should be the case when we get a save as from a newly created file. -// // -// // If we find the 'memory' asset id in the assets in use. This means this was a new file that was saved. -// // To maintain all of the look-up stuff, we need to treat this like a remapping stage. -// auto assetInUseIter = m_assetsInUse.find(assetId); -// if (assetInUseIter != m_assetsInUse.end()) -// { -// fileAssetId = assetInUseIter->second->GetFileAssetId(); -// -// if (assetId != fileAssetId) -// { -// m_remappedAsset[assetId] = fileAssetId; -// -// m_assetsInUse.erase(fileAssetId); -// m_assetsInUse[fileAssetId] = AZStd::move(assetInUseIter->second); -// m_assetsInUse.erase(assetId); -// -// m_savingAssets.erase(assetId); -// m_savingAssets.insert(fileAssetId); -// -// if (m_queuedCloses.erase(assetId)) -// { -// m_queuedCloses.insert(fileAssetId); -// } -// } -// } -// else -// { -// fileAssetId = CheckAssetId(fileAssetId); -// } -// -// signalId = fileAssetId; -// } -// -// if (onSaveCallback) -// { -// AZStd::invoke(onSaveCallback, saveSuccess, m_assetsInUse[signalId]->GetAsset().Get(), previousFileAssetId); -// } -// -// AssetTrackerNotificationBus::Broadcast(&AssetTrackerNotifications::OnAssetSaved, m_assetsInUse[signalId], saveSuccess); -// } -// -// SignalSaveComplete(signalId); -// }; -// -// m_savingAssets.insert(assetId); -// assetIter->second->SaveAs(path, onSave); -// } -// else -// { -// AZ_Assert(false, "Cannot SaveAs into an existing AssetId"); -// } } bool AssetTracker::Load(AZ::Data::AssetId fileAssetId, AZ::Data::AssetType assetType, Callbacks::OnAssetReadyCallback onAssetReadyCallback) diff --git a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTracker.h b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTracker.h index 247aba3b94..aa06029c98 100644 --- a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTracker.h +++ b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTracker.h @@ -23,9 +23,6 @@ namespace ScriptCanvasEditor { class ScriptCanvasMemoryAsset; - - // MOVE THIS MOSTLY TO TAB BAR, MAIN WINDOW AND THE CANVAS WIDGET - // This class tracks all things related to the assets that the Script Canvas editor // has in play. It also provides helper functionality to quickly getting asset information // from GraphCanvas diff --git a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTrackerBus.h b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTrackerBus.h index fd50b40768..7125cb7d9b 100644 --- a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTrackerBus.h +++ b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasAssetTrackerBus.h @@ -155,17 +155,5 @@ namespace ScriptCanvasEditor using MemoryAssetSystemNotificationBus = AZ::EBus; } - class MemoryAssetNotifications - : public AZ::EBusTraits - { - public: - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - using BusIdType = AZ::Data::AssetId; - - virtual void OnFileStateChanged(Tracker::ScriptCanvasFileState) {} - }; - - using MemoryAssetNotificationBus = AZ::EBus; ////////////////////////////////////////////////////////////////////////////////////////////////////////// } diff --git a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasMemoryAsset.cpp b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasMemoryAsset.cpp index 7af1aa3d9f..01595e0702 100644 --- a/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasMemoryAsset.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Assets/ScriptCanvasMemoryAsset.cpp @@ -285,8 +285,6 @@ namespace ScriptCanvasEditor ScriptCanvasEditor::Widget::CanvasWidget* ScriptCanvasMemoryAsset::CreateView(QWidget* /*parent*/) { - //m_canvasWidget = new Widget::CanvasWidget(m_fileAssetId, parent); - //return m_canvasWidget; return nullptr; } @@ -433,66 +431,11 @@ namespace ScriptCanvasEditor void ScriptCanvasMemoryAsset::SourceFileFailed(AZStd::string /*relativePath*/, AZStd::string /*scanFolder*/, AZ::Uuid) { -// AZStd::string fullPath; -// AzFramework::StringFunc::Path::Join(scanFolder.data(), relativePath.data(), fullPath); -// AzFramework::ApplicationRequests::Bus::Broadcast(&AzFramework::ApplicationRequests::NormalizePath, fullPath); -// -// auto assetPathIdIt = AZStd::find(m_pendingSave.begin(), m_pendingSave.end(), fullPath); -// -// if (assetPathIdIt != m_pendingSave.end()) -// { -// if (m_onSaveCallback) -// { -// m_onSaveCallback(false, m_inMemoryAsset.Get(), AZ::Data::AssetId()); -// m_onSaveCallback = nullptr; -// } -// -// m_pendingSave.erase(assetPathIdIt); -// } + } void ScriptCanvasMemoryAsset::SavingComplete(const AZStd::string& /*streamName*/, AZ::Uuid /*sourceAssetId*/) { -// AZStd::string normPath = streamName; -// AzFramework::ApplicationRequests::Bus::Broadcast(&AzFramework::ApplicationRequests::NormalizePath, normPath); -// -// auto assetPathIdIt = AZStd::find(m_pendingSave.begin(), m_pendingSave.end(), normPath); -// if (assetPathIdIt != m_pendingSave.end()) -// { -// AZ::Data::AssetId previousFileAssetId; -// -// if (sourceAssetId != m_fileAssetId.m_guid) -// { -// previousFileAssetId = m_fileAssetId; -// -// // The source file has changed, store the AssetId to the canonical asset on file -// SetFileAssetId(sourceAssetId); -// -// } -// else if (!m_fileAssetId.IsValid()) -// { -// SetFileAssetId(sourceAssetId); -// } -// -// m_formerGraphIdPair = AZStd::make_pair(m_scriptCanvasId, m_graphId); -// -// m_fileState = Tracker::ScriptCanvasFileState::UNMODIFIED; -// -// m_pendingSave.erase(assetPathIdIt); -// -// m_absolutePath = m_saveAsPath; -// m_saveAsPath.clear(); -// -// // Connect to the source asset's bus to monitor for situations we may need to handle -// AZ::Data::AssetBus::MultiHandler::BusConnect(m_inMemoryAsset.GetId()); -// AZ::Data::AssetBus::MultiHandler::BusConnect(m_fileAssetId); -// -// if (m_onSaveCallback) -// { -// m_onSaveCallback(true, m_inMemoryAsset.Get(), previousFileAssetId); -// m_onSaveCallback = nullptr; -// } -// } } void ScriptCanvasMemoryAsset::FinalizeAssetSave(bool, const AzToolsFramework::SourceControlFileInfo& fileInfo, const AZ::Data::AssetStreamInfo& saveInfo, Callbacks::OnSave onSaveCallback) @@ -528,17 +471,11 @@ namespace ScriptCanvasEditor void ScriptCanvasMemoryAsset::SetFileAssetId(const AZ::Data::AssetId& /*fileAssetId*/) { -// m_fileAssetId = fileAssetId; -// -// if (m_canvasWidget) -// { -// m_canvasWidget->SetAssetId(fileAssetId); -// } + } void ScriptCanvasMemoryAsset::SignalFileStateChanged() { - MemoryAssetNotificationBus::Event(m_fileAssetId, &MemoryAssetNotifications::OnFileStateChanged, GetFileState()); } AZStd::string ScriptCanvasMemoryAsset::MakeTemporaryFilePathForSave(AZStd::string_view targetFilename) @@ -607,25 +544,6 @@ namespace ScriptCanvasEditor bool AssetSaveFinalizer::ValidateStatus(const AzToolsFramework::SourceControlFileInfo& /*fileInfo*/) { -// auto fileIO = AZ::IO::FileIOBase::GetInstance(); -// if (fileInfo.IsLockedByOther()) -// { -// AZ_Error("Script Canvas", !fileInfo.IsLockedByOther(), "The file is already exclusively opened by another user: %s", fileInfo.m_filePath.data()); -// AZStd::invoke(m_onSave, false, m_inMemoryAsset, m_fileAssetId); -// return false; -// } -// else if (fileInfo.IsReadOnly() && fileIO->Exists(fileInfo.m_filePath.c_str())) -// { -// AZ_Error("Script Canvas", !fileInfo.IsReadOnly(), "File %s is read-only. It cannot be saved." -// " If this file is in Perforce it may not have been checked out by the Source Control API.", fileInfo.m_filePath.data()); -// AZStd::invoke(m_onSave, false, m_inMemoryAsset, m_fileAssetId); -// return false; -// } -// else if (m_saving) -// { -// AZ_Warning("Script Canvas", false, "Trying to save the same file twice. Will result in one save callback being ignored."); -// return false; -// } return true; } diff --git a/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp b/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp index 26fbf85a82..9209196873 100644 --- a/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp @@ -51,8 +51,6 @@ namespace ScriptCanvasEditor { static bool EditorScriptCanvasComponentVersionConverter(AZ::SerializeContext& serializeContext, AZ::SerializeContext::DataElementNode& rootElement) { - AZ_TracePrintf("ScriptCanvas", "EditorScriptCanvasComponentVersionConverter called!"); - if (rootElement.GetVersion() <= 4) { int assetElementIndex = rootElement.FindElement(AZ::Crc32("m_asset")); diff --git a/Gems/ScriptCanvas/Code/Editor/Components/EditorUtils.cpp b/Gems/ScriptCanvas/Code/Editor/Components/EditorUtils.cpp index d21b3d004c..2cd2dda89e 100644 --- a/Gems/ScriptCanvas/Code/Editor/Components/EditorUtils.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Components/EditorUtils.cpp @@ -54,11 +54,7 @@ namespace ScriptCanvasEditor if (assetSystem->GetSourceInfoBySourcePath(fullPathHandle.Path().c_str(), assetInfo, watchFolder) && assetInfo.m_assetId.IsValid()) { - if (assetInfo.m_assetId.m_guid != source.Id()) - { - AZ_TracePrintf("ScriptCanvas", "This is what I don't get"); - } - + AZ_Warning("ScriptCanvas", assetInfo.m_assetId.m_guid == source.Id(), "SourceHandle completion produced conflicting AssetId."); auto path = fullPathHandle.Path(); return SourceHandle(source, assetInfo.m_assetId.m_guid, path.MakePreferred()); } diff --git a/Gems/ScriptCanvas/Code/Editor/Framework/ScriptCanvasTraceUtilities.h b/Gems/ScriptCanvas/Code/Editor/Framework/ScriptCanvasTraceUtilities.h index dfcb0d2643..458852132d 100644 --- a/Gems/ScriptCanvas/Code/Editor/Framework/ScriptCanvasTraceUtilities.h +++ b/Gems/ScriptCanvas/Code/Editor/Framework/ScriptCanvasTraceUtilities.h @@ -163,13 +163,13 @@ namespace ScriptCanvasEditor { ScopedOutputSuppression([[maybe_unused]] bool suppressState = true) { - // AZ::Debug::TraceMessageBus::BroadcastResult(m_oldSuppression, &AZ::Debug::TraceMessageEvents::OnOutput, "", ""); - // TraceSuppressionBus::Broadcast(&TraceSuppressionRequests::SuppressAllOutput, suppressState); + AZ::Debug::TraceMessageBus::BroadcastResult(m_oldSuppression, &AZ::Debug::TraceMessageEvents::OnOutput, "", ""); + TraceSuppressionBus::Broadcast(&TraceSuppressionRequests::SuppressAllOutput, suppressState); } ~ScopedOutputSuppression() { - // TraceSuppressionBus::Broadcast(&TraceSuppressionRequests::SuppressAllOutput, m_oldSuppression); + TraceSuppressionBus::Broadcast(&TraceSuppressionRequests::SuppressAllOutput, m_oldSuppression); } private: bool m_oldSuppression = false; diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/RequestBus.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/RequestBus.h index 15600c2b88..5ec0ee1636 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/RequestBus.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/RequestBus.h @@ -54,7 +54,6 @@ namespace ScriptCanvasEditor NEW, MODIFIED, UNMODIFIED, - // #sc_editor_asset restore this SOURCE_REMOVED, INVALID = -1 }; diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/EditorGraph.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/EditorGraph.h index 8a98601d54..319a835ba5 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/EditorGraph.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/EditorGraph.h @@ -140,10 +140,6 @@ namespace ScriptCanvasEditor void ReleaseVariableCounter(AZ::u32 variableCounter) override; //// - // RuntimeBus - //AZ::Data::AssetId GetAssetId() const override { return m_assetId; } - //// - // GraphCanvas::GraphModelRequestBus void RequestUndoPoint() override; @@ -223,9 +219,6 @@ namespace ScriptCanvasEditor void OnGraphCanvasNodeCreated(const AZ::EntityId& nodeId) override; /////////////////////////// - // EditorGraphRequestBus - // void SetAssetId(const AZ::Data::AssetId& assetId) override { m_assetId = assetId; } - void CreateGraphCanvasScene() override; void ClearGraphCanvasScene() override; void DisplayGraphCanvasScene() override; diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/GraphTabBar.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/GraphTabBar.cpp index 17228565da..b00e2ea3de 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/GraphTabBar.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/GraphTabBar.cpp @@ -251,16 +251,6 @@ namespace ScriptCanvasEditor { if (index >= 0 && index < count()) { - QVariant tabdata = tabData(index); - if (tabdata.isValid()) - { - // #sc_editor_asset fix tabData - auto tabAssetId = tabdata.value(); - - //MemoryAssetNotificationBus::MultiHandler::BusDisconnect(tabAssetId); - //AssetTrackerRequestBus::Broadcast(&AssetTrackerRequests::ClearView, tabAssetId); - } - qobject_cast(parent())->removeTab(index); } } @@ -271,8 +261,6 @@ namespace ScriptCanvasEditor { Q_EMIT TabCloseNoButton(i); } - - MemoryAssetNotificationBus::MultiHandler::BusDisconnect(); } void GraphTabBar::OnContextMenu(const QPoint& point) @@ -289,8 +277,6 @@ namespace ScriptCanvasEditor auto tabAssetId = tabdata.value(); Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID; - //AssetTrackerRequestBus::BroadcastResult(fileState , &AssetTrackerRequests::GetFileState, tabAssetId); - isModified = fileState == Tracker::ScriptCanvasFileState::NEW || fileState == Tracker::ScriptCanvasFileState::MODIFIED; } @@ -362,22 +348,6 @@ namespace ScriptCanvasEditor AzQtComponents::TabBar::mouseReleaseEvent(event); } - void GraphTabBar::OnFileStateChanged(Tracker::ScriptCanvasFileState ) - { - // #sc_editor_asset - // const AZ::Data::AssetId* fileAssetId = MemoryAssetNotificationBus::GetCurrentBusId(); - -// if (fileAssetId) -// { -// SetFileState((*fileAssetId), fileState); -// -// if (FindTab((*fileAssetId)) == currentIndex()) -// { -// Q_EMIT OnActiveFileStateChanged(); -// } -// } - } - void GraphTabBar::SetTabText(int tabIndex, const QString& path, Tracker::ScriptCanvasFileState fileState) { if (tabIndex >= 0 && tabIndex < count()) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/GraphTabBar.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/GraphTabBar.h index 9d86583f76..40b785f016 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/GraphTabBar.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/GraphTabBar.h @@ -42,7 +42,6 @@ namespace ScriptCanvasEditor class GraphTabBar : public AzQtComponents::TabBar - , public MemoryAssetNotificationBus::MultiHandler { Q_OBJECT @@ -63,8 +62,6 @@ namespace ScriptCanvasEditor int InsertGraphTab(int tabIndex, ScriptCanvasEditor::SourceHandle assetId, Tracker::ScriptCanvasFileState fileState); bool SelectTab(ScriptCanvasEditor::SourceHandle assetId); - // void ConfigureTab(int tabIndex, ScriptCanvasEditor::SourceHandle fileAssetId, const AZStd::string& tabName); - int FindTab(ScriptCanvasEditor::SourceHandle assetId) const; ScriptCanvasEditor::SourceHandle FindTabByPath(AZStd::string_view path) const; ScriptCanvasEditor::SourceHandle FindAssetId(int tabIndex); @@ -78,10 +75,6 @@ namespace ScriptCanvasEditor void mouseReleaseEvent(QMouseEvent* event) override; - // MemoryAssetNotifications - void OnFileStateChanged(Tracker::ScriptCanvasFileState fileState) override; - //// - // Updates the tab at the supplied index with the GraphTabMetadata // The host widget field of the tabMetadata is not used and will not overwrite the tab data void SetTabText(int tabIndex, const QString& path, Tracker::ScriptCanvasFileState fileState = Tracker::ScriptCanvasFileState::INVALID); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/LoggingWindowTreeItems.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/LoggingWindowTreeItems.cpp index a9ffe30fb1..636ee832d4 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/LoggingWindowTreeItems.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/LoggingWindowTreeItems.cpp @@ -137,17 +137,6 @@ namespace ScriptCanvasEditor m_additionTimer.start(); } } - - if (m_updatePolicy == UpdatePolicy::SingleTime) - { - // #sc_editor_asset - // treeItem = CreateChildNodeWithoutAddSignal(loggingDataId, nodeType, graphInfo, nodeId); - } - else - { - // #sc_editor_asset - // treeItem = CreateChildNode(loggingDataId, nodeType, graphInfo, nodeId); - } return treeItem; } @@ -207,9 +196,6 @@ namespace ScriptCanvasEditor AZ::NamedEntityId entityName; - // #sc_editor_asset restore this - //LoggingDataRequestBus::EventResult(entityName, m_loggingDataId, &LoggingDataRequests::FindNamedEntityId, m_graphInfo.m_runtimeEntity); - m_sourceEntityName = entityName.ToString().c_str(); m_displayName = nodeId.m_name.c_str(); @@ -514,7 +500,6 @@ namespace ScriptCanvasEditor const ScriptCanvas::GraphIdentifier& ExecutionLogTreeItem::GetGraphIdentifier() const { - // #sc_editor_asset return m_graphIdentifier; } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index d6efe246a0..666467001c 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -1665,42 +1665,6 @@ namespace ScriptCanvasEditor return SaveAssetImpl(m_activeGraph, Save::As); } - /* - bool MainWindow::SaveAssetImpl_OLD(const ScriptCanvasEditor::SourceHandle& assetId, const Callbacks::OnSave& saveCB) - { - if (!assetId.IsValid()) - { - return false; - } - - // TODO: Set graph read-only to prevent edits during save - - bool saveSuccessful = false; - - Tracker::ScriptCanvasFileState fileState = GetAssetFileState(assetId); - - if (fileState == Tracker::ScriptCanvasFileState::NEW) - { - saveSuccessful = SaveAssetImpl(assetId, saveCB); - } - else if (fileState == Tracker::ScriptCanvasFileState::MODIFIED - || fileState == Tracker::ScriptCanvasFileState::SOURCE_REMOVED) - { - SaveAs(assetId.Path(), assetId, saveCB); - saveSuccessful = true; - } - - return saveSuccessful; - } - */ - - - // 1. SaveAssetImpl - // 2. SaveAs - // // 3. OnSaveCallback - // SaveAsEnd - // SaveAssetImpl end - bool MainWindow::SaveAssetImpl(const ScriptCanvasEditor::SourceHandle& inMemoryAssetId, Save save) { if (!inMemoryAssetId.IsGraphValid()) @@ -1768,11 +1732,6 @@ namespace ScriptCanvasEditor AZ::IO::FileIOBase::GetInstance()->ResolvePath("@engroot@", assetRootChar.data(), assetRootChar.size()); assetRoot = assetRootChar.data(); -// if (!AZ::StringFunc::StartsWith(filePath, assetRoot)) -// { -// QMessageBox::information(this, "Unable to Save", AZStd::string::format("You must select a path within the current project\n\n%s", assetRoot.c_str()).c_str()); -// } -// else if (AzFramework::StringFunc::Path::GetFileName(filePath.c_str(), fileName)) { isValidFileName = !(fileName.empty()); @@ -1924,14 +1883,6 @@ namespace ScriptCanvasEditor { m_tabBar->setCurrentIndex(saveTabIndex); } - else - { -// // Something weird happens with our saving. Where we are relying on these scene changes being called. -// ScriptCanvasEditor::SourceHandle previousAssetId = m_activeGraph; -// -// OnChangeActiveGraphTab(ScriptCanvasEditor::SourceHandle()); -// OnChangeActiveGraphTab(previousAssetId); - } UpdateAssignToSelectionState(); @@ -2365,6 +2316,7 @@ namespace ScriptCanvasEditor GraphCanvas::ViewRequestBus::Event(viewId, &GraphCanvas::ViewRequests::CenterOnEndOfChain); } + // #sc_editor_asset void MainWindow::UpdateWorkspaceStatus(const ScriptCanvasMemoryAsset& /*memoryAsset*/) { // only occurs on file open, do it there, if necessary @@ -2656,16 +2608,6 @@ namespace ScriptCanvasEditor void MainWindow::Clear() { m_tabBar->CloseAllTabs(); - // #sc_editor_asset -// -// AssetTrackerRequests::AssetList assets; -// AssetTrackerRequestBus::BroadcastResult(assets, &AssetTrackerRequests::GetAssets); -// -// for (auto asset : assets) -// { -// RemoveScriptCanvasAsset(asset->GetAsset().GetId()); -// } - SetActiveAsset({}); } @@ -4093,32 +4035,6 @@ namespace ScriptCanvasEditor void MainWindow::PrepareAssetForSave(const ScriptCanvasEditor::SourceHandle& /*assetId*/) { - /* - ScriptCanvasMemoryAsset::pointer memoryAsset; - AssetTrackerRequestBus::BroadcastResult(memoryAsset, &AssetTrackerRequests::GetAsset, assetId); - - if (memoryAsset) - { - AZ::EntityId graphId = memoryAsset->GetGraphId(); - AZ::EntityId scriptCanvasId = memoryAsset->GetScriptCanvasId(); - - AZ::Entity* entity = nullptr; - GraphRequestBus::EventResult(entity, scriptCanvasId, &GraphRequests::GetGraphEntity); - - if (entity) - { - GraphCanvas::GraphModelRequestBus::Event(graphId, &GraphCanvas::GraphModelRequests::OnSaveDataDirtied, entity->GetId()); - } - - GraphCanvas::GraphModelRequestBus::Event(graphId, &GraphCanvas::GraphModelRequests::OnSaveDataDirtied, graphId); - - ScriptCanvasEditor::Graph* graph = AZ::EntityUtils::FindFirstDerivedComponent(entity); - if (graph) - { - graph->MarkVersion(); - } - } - */ } void MainWindow::RestartAutoTimerSave(bool forceTimer) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index 888f183151..b8ae59d43b 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -323,13 +323,7 @@ namespace ScriptCanvasEditor m_view->tableWidget->setCellWidget(rowIndex, static_cast(ColumnAction), upgradeButton); } - - char resolvedBuffer[AZ_MAX_PATH_LEN] = { 0 }; - AZStd::string path = AZStd::string::format("@devroot@/%s", assetInfo.Path().c_str()); - AZ::IO::FileIOBase::GetInstance()->ResolvePath(path.c_str(), resolvedBuffer, AZ_MAX_PATH_LEN); - AZ::StringFunc::Path::GetFullPath(resolvedBuffer, path); - AZ::StringFunc::Path::Normalize(path); - + bool result = false; AZ::Data::AssetInfo info; AZStd::string watchFolder; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp index aff212fa4c..9c2c854055 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp @@ -72,19 +72,16 @@ namespace ScriptCanvas componentElementNode.AddElementWithData(context, "m_assetType", azrtti_typeid()); } - if (componentElementNode.GetVersion() <= GraphCpp::GraphVersion::RemoveFunctionGraphMarker) + if (auto subElement = componentElementNode.FindElement(AZ_CRC_CE("isFunctionGraph")); subElement > 0) { - componentElementNode.RemoveElementByName(AZ_CRC_CE("isFunctionGraph")); + componentElementNode.RemoveElement(subElement); } - if (componentElementNode.GetVersion() < GraphCpp::GraphVersion::FixupVersionDataTypeId) + if (auto subElement = componentElementNode.FindSubElement(AZ_CRC_CE("versionData"))) { - if (auto subElement = componentElementNode.FindSubElement(AZ_CRC_CE("versionData"))) + if (subElement->GetId() == azrtti_typeid()) { - if (subElement->GetId() == azrtti_typeid()) - { - componentElementNode.RemoveElementByName(AZ_CRC_CE("versionData")); - } + componentElementNode.RemoveElementByName(AZ_CRC_CE("versionData")); } } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.cpp index 023d46097d..7bb37a87dc 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.cpp @@ -22,16 +22,12 @@ namespace ScriptCanvas Nodeable::Nodeable() : m_noOpFunctor(&NodeableOutCpp::NoOp) - { - AZ_TracePrintf("SCDB", "How many times does this get called? Because it should....NOT GET CALLED!"); - } + {} Nodeable::Nodeable(ExecutionStateWeakPtr executionState) : m_noOpFunctor(&NodeableOutCpp::NoOp) , m_executionState(executionState) - { - AZ_TracePrintf("SCDB", "How many times does this get called 2?"); - } + {} #if !defined(RELEASE) void Nodeable::CallOut(size_t index, AZ::BehaviorValueParameter* resultBVP, AZ::BehaviorValueParameter* argsBVPs, int numArguments) const diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp index c43214eeea..3b95c7895c 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp @@ -68,9 +68,7 @@ namespace ExecutionInterpretedAPICpp { if (lua_isstring(lua, -1)) { - AZStd::string errorResult = lua_tostring(lua, -1); - AZ_TracePrintf("ScriptCanvas", errorResult.c_str()); - AZ::ScriptContext::FromNativeContext(lua)->Error(AZ::ScriptContext::ErrorType::Error, true, "%s", lua_tostring(lua, -1)); + AZ::ScriptContext::FromNativeContext(lua)->Error(AZ::ScriptContext::ErrorType::Error, true, lua_tostring(lua, -1)); } else { @@ -403,51 +401,7 @@ namespace ScriptCanvas // \note: the the object is being constructed, and is assumed to never leave or re-enter Lua again AZ_Assert(lua_isuserdata(lua, -2) && !lua_islightuserdata(lua, -2), "Error in compiled lua file, 1st argument to OverrideNodeableMetatable is not userdata (Nodeable)"); AZ_Assert(lua_istable(lua, -1), "Error in compiled lua file, 2nd argument to OverrideNodeableMetatable is not a Lua table"); - - /* table is in the stack at index 't' */ - if (lua_istable(lua, -1)) - { - lua_getfield(lua, -1, "__index"); - - if (lua_istable(lua, -1)) - { - int t = -2; - AZStd::string tableGuts; - lua_pushnil(lua); - /* first key */ - while (lua_next(lua, t) != 0) - { - /* uses 'key' (at index -2) and 'value' (at index -1) */ - if (lua_type(lua, -2) == LUA_TSTRING) - { - size_t len; - tableGuts += AZStd::string::format("%s - %s\n", - lua_tolstring(lua, -2, &len), - lua_typename(lua, lua_type(lua, -1))); - } - else if (lua_type(lua, -2) == LUA_TNUMBER) - { - tableGuts += AZStd::string::format("%f - %s\n", - lua_tonumber(lua, -2), - lua_typename(lua, lua_type(lua, -1))); - } - else - { - tableGuts += AZStd::string::format("%s - %s\n", - lua_typename(lua, lua_type(lua, -2)), - lua_typename(lua, lua_type(lua, -1))); - } - - /* removes 'value'; keeps 'key' for next iteration */ - lua_pop(lua, 1); - } - - AZ_TracePrintf("SCDB", tableGuts.c_str()); - } - - lua_pop(lua, 1); - } - + [[maybe_unused]] auto userData = reinterpret_cast(lua_touserdata(lua, -2)); AZ_Assert(userData && userData->magicData == AZ_CRC_CE("AZLuaUserData"), "this isn't user data"); // Lua: LuaUserData::nodeable, class_mt diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpretedPerActivation.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpretedPerActivation.cpp index 7ef1e22fbf..425af171c5 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpretedPerActivation.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpretedPerActivation.cpp @@ -111,75 +111,13 @@ namespace ScriptCanvas auto& lua = m_luaState; // Lua: lua_rawgeti(lua, LUA_REGISTRYINDEX, registryIndex); - if (!lua_isuserdata(lua, -1)) - { - AZ_TracePrintf("SCDB", "No light userdata"); - } - // Lua: instance - - lua_getmetatable(lua, -1); - if (!lua_istable(lua, -1)) - { - AZ_TracePrintf("SCDB", "no metatable"); - } - - - /* table is in the stack at index 't' */ - if (lua_istable(lua, -1)) - { - int t = -2; - AZStd::string tableGuts; - lua_pushnil(lua); - /* first key */ - while (lua_next(lua, t) != 0) - { - /* uses 'key' (at index -2) and 'value' (at index -1) */ - if (lua_type(lua, -2) == LUA_TSTRING) - { - size_t len; - tableGuts += AZStd::string::format("%s - %s\n", - lua_tolstring(lua, -2, &len), - lua_typename(lua, lua_type(lua, -1))); - } - else if (lua_type(lua, -2) == LUA_TNUMBER) - { - tableGuts += AZStd::string::format("%f - %s\n", - lua_tonumber(lua, -2), - lua_typename(lua, lua_type(lua, -1))); - } - else - { - tableGuts += AZStd::string::format("%s - %s\n", - lua_typename(lua, lua_type(lua, -2)), - lua_typename(lua, lua_type(lua, -1))); - } - - /* removes 'value'; keeps 'key' for next iteration */ - lua_pop(lua, 1); - } - - AZ_TracePrintf("SCDB", tableGuts.c_str()); - } - - // Lua: instance, instance_mt - lua_pop (lua, 1); - - // Lua: instance lua_getfield(lua, -1, Grammar::k_OnGraphStartFunctionName); // Lua: instance, graph_VM.k_OnGraphStartFunctionName - if (!lua_isfunction(lua, -1)) - { - AZ_TracePrintf("SCDB", "No function"); - } lua_pushvalue(lua, -2); - if (!lua_isuserdata(lua, -1)) - { - AZ_TracePrintf("SCDB", "No light userdata"); - } // Lua: instance, graph_VM.k_OnGraphStartFunctionName, instance const int result = Execution::InterpretedSafeCall(lua, 1, 0); - // Lua: instance ? + // Lua: instance, ? if (result == LUA_OK) { // Lua: instance diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_VM.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_VM.cpp index 2a20ca84df..2c455d80f5 100644 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_VM.cpp +++ b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_VM.cpp @@ -25,126 +25,6 @@ using namespace ScriptCanvasTests; using namespace TestNodes; using namespace ScriptCanvas::Execution; -// TODO: This fails to compile on Linux only -//ScriptCanvas::Grammar::SubgraphInterface* CreateExecutionMap(AZ::BehaviorContext& behaviorContext) -//{ -// using namespace ScriptCanvas; -// using namespace ScriptCanvas::Grammar; -// -// auto ins = CreateInsFromBehaviorContextMethods("TestNodeableObject", behaviorContext, { "Branch" } ); -// auto branchOutVoidTrue = CreateOut("BranchTrue", { "condition", "message" }); -// auto branchOutVoidFalse = CreateOut("BranchFalse", { "condition", "message", "vector" }); -// -// auto branchOut = FindInByName("Branch", ins); -// -// EXPECT_NE(branchOut, nullptr); -// if (branchOut) -// { -// branchOut->outs.emplace_back(AZStd::move(branchOutVoidTrue)); -// branchOut->outs.emplace_back(AZStd::move(branchOutVoidFalse)); -// } -// -// return aznew SubgraphInterface(AZStd::move(ins)); -//} - - -TEST_F(ScriptCanvasTestFixture, TestLuaObjectOrientation) -{ - using namespace ScriptCanvas; - using namespace ScriptCanvas::Grammar; - - AZ::ScriptContext sc; - sc.BindTo(m_behaviorContext); - RegisterAPI(sc.NativeContext()); - EXPECT_TRUE(sc.Execute( - R"LUA( - -assert(Nodeable ~= nil, 'Nodeable was nill') -assert(Nodeable.__call ~= nil, 'Nodeable.__call was nil') -assert(type(Nodeable.__call) == 'function', 'Nodeable.__call was not a function') - -local nodeable = Nodeable() -assert(nodeable ~= nil, 'nodeable was nil') -assert(type(nodeable) == "userdata", 'nodeable not userdata') - -local SubGraph = {} -SubGraph.s_name = "SubGraphery" -SubGraph.s_createdCount = 0 -function SubGraph:IncrementCreated() - SubGraph.s_createdCount = 1 + SubGraph.s_createdCount -end - -setmetatable(SubGraph, { __index = Nodeable }) -- exposed through BehaviorContext -local SubGraphInstanceMetatable = { __index = SubGraph } - -assert(getmetatable(SubGraph).__index == Nodeable, 'getmetatable(SubGraph).__index = Nodeable') -assert(type(getmetatable(SubGraph).__index) == 'table', "type(getmetatable(SubGraph).__index) ~= 'table'") - -function SubGraph.new() -- Add executionState input here and to Nodeable() - -- now individual instance values can be initialized - local instance = OverrideNodeableMetatable(Nodeable(), SubGraphInstanceMetatable) - assert(type(instance.s_createdCount) == 'number', 'subgraph.s_createdCount was not a number') - instance:IncrementCreated() - instance.name = 'SubGraph '..tostring(instance.s_createdCount) - return instance -end - -function SubGraph.newTable() -- Add executionState input here and to Nodeable() - -- now individual instance values can be initialized - local instance = setmetatable({}, SubGraphInstanceMetatable) - -- assert(getmetatable(instance) == SubGraphInstanceMetatable, "subgraphT") - assert(type(instance.s_createdCount) == 'number', 'subgraphT.s_createdCount was not a number') - instance:IncrementCreated() - instance.name = 'SubGraph '..tostring(instance.s_createdCount) - return instance -end - -function SubGraph:Foo() - return "I, " .. tostring(self.name) .. ", am a user function" -end - -local subgraphT = SubGraph.newTable() -assert(subgraphT ~= nil, "subgraphT was nil") -assert(type(subgraphT) == 'table', 'subgraphT was not a table') -assert(type(subgraphT.IsActive)== 'function', "subgraphT IsActive was not a function") -assert(type(subgraphT.Foo) == 'function', 'subgraphT was not a function') -local subgraphTResult = subgraphT:Foo() -assert(subgraphTResult == "I, SubGraph 1, am a user function", 'subgraphT did not return the right results:' .. tostring(subgraphTResult)) -assert(subgraphT.s_createdCount == 1, "subgraphT created count was not one: ".. tostring(subgraphT.s_createdCount)) -subgraphT = SubGraph.newTable() -assert(subgraphT.s_createdCount == 2, "subgraphT created count was not two: ".. tostring(subgraphT.s_createdCount)) - -local subgraph = SubGraph.new() -assert(subgraph ~= nil, "subgraph was nil") -assert(type(subgraph) == 'userdata', 'was not userdata') -assert(type(subgraph.IsActive)== 'function', "IsActive was not a function") -assert(not subgraph.IsActive(subgraph), "did not inherit properly") -assert(not subgraph:IsActive(), "did not inherit properly") -assert(type(subgraph.Foo) == 'function', 'was not a function') -local subgraphResult = subgraph:Foo() -assert(subgraphResult == "I, SubGraph 3, am a user function", 'subgraph:Foo() did not return the right results: ' .. tostring(subgraphResult)) -assert(subgraph.s_createdCount == 3, "created count was not three: "..tostring(subgraph.s_createdCount)) - -local subgraph2 = SubGraph.new() -assert(subgraph2 ~= nil, "subgraph2 was nil") -assert(type(subgraph2) == 'userdata', 'subgraph2 was not userdata') -assert(type(subgraph2.IsActive)== 'function', "subgraph2 IsActive was not a function") -assert(not subgraph2.IsActive(subgraph2), "subgraph2 did not inherit properly") -assert(not subgraph2:IsActive(), "subgraph2 did not inherit properly") -assert(type(subgraph2.Foo) == 'function', 'subgraph2 was not a function') -local subgraph2Result = subgraph2:Foo() -assert(subgraph2Result == "I, SubGraph 4, am a user function", 'subgraph2:Foo() did not return the right results: ' .. tostring(subgraph2Result)) -assert(subgraph2.s_createdCount == 4, "created count was not three: "..tostring(subgraph2.s_createdCount)) - -return SubGraph - -)LUA" -)); - -} - - -// // TEST_F(ScriptCanvasTestFixture, NativeNodeableStack) // { // TestNodeableObject nodeable;