dependency sort WIP
Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
@@ -94,6 +94,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void Controller::OnScanButtonPress()
|
||||
{
|
||||
// \todo move to another file
|
||||
auto isUpToDate = [this](AZ::Data::Asset<AZ::Data::AssetData> asset)
|
||||
{
|
||||
AZ::Entity* scriptCanvasEntity = nullptr;
|
||||
|
||||
@@ -18,6 +18,8 @@ namespace ScriptCanvasEditor
|
||||
{
|
||||
AZStd::function<void(AZ::Data::Asset<AZ::Data::AssetData>)> modification;
|
||||
bool backupGraphBeforeModification = false;
|
||||
// disabling this can be acceptable, but be careful
|
||||
bool successfulDependencyUpgradeRequired = true;
|
||||
};
|
||||
|
||||
struct ScanConfiguration
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
*/
|
||||
|
||||
#include <Editor/View/Windows/Tools/UpgradeTool/Modifier.h>
|
||||
#include <ScriptCanvas/Asset/RuntimeAsset.h>
|
||||
#include <ScriptCanvas/Assets/ScriptCanvasAsset.h>
|
||||
|
||||
namespace ModifierCpp
|
||||
{
|
||||
@@ -21,15 +23,98 @@ namespace ScriptCanvasEditor
|
||||
( const ModifyConfiguration& modification
|
||||
, AZStd::vector<AZ::Data::AssetInfo>&& assets
|
||||
, AZStd::function<void()> onComplete)
|
||||
: m_config(modification)
|
||||
, m_assets(assets)
|
||||
, m_onComplete(onComplete)
|
||||
{
|
||||
|
||||
ModelNotificationsBus::Broadcast(&ModelNotificationsTraits::OnUpgradeAllBegin);
|
||||
AZ::SystemTickBus::Handler::BusConnect();
|
||||
}
|
||||
|
||||
|
||||
const AZ::Data::AssetInfo& Modifier::GetCurrentAsset() const
|
||||
{
|
||||
return m_state == State::GatheringDependencies
|
||||
? m_assets[m_assetIndex]
|
||||
: m_assets[m_dependencyOrderedIndicies[m_assetIndex]];
|
||||
}
|
||||
|
||||
void Modifier::GatherDependencies()
|
||||
{
|
||||
AZ::SerializeContext* serializeContext{};
|
||||
AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext);
|
||||
AZ_Assert(serializeContext, "SerializeContext is required to enumerate dependent assets in the ScriptCanvas file");
|
||||
|
||||
/*
|
||||
|
||||
// AZStd::unordered_multimap<AZStd::string, AssetBuilderSDK::SourceFileDependency> jobDependenciesByKey;
|
||||
auto assetFilter = [this, &jobDependenciesByKey]
|
||||
( void* instancePointer
|
||||
, const AZ::SerializeContext::ClassData* classData
|
||||
, [[maybe_unused]] const AZ::SerializeContext::ClassElement* classElement)
|
||||
{
|
||||
auto azTypeId = classData->m_azRtti->GetTypeId();
|
||||
if (azTypeId == azrtti_typeid<AZ::Data::Asset<ScriptCanvas::SubgraphInterfaceAsset>>())
|
||||
{
|
||||
const auto* subgraphAsset = reinterpret_cast<AZ::Data::Asset<const ScriptCanvas::SubgraphInterfaceAsset>*>(instancePointer);
|
||||
if (subgraphAsset->GetId().IsValid())
|
||||
{
|
||||
// AssetBuilderSDK::SourceFileDependency dependency;
|
||||
// dependency.m_sourceFileDependencyUUID = subgraphAsset->GetId().m_guid;
|
||||
// jobDependenciesByKey.insert({ s_scriptCanvasProcessJobKey, dependency });
|
||||
// this->m_processEditorAssetDependencies.push_back
|
||||
// ({ subgraphAsset->GetId(), azTypeId, AZ::Data::AssetLoadBehavior::PreLoad });
|
||||
}
|
||||
}
|
||||
// always continue, make note of the script canvas dependencies
|
||||
return true;
|
||||
};
|
||||
|
||||
AZ_Verify(serializeContext->EnumerateInstanceConst
|
||||
( sourceGraph->GetGraphData()
|
||||
, azrtti_typeid<ScriptCanvas::GraphData>()
|
||||
, assetFilter
|
||||
, {}
|
||||
, AZ::SerializeContext::ENUM_ACCESS_FOR_READ
|
||||
, nullptr
|
||||
, nullptr), "Failed to gather dependencies from graph data");
|
||||
|
||||
// Flush asset database events to ensure no asset references are held by closures queued on Ebuses.
|
||||
AZ::Data::AssetManager::Instance().DispatchEvents();
|
||||
*/
|
||||
}
|
||||
|
||||
AZ::Data::Asset<AZ::Data::AssetData> Modifier::LoadAsset()
|
||||
{
|
||||
AZ::Data::Asset<AZ::Data::AssetData> asset = AZ::Data::AssetManager::Instance().GetAsset
|
||||
(GetCurrentAsset().m_assetId
|
||||
, azrtti_typeid<ScriptCanvasAsset>()
|
||||
, AZ::Data::AssetLoadBehavior::PreLoad);
|
||||
|
||||
asset.BlockUntilLoadComplete();
|
||||
|
||||
if (asset.IsReady())
|
||||
{
|
||||
return asset;
|
||||
}
|
||||
else
|
||||
{
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
void Modifier::OnSystemTick()
|
||||
{
|
||||
switch (m_state)
|
||||
{
|
||||
case State::GatheringDependencies:
|
||||
TickGatherDependencies();
|
||||
break;
|
||||
|
||||
case State::ModifyingGraphs:
|
||||
TickUpdateGraph();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,12 +28,29 @@ namespace ScriptCanvasEditor
|
||||
, AZStd::function<void()> onComplete);
|
||||
|
||||
private:
|
||||
enum class State
|
||||
{
|
||||
GatheringDependencies,
|
||||
ModifyingGraphs
|
||||
};
|
||||
|
||||
State m_state = State::GatheringDependencies;
|
||||
size_t m_assetIndex = 0;
|
||||
AZStd::function<void()> m_onComplete;
|
||||
AZStd::vector<AZ::Data::AssetInfo> m_assets;
|
||||
AZStd::vector<size_t> m_dependencyOrderedIndicies;
|
||||
AZStd::unordered_map<size_t, AZStd::unordered_set<size_t>> m_dependencies;
|
||||
AZStd::vector<size_t> m_failures;
|
||||
ModifyConfiguration m_config;
|
||||
ModifyConfiguration m_result;
|
||||
ModificationResult m_result;
|
||||
|
||||
void GatherDependencies();
|
||||
const AZ::Data::AssetInfo& GetCurrentAsset() const;
|
||||
AZ::Data::Asset<AZ::Data::AssetData> LoadAsset();
|
||||
void SortGraphsByDependencies();
|
||||
void OnSystemTick() override;
|
||||
void TickGatherDependencies();
|
||||
void TickUpdateGraph();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user