Integrating up through commit 90f050496

This commit is contained in:
alexpete
2021-04-07 14:03:29 -07:00
parent 8f2ed080a9
commit c2cbd430fe
2694 changed files with 285622 additions and 176874 deletions
@@ -69,6 +69,8 @@
#include <GraphCanvas/Widgets/GraphCanvasTreeModel.h>
#include <GraphCanvas/Widgets/MimeEvents/CreateSplicingNodeMimeEvent.h>
#include <AzToolsFramework/ToolsComponents/ToolsAssetCatalogBus.h>
namespace GraphCanvas
{
bool EntitySaveDataContainerVersionConverter(AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement)
@@ -151,6 +153,7 @@ namespace GraphCanvas
GraphCanvasMimeEvent::Reflect(context);
GraphCanvasTreeModel::Reflect(context);
CreateSplicingNodeMimeEvent::Reflect(context);
TranslationAsset::Reflect(context);
if (auto behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
{
@@ -175,21 +178,62 @@ namespace GraphCanvas
}
}
void GraphCanvasSystemComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
{
required.push_back(AZ_CRC("AssetDatabaseService", 0x3abf5601));
}
void GraphCanvasSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
{
provided.push_back(GraphCanvasRequestsServiceId);
}
void GraphCanvasSystemComponent::Init()
{
RegisterAssetHandler();
m_translationDatabase.Init();
}
void GraphCanvasSystemComponent::Activate()
{
RegisterTranslationBuilder();
AzFramework::AssetCatalogEventBus::Handler::BusConnect();
GraphCanvasRequestBus::Handler::BusConnect();
Styling::PseudoElementFactoryRequestBus::Handler::BusConnect();
}
void GraphCanvasSystemComponent::RegisterTranslationBuilder()
{
// Register ScriptCanvas Builder
{
AssetBuilderSDK::AssetBuilderDesc builderDescriptor;
builderDescriptor.m_name = "Graph Canvas Translation Builder";
builderDescriptor.m_patterns.push_back(AssetBuilderSDK::AssetBuilderPattern("*.names", AssetBuilderSDK::AssetBuilderPattern::PatternType::Wildcard));
builderDescriptor.m_busId = TranslationAssetWorker::GetUUID();
// changing the analysis fingerprint just invalidates analysis (ie, not the assets themselves)
// which will cause the "CreateJobs" function to be called, for each asset, even if the
// source file has not changed, but won't actually do the jobs unless the source file has changed
// or the fingerprint of the individual job is different.
builderDescriptor.m_analysisFingerprint = m_translationAssetWorker.GetFingerprintString();
m_translationAssetWorker.BusConnect(builderDescriptor.m_busId);
AssetBuilderSDK::AssetBuilderBus::Broadcast(&AssetBuilderSDK::AssetBuilderBus::Handler::RegisterBuilderInformation, builderDescriptor);
AzToolsFramework::ToolsAssetSystemBus::Broadcast(&AzToolsFramework::ToolsAssetSystemRequests::RegisterSourceAssetType, azrtti_typeid<TranslationAsset>(), TranslationAsset::GetFileFilter());
m_translationAssetWorker.Activate();
}
}
void GraphCanvasSystemComponent::Deactivate()
{
AzFramework::AssetCatalogEventBus::Handler::BusDisconnect();
Styling::PseudoElementFactoryRequestBus::Handler::BusDisconnect();
GraphCanvasRequestBus::Handler::BusDisconnect();
AZ::Data::AssetBus::MultiHandler::BusDisconnect();
UnregisterAssetHandler();
}
AZ::Entity* GraphCanvasSystemComponent::CreateBookmarkAnchor() const
@@ -325,4 +369,75 @@ namespace GraphCanvas
{
return Styling::VirtualChildElement::Create(real, virtualChildElement);
}
void GraphCanvasSystemComponent::OnCatalogLoaded(const char* /*catalogFile*/)
{
auto postEnumerateCb = [this]()
{
PopulateTranslationDatabase();
};
// 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)
{
const auto assetType = azrtti_typeid<TranslationAsset>();
if (assetInfo.m_assetType == assetType)
{
m_translationAssets.push_back(assetId);
}
};
AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequestBus::Events::EnumerateAssets, nullptr, collectAssetsCb, postEnumerateCb);
}
void GraphCanvasSystemComponent::RegisterAssetHandler()
{
AZ::Data::AssetType assetType(azrtti_typeid<TranslationAsset>());
if (AZ::Data::AssetManager::Instance().GetHandler(assetType))
{
return; // Asset Type already handled
}
auto* catalogBus = AZ::Data::AssetCatalogRequestBus::FindFirstHandler();
if (catalogBus)
{
// Register asset types the asset DB should query our catalog for.
catalogBus->AddAssetType(assetType);
// Build the catalog (scan).
catalogBus->AddExtension(".names");
}
m_assetHandler = AZStd::make_unique<TranslationAssetHandler>();
AZ::Data::AssetManager::Instance().RegisterHandler(m_assetHandler.get(), assetType);
// Use AssetCatalog service to register ScriptEvent asset type and extension
AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequests::AddAssetType, assetType);
AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequests::EnableCatalogForAsset, assetType);
AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequests::AddExtension, TranslationAsset::GetFileFilter());
}
void GraphCanvasSystemComponent::UnregisterAssetHandler()
{
if (m_assetHandler)
{
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);
}
}
}