From a5a42e3268dd3888327630615cf4c8f3cf82e3d8 Mon Sep 17 00:00:00 2001
From: carlitosan <82187351+carlitosan@users.noreply.github.com>
Date: Tue, 30 Nov 2021 14:05:31 -0800
Subject: [PATCH 1/7] Add dialog window for messaging when SC assets fail to
save
Signed-off-by: carlitosan <82187351+carlitosan@users.noreply.github.com>
---
.../Code/Editor/View/Windows/MainWindow.cpp | 60 ++++++++++++++++++-
.../Code/Editor/View/Windows/MainWindow.h | 10 +++-
2 files changed, 67 insertions(+), 3 deletions(-)
diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
index e61b015aae..778ad9d5b7 100644
--- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
+++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
@@ -914,6 +914,12 @@ namespace ScriptCanvasEditor
void MainWindow::closeEvent(QCloseEvent* event)
{
+ if (m_forceCloseInProgress)
+ {
+ event->accept();
+ return;
+ }
+
// If we are in the middle of saving a graph. We don't want to close ourselves down and potentially retrigger the saving logic.
if (m_queueCloseRequest)
{
@@ -1981,6 +1987,7 @@ namespace ScriptCanvasEditor
EnableAssetView(memoryAsset);
+ ClearSaveAttempt();
UnblockCloseRequests();
}
@@ -1992,6 +1999,7 @@ namespace ScriptCanvasEditor
void MainWindow::SaveAsset(AZ::Data::AssetId assetId, const Callbacks::OnSave& onSave)
{
+ MarkSaveAttempt();
PrepareAssetForSave(assetId);
auto onSaveCallback = [this, onSave](bool saveSuccess, AZ::Data::AssetPtr asset, AZ::Data::AssetId previousAssetId)
@@ -2020,6 +2028,7 @@ namespace ScriptCanvasEditor
void MainWindow::SaveNewAsset(AZStd::string_view path, AZ::Data::AssetId inMemoryAssetId, const Callbacks::OnSave& onSave)
{
+ MarkSaveAttempt();
PrepareAssetForSave(inMemoryAssetId);
auto onSaveCallback = [this, onSave](bool saveSuccess, AZ::Data::AssetPtr asset, AZ::Data::AssetId previousAssetId)
@@ -4213,6 +4222,11 @@ namespace ScriptCanvasEditor
void MainWindow::OnSystemTick()
{
+ if (m_saveAttemptInProgress)
+ {
+ EvaluateSaveAttempt();
+ }
+
if (HasSystemTickAction(SystemTickActionFlag::RefreshPropertyGrid))
{
RemoveSystemTickAction(SystemTickActionFlag::RefreshPropertyGrid);
@@ -4246,13 +4260,56 @@ namespace ScriptCanvasEditor
RemoveSystemTickAction(SystemTickActionFlag::CloseNextTabAction);
CloseNextTab();
}
+ }
- if (m_systemTickActions == 0)
+ void MainWindow::ClearSaveAttempt()
+ {
+ m_saveAttemptInProgress = false;
+
+ if (!m_systemTickActions)
{
AZ::SystemTickBus::Handler::BusDisconnect();
}
}
+ bool MainWindow::EvaluateSaveAttempt()
+ {
+ const AZ::s64 k_saveAttemptSeconds = 20;
+
+ if (m_saveAttemptInProgress)
+ {
+ auto saveDuration = AZStd::chrono::seconds(AZStd::chrono::system_clock::now() - m_saveAttemptTime).count();
+
+ if (saveDuration > k_saveAttemptSeconds)
+ {
+ WarnOnFailedSaveAttempt();
+ }
+ }
+
+ return m_forceCloseInProgress;
+ }
+
+ void MainWindow::MarkSaveAttempt()
+ {
+ m_saveAttemptInProgress = true;
+ m_saveAttemptTime = AZStd::chrono::system_clock::now();
+
+ if (!AZ::SystemTickBus::Handler::BusIsConnected())
+ {
+ AZ::SystemTickBus::Handler::BusConnect();
+ }
+ }
+
+ void MainWindow::WarnOnFailedSaveAttempt()
+ {
+ m_forceCloseInProgress = true;
+ QMessageBox::critical(this, QString(), QObject::tr
+ ("The ScriptCanvas Editor has encountered an external bug which prevents it from tracking the file state.
"
+ "Likely the Asset Processor has crashed. ScriptCanvas files may have saved successfully, but the O3DE Engine and Asset Processor should be restarted before continuing work."));
+ AZ::SystemTickBus::Handler::BusDisconnect();
+ qobject_cast(parent())->close();
+ }
+
void MainWindow::OnCommandStarted(AZ::Crc32)
{
PushPreventUndoStateUpdate();
@@ -4486,7 +4543,6 @@ namespace ScriptCanvasEditor
{
AZ::SystemTickBus::Handler::BusConnect();
}
-
m_systemTickActions |= action;
}
diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h
index 7672f0a199..d73da41219 100644
--- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h
+++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h
@@ -51,7 +51,7 @@
#include
#include
-
+//#include
#include
#if SCRIPTCANVAS_EDITOR
@@ -798,5 +798,13 @@ namespace ScriptCanvasEditor
Workspace* m_workspace;
void OnSaveCallback(bool saveSuccess, AZ::Data::AssetPtr, AZ::Data::AssetId previousFileAssetId);
+
+ bool m_saveAttemptInProgress = false;
+ bool m_forceCloseInProgress = false;
+ AZStd::chrono::system_clock::time_point m_saveAttemptTime;
+ void ClearSaveAttempt();
+ bool EvaluateSaveAttempt();
+ void MarkSaveAttempt();
+ void WarnOnFailedSaveAttempt();
};
}
From 850d36130efb5571a63c14255554927333af971b Mon Sep 17 00:00:00 2001
From: carlitosan <82187351+carlitosan@users.noreply.github.com>
Date: Tue, 30 Nov 2021 15:02:06 -0800
Subject: [PATCH 2/7] update error window message and add AP launch request
Signed-off-by: carlitosan <82187351+carlitosan@users.noreply.github.com>
---
.../Code/Editor/View/Windows/MainWindow.cpp | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
index 778ad9d5b7..ee36fc4212 100644
--- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
+++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
@@ -154,6 +154,7 @@
#include
#include
+#include
namespace ScriptCanvasEditor
{
@@ -4305,9 +4306,14 @@ namespace ScriptCanvasEditor
m_forceCloseInProgress = true;
QMessageBox::critical(this, QString(), QObject::tr
("The ScriptCanvas Editor has encountered an external bug which prevents it from tracking the file state.
"
- "Likely the Asset Processor has crashed. ScriptCanvas files may have saved successfully, but the O3DE Engine and Asset Processor should be restarted before continuing work."));
+ "The ScriptCanvas files in the process of being saved may have saved successfully.
Closing this window will close "
+ "the ScriptCanvas Editor, and request a launch of the Asset Processor.
"
+ "Verify that the Asset Processor or is running before launching the ScriptCanvas Editor again.
"
+ "The status of the Asset Processor can be monitored from the O3DE Editor in the bottom-right corner of the status bar."));
+
+ AzFramework::AssetSystem::LaunchAssetProcessor();
AZ::SystemTickBus::Handler::BusDisconnect();
- qobject_cast(parent())->close();
+ AzToolsFramework::CloseViewPane(LyViewPane::ScriptCanvas);
}
void MainWindow::OnCommandStarted(AZ::Crc32)
From 9e725da597c5a1681d1da73f7d10d2455bed8c7c Mon Sep 17 00:00:00 2001
From: carlitosan <82187351+carlitosan@users.noreply.github.com>
Date: Tue, 30 Nov 2021 15:30:42 -0800
Subject: [PATCH 3/7] removed commented out include
Signed-off-by: carlitosan <82187351+carlitosan@users.noreply.github.com>
---
Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h
index d73da41219..8d84ece968 100644
--- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h
+++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.h
@@ -51,7 +51,6 @@
#include
#include
-//#include
#include
#if SCRIPTCANVAS_EDITOR
From a359244c51f85d6d8894b3874cd15c08838388bd Mon Sep 17 00:00:00 2001
From: carlitosan <82187351+carlitosan@users.noreply.github.com>
Date: Tue, 30 Nov 2021 17:18:27 -0800
Subject: [PATCH 4/7] add pane close to system tick bus
Signed-off-by: carlitosan <82187351+carlitosan@users.noreply.github.com>
---
.../ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
index ee36fc4212..4a20c6bc0d 100644
--- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
+++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
@@ -4275,13 +4275,13 @@ namespace ScriptCanvasEditor
bool MainWindow::EvaluateSaveAttempt()
{
- const AZ::s64 k_saveAttemptSeconds = 20;
+ const AZ::s64 SaveAttemptSeconds = 20;
if (m_saveAttemptInProgress)
{
auto saveDuration = AZStd::chrono::seconds(AZStd::chrono::system_clock::now() - m_saveAttemptTime).count();
- if (saveDuration > k_saveAttemptSeconds)
+ if (saveDuration > SaveAttemptSeconds)
{
WarnOnFailedSaveAttempt();
}
@@ -4313,7 +4313,10 @@ namespace ScriptCanvasEditor
AzFramework::AssetSystem::LaunchAssetProcessor();
AZ::SystemTickBus::Handler::BusDisconnect();
- AzToolsFramework::CloseViewPane(LyViewPane::ScriptCanvas);
+ AZ::SystemTickBus::QueueFunction([]()
+ {
+ AzToolsFramework::CloseViewPane(LyViewPane::ScriptCanvas);
+ });
}
void MainWindow::OnCommandStarted(AZ::Crc32)
From b70545ad94e35203170985dc8e2d864ecfb993e6 Mon Sep 17 00:00:00 2001
From: carlitosan <82187351+carlitosan@users.noreply.github.com>
Date: Thu, 2 Dec 2021 16:07:50 -0800
Subject: [PATCH 5/7] ScriptCanvas --> Script Canvas in comments
Signed-off-by: carlitosan <82187351+carlitosan@users.noreply.github.com>
---
Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
index 4a20c6bc0d..999afd7a9d 100644
--- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
+++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp
@@ -4305,10 +4305,10 @@ namespace ScriptCanvasEditor
{
m_forceCloseInProgress = true;
QMessageBox::critical(this, QString(), QObject::tr
- ("The ScriptCanvas Editor has encountered an external bug which prevents it from tracking the file state.
"
- "The ScriptCanvas files in the process of being saved may have saved successfully.
Closing this window will close "
- "the ScriptCanvas Editor, and request a launch of the Asset Processor.
"
- "Verify that the Asset Processor or is running before launching the ScriptCanvas Editor again.
"
+ ("The Script Canvas Editor has encountered an external bug which prevents it from tracking the file state.
"
+ "The Script Canvas files in the process of being saved may have saved successfully.
Closing this window will close "
+ "the Script Canvas Editor, and request a launch of the Asset Processor.
"
+ "Verify that the Asset Processor is running before launching the Script Canvas Editor again.
"
"The status of the Asset Processor can be monitored from the O3DE Editor in the bottom-right corner of the status bar."));
AzFramework::AssetSystem::LaunchAssetProcessor();
From 766de68199203ad3095a711a6e1f6b180ac0aca4 Mon Sep 17 00:00:00 2001
From: carlitosan <82187351+carlitosan@users.noreply.github.com>
Date: Wed, 8 Dec 2021 22:54:21 -0800
Subject: [PATCH 6/7] small fixes for SC play in editor and warnings
Signed-off-by: carlitosan <82187351+carlitosan@users.noreply.github.com>
---
.../Components/EditorScriptCanvasComponent.cpp | 10 ----------
.../Components/EditorScriptCanvasComponent.h | 4 +---
Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp | 13 ++++++++++++-
Gems/ScriptCanvas/Code/Editor/SystemComponent.h | 10 +++++++++-
.../Code/Include/ScriptCanvas/Core/Graph.cpp | 15 ++++++++++++++-
5 files changed, 36 insertions(+), 16 deletions(-)
diff --git a/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp b/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp
index 043e034062..a0e0868422 100644
--- a/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp
+++ b/Gems/ScriptCanvas/Code/Editor/Components/EditorScriptCanvasComponent.cpp
@@ -475,16 +475,6 @@ namespace ScriptCanvasEditor
AzToolsFramework::ToolsApplicationNotificationBus::Broadcast(&AzToolsFramework::ToolsApplicationEvents::InvalidatePropertyDisplay, AzToolsFramework::Refresh_EntireTree_NewContent);
}
- void EditorScriptCanvasComponent::OnStartPlayInEditor()
- {
- ScriptCanvas::Execution::PerformanceStatisticsEBus::Broadcast(&ScriptCanvas::Execution::PerformanceStatisticsBus::ClearSnaphotStatistics);
- }
-
- void EditorScriptCanvasComponent::OnStopPlayInEditor()
- {
- AZ::ScriptSystemRequestBus::Broadcast(&AZ::ScriptSystemRequests::GarbageCollect);
- }
-
void EditorScriptCanvasComponent::SetAssetId(const AZ::Data::AssetId& assetId)
{
if (m_scriptCanvasAssetHolder.GetAssetId() != assetId)
diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/EditorScriptCanvasComponent.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/EditorScriptCanvasComponent.h
index 5dbe718eca..8fd4ce4f14 100644
--- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/EditorScriptCanvasComponent.h
+++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Components/EditorScriptCanvasComponent.h
@@ -96,9 +96,7 @@ namespace ScriptCanvasEditor
//=====================================================================
// EditorEntityContextNotificationBus
- void OnStartPlayInEditor() override;
-
- void OnStopPlayInEditor() override;
+
protected:
static void Reflect(AZ::ReflectContext* context);
diff --git a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp
index f901915fdb..d976e2c0b9 100644
--- a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp
+++ b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp
@@ -33,6 +33,7 @@
#include
#include
#include
+#include
#include
#include
@@ -328,10 +329,20 @@ namespace ScriptCanvasEditor
}
};
- openers.push_back({ "O3DE_ScriptCanvasEditor", "Open In Script Canvas Editor...", QIcon(), scriptCanvasEditorCallback });
+ openers.push_back({ "O3DE_ScriptCanvasEditor", "Open In Script Canvas Editor...", QIcon(ScriptCanvasAssetDescription().GetIconPathImpl()), scriptCanvasEditorCallback });
}
}
+ void SystemComponent::OnStartPlayInEditor()
+ {
+ ScriptCanvas::Execution::PerformanceStatisticsEBus::Broadcast(&ScriptCanvas::Execution::PerformanceStatisticsBus::ClearSnaphotStatistics);
+ }
+
+ void SystemComponent::OnStopPlayInEditor()
+ {
+ AZ::ScriptSystemRequestBus::Broadcast(&AZ::ScriptSystemRequests::GarbageCollect);
+ }
+
void SystemComponent::OnUserSettingsActivated()
{
PopulateEditorCreatableTypes();
diff --git a/Gems/ScriptCanvas/Code/Editor/SystemComponent.h b/Gems/ScriptCanvas/Code/Editor/SystemComponent.h
index 6f85b3c5a6..c2c42c5b9d 100644
--- a/Gems/ScriptCanvas/Code/Editor/SystemComponent.h
+++ b/Gems/ScriptCanvas/Code/Editor/SystemComponent.h
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
namespace ScriptCanvasEditor
{
@@ -36,6 +37,8 @@ namespace ScriptCanvasEditor
, private AZ::Data::AssetBus::MultiHandler
, private AzToolsFramework::AssetSeedManagerRequests::Bus::Handler
, private AzToolsFramework::EditorContextMenuBus::Handler
+ , private AzToolsFramework::EditorEntityContextNotificationBus::Handler
+
{
public:
AZ_COMPONENT(SystemComponent, "{1DE7A120-4371-4009-82B5-8140CB1D7B31}");
@@ -97,7 +100,12 @@ namespace ScriptCanvasEditor
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
-
+
+ protected:
+ void OnStartPlayInEditor() override;
+
+ void OnStopPlayInEditor() override;
+
private:
SystemComponent(const SystemComponent&) = delete;
diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp
index 9d848ff998..2b567aab0d 100644
--- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp
+++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp
@@ -52,6 +52,7 @@ namespace GraphCpp
VariablePanelSymantics,
AddVersionData,
RemoveFunctionGraphMarker,
+ FixupVersionDataTypeId,
// label your version above
Current
};
@@ -71,11 +72,23 @@ namespace ScriptCanvas
componentElementNode.AddElementWithData(context, "m_assetType", azrtti_typeid());
}
- if (componentElementNode.GetVersion() < GraphCpp::GraphVersion::RemoveFunctionGraphMarker)
+ if (componentElementNode.GetVersion() <= GraphCpp::GraphVersion::RemoveFunctionGraphMarker)
{
componentElementNode.RemoveElementByName(AZ_CRC_CE("isFunctionGraph"));
}
+ if (componentElementNode.GetVersion() < GraphCpp::GraphVersion::FixupVersionDataTypeId)
+ {
+ if (auto subElement = componentElementNode.FindSubElement(AZ_CRC_CE("versionData")))
+ {
+ if (subElement->GetId() == azrtti_typeid())
+ {
+ componentElementNode.RemoveElementByName(AZ_CRC_CE("versionData"));
+ componentElementNode.AddElementWithData(context, "versionData", VersionData());
+ }
+ }
+ }
+
return true;
}
From 70875651491842cf80d46371d1d1dcae5776dd23 Mon Sep 17 00:00:00 2001
From: carlitosan <82187351+carlitosan@users.noreply.github.com>
Date: Wed, 8 Dec 2021 23:23:03 -0800
Subject: [PATCH 7/7] fix interpreted statics
Signed-off-by: carlitosan <82187351+carlitosan@users.noreply.github.com>
---
.../Execution/Interpreted/ExecutionInterpretedAPI.cpp | 9 +++++----
.../Execution/Interpreted/ExecutionStateInterpreted.cpp | 5 ++++-
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp
index 1855b348f2..561708dea1 100644
--- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp
+++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp
@@ -503,20 +503,21 @@ namespace ScriptCanvas
void InitializeInterpretedStatics(RuntimeData& runtimeData)
{
- if (!runtimeData.m_areStaticsInitialized)
+ AZ_Error("ScriptCanvas", !runtimeData.m_areStaticsInitialized, "ScriptCanvas runtime data already initalized");
{
runtimeData.m_areStaticsInitialized = true;
for (auto& dependency : runtimeData.m_requiredAssets)
{
- InitializeInterpretedStatics(dependency.Get()->GetData());
+ if (!dependency.Get()->GetData().m_areStaticsInitialized)
+ {
+ InitializeInterpretedStatics(dependency.Get()->GetData());
+ }
}
#if defined(AZ_PROFILE_BUILD) || defined(AZ_DEBUG_BUILD)
Execution::InitializeFromLuaStackFunctions(const_cast(runtimeData.m_debugMap));
#endif
- AZ_WarningOnce("ScriptCanvas", !runtimeData.m_areStaticsInitialized, "ScriptCanvas runtime data already initalized");
-
if (runtimeData.RequiresStaticInitialization())
{
AZ::ScriptLoadResult result{};
diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpreted.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpreted.cpp
index 3ae52846cd..3b963317ec 100644
--- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpreted.cpp
+++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpreted.cpp
@@ -49,7 +49,10 @@ namespace ScriptCanvas
, config.asset.GetId().ToString().data());
#endif
- Execution::InitializeInterpretedStatics(runtimeAsset->GetData());
+ if (!runtimeAsset->GetData().m_areStaticsInitialized)
+ {
+ Execution::InitializeInterpretedStatics(runtimeAsset->GetData());
+ }
}
void ExecutionStateInterpreted::ClearLuaRegistryIndex()