Browse Source

Code maintenance, improved OnCatalogLoaded logic and track additions and removals

Signed-off-by: lsemp3d <[email protected]>
lsemp3d 3 years ago
parent
commit
c7c96d8baf

+ 26 - 22
Gems/GraphCanvas/Code/Source/GraphCanvas.cpp

@@ -227,7 +227,6 @@ namespace GraphCanvas
         AzFramework::AssetCatalogEventBus::Handler::BusDisconnect();
         Styling::PseudoElementFactoryRequestBus::Handler::BusDisconnect();
         GraphCanvasRequestBus::Handler::BusDisconnect();
-        AZ::Data::AssetBus::MultiHandler::BusDisconnect();
 
         m_translationAssetWorker.Deactivate();
         UnregisterAssetHandler();
@@ -369,26 +368,46 @@ namespace GraphCanvas
 
     void GraphCanvasSystemComponent::OnCatalogLoaded(const char* /*catalogFile*/)
     {
-        auto postEnumerateCb = [this]()
+        AZStd::vector<AZ::Data::AssetId> translationAssets;
+        auto postEnumerateCb = [&translationAssets]()
         {
-            PopulateTranslationDatabase();
+            for (const AZ::Data::AssetId& assetId : translationAssets)
+            {
+                AZ::Data::AssetManager::Instance().GetAsset<TranslationAsset>(assetId, AZ::Data::AssetLoadBehavior::Default);
+            }
         };
 
         // Find any TranslationAsset files that may have translation database key/values
-        AZ::Data::AssetCatalogRequests::AssetEnumerationCB collectAssetsCb = [this](const AZ::Data::AssetId assetId, const AZ::Data::AssetInfo& assetInfo)
+        AZ::Data::AssetCatalogRequests::AssetEnumerationCB collectAssetsCb = [&translationAssets](const AZ::Data::AssetId assetId, const AZ::Data::AssetInfo& assetInfo)
         {
             if (AZ::StringFunc::EndsWith(assetInfo.m_relativePath, ".names", false))
             {
-                m_translationAssets.push_back(assetId);
+                translationAssets.push_back(assetId);
             }
         };
 
-        m_translationAssets.clear();
-
         AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::EnumerateAssets, nullptr, collectAssetsCb, postEnumerateCb);
     }
 
+    void GraphCanvasSystemComponent::OnCatalogAssetRemoved(const AZ::Data::AssetId& /*assetId*/, const AZ::Data::AssetInfo& assetInfo)
+    {
+        if (assetInfo.m_assetType == azrtti_typeid<TranslationAsset>())
+        {
+            GraphCanvas::TranslationRequestBus::Broadcast(&GraphCanvas::TranslationRequests::Restore);
+        }
+    }
+
+    void GraphCanvasSystemComponent::OnCatalogAssetAdded(const AZ::Data::AssetId& assetId)
+    {
+        ReloadDatabase(assetId);
+    }
+
     void GraphCanvasSystemComponent::OnCatalogAssetChanged(const AZ::Data::AssetId& assetId)
+    {
+        ReloadDatabase(assetId);
+    }
+
+    void GraphCanvasSystemComponent::ReloadDatabase(const AZ::Data::AssetId& assetId)
     {
         AZ::Data::AssetInfo assetInfo;
         AZ::Data::AssetCatalogRequestBus::BroadcastResult(assetInfo, &AZ::Data::AssetCatalogRequestBus::Events::GetAssetInfoById, assetId);
@@ -405,20 +424,5 @@ namespace GraphCanvas
             AZ::Data::AssetManager::Instance().UnregisterHandler(m_assetHandler.get());
             m_assetHandler.reset();
         }
-
-        for (const AZ::Data::AssetId& assetId : m_translationAssets)
-        {
-            AZ::Data::AssetBus::MultiHandler::BusDisconnect(assetId);
-        }
-        m_translationAssets.clear();
-    }
-
-    void GraphCanvasSystemComponent::PopulateTranslationDatabase()
-    {
-        for (const AZ::Data::AssetId& assetId : m_translationAssets)
-        {
-            AZ::Data::AssetBus::MultiHandler::BusConnect(assetId);
-             AZ::Data::AssetManager::Instance().GetAsset<TranslationAsset>(assetId, AZ::Data::AssetLoadBehavior::Default);
-        }
     }
 }

+ 4 - 3
Gems/GraphCanvas/Code/Source/GraphCanvas.h

@@ -25,7 +25,6 @@ namespace GraphCanvas
         , private GraphCanvasRequestBus::Handler
         , protected Styling::PseudoElementFactoryRequestBus::Handler
         , protected AzFramework::AssetCatalogEventBus::Handler
-        , protected AZ::Data::AssetBus::MultiHandler
 
     {
     public:
@@ -80,15 +79,17 @@ namespace GraphCanvas
         // AzFramework::AssetCatalogEventBus::Handler
         void OnCatalogLoaded(const char* /*catalogFile*/) override;
         void OnCatalogAssetChanged(const AZ::Data::AssetId&) override;
+        void OnCatalogAssetAdded(const AZ::Data::AssetId&) override;
+        void OnCatalogAssetRemoved(const AZ::Data::AssetId& /*assetId*/, const AZ::Data::AssetInfo& /*assetInfo*/) override;
         ////
 
+        void ReloadDatabase(const AZ::Data::AssetId&);
+
         AZStd::unique_ptr<TranslationAssetHandler> m_assetHandler;
 
         void RegisterTranslationBuilder();
         void UnregisterAssetHandler();
         TranslationAssetWorker m_translationAssetWorker;
-        AZStd::vector<AZ::Data::AssetId> m_translationAssets;
-        void PopulateTranslationDatabase();
 
         TranslationDatabase m_translationDatabase;
     };