1f9b284de2
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> # Conflicts: # Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin_precompiled.h # Code/Editor/Plugins/EditorCommon/EditorCommon_precompiled.h # Code/Editor/Plugins/EditorCommon/stdafx.cpp # Code/Editor/Plugins/FFMPEGPlugin/FFMPEGPlugin_precompiled.h # Code/Editor/Plugins/PerforcePlugin/PerforcePlugin_precompiled.h # Code/Editor/Plugins/ProjectSettingsTool/ProjectSettingsTool_precompiled.h # Code/Framework/AzToolsFramework/AzToolsFramework/AzToolsFramework_precompiled.h # Code/Tools/AssetProcessor/native/precompiled.h # Code/Tools/Standalone/StandaloneTools_precompiled.h # Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer_precompiled.h # Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageProcessing_precompiled.h # Gems/Atom/RHI/DX12/Code/Source/RHI/Atom_RHI_DX12_precompiled.h # Gems/Atom/RHI/Metal/Code/Include/Platform/Mac/Atom_RHI_Metal_precompiled_Platform.h # Gems/Atom/RHI/Metal/Code/Include/Platform/iOS/Atom_RHI_Metal_precompiled_Platform.h # Gems/Atom/RHI/Metal/Code/Source/Atom_RHI_Metal_precompiled.h # Gems/Atom/RHI/Metal/Code/atom_rhi_metal_common_files.cmake # Gems/Atom/RHI/Null/Code/Source/Atom_RHI_Null_precompiled.h # Gems/Atom/RHI/Null/Code/atom_rhi_null_common_files.cmake # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Android/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Mac/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Include/Platform/Windows/Atom_RHI_Vulkan_precompiled_Platform.h # Gems/Atom/RHI/Vulkan/Code/Source/Atom_RHI_Vulkan_precompiled.h # Gems/Atom/RHI/Vulkan/Code/Source/RHI/SwapChain.cpp # Gems/Atom/RHI/Vulkan/Code/atom_rhi_vulkan_common_files.cmake # Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/AtomFont_precompiled.h # Gems/Blast/Code/Source/StdAfx.cpp # Gems/Camera/Code/Source/Camera_precompiled.h # Gems/EMotionFX/Code/Source/EMotionFX_precompiled.h # Gems/FastNoise/Code/Source/FastNoise_precompiled.h # Gems/Gestures/Code/Source/Gestures_precompiled.h # Gems/GradientSignal/Code/Source/GradientSignal_precompiled.h # Gems/GraphCanvas/Code/precompiled.h # Gems/ImGui/Code/Source/ImGui_precompiled.h # Gems/InAppPurchases/Code/Source/InAppPurchases_precompiled.h # Gems/LmbrCentral/Code/Source/LmbrCentral_precompiled.h # Gems/LmbrCentral/Code/Tests/ShapeGeometryUtilTest.cpp # Gems/LyShine/Code/Editor/UiCanvasEditor_precompiled.h # Gems/LyShine/Code/Source/Animation/LyShine_precompiled.h # Gems/LyShine/Code/Source/LyShine_precompiled.h # Gems/LyShineExamples/Code/Source/LyShineExamples_precompiled.h # Gems/Maestro/Code/Source/Cinematics/Maestro_precompiled.h # Gems/Maestro/Code/Source/Maestro_precompiled.h # Gems/MessagePopup/Code/Source/MessagePopup_precompiled.h # Gems/Metastream/Code/Source/Metastream_precompiled.h # Gems/Microphone/Code/Source/Microphone_precompiled.h # Gems/Multiplayer/Code/Source/Multiplayer_precompiled.h # Gems/PhysX/Code/NumericalMethods/Source/NumericalMethods_precompiled.h # Gems/PhysX/Code/Source/PhysXUnsupported_precompiled.h # Gems/PhysX/Code/Source/PhysX_precompiled.h # Gems/PhysX/Code/physx_unsupported_files.cmake # Gems/PhysXDebug/Code/Source/PhysXDebugUnsupported_precompiled.h # Gems/PhysXDebug/Code/Source/PhysXDebug_precompiled.h # Gems/ScriptCanvas/Code/Editor/precompiled.h # Gems/ScriptCanvas/Code/Source/precompiled.h # Gems/ScriptCanvasDeveloper/Code/Source/precompiled.h # Gems/ScriptCanvasPhysics/Code/Source/ScriptCanvasPhysics_precompiled.h # Gems/ScriptEvents/Code/Source/precompiled.h # Gems/ScriptEvents/Code/Tests/Editor/EditorTests.cpp # Gems/ScriptedEntityTweener/Code/Source/ScriptedEntityTweener_precompiled.h # Gems/SliceFavorites/Code/Source/SliceFavorites_precompiled.h # Gems/StartingPointCamera/Code/Source/StartingPointCamera_precompiled.h # Gems/StartingPointInput/Code/Source/StartingPointInput_precompiled.h # Gems/StartingPointMovement/Code/Source/StartingPointMovement_precompiled.h # Gems/SurfaceData/Code/Source/SurfaceData_precompiled.h # Gems/TextureAtlas/Code/Source/TextureAtlas_precompiled.h # Gems/TickBusOrderViewer/Code/Source/TickBusOrderViewer_precompiled.h # Gems/Twitch/Code/Source/Twitch_precompiled.h # Gems/VirtualGamepad/Code/Source/VirtualGamepad_precompiled.h # Gems/WhiteBox/Code/Source/WhiteBoxUnsupported_precompiled.h # Gems/WhiteBox/Code/Source/WhiteBox_precompiled.h
138 lines
6.0 KiB
C++
138 lines
6.0 KiB
C++
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
|
|
#include "CopyDependencyBuilderWorker.h"
|
|
|
|
#include <AzFramework/StringFunc/StringFunc.h>
|
|
|
|
namespace CopyDependencyBuilder
|
|
{
|
|
CopyDependencyBuilderWorker::CopyDependencyBuilderWorker(AZStd::string jobKey, bool critical, bool skipServer)
|
|
: m_jobKey(jobKey)
|
|
, m_critical(critical)
|
|
, m_skipServer(skipServer)
|
|
{
|
|
}
|
|
|
|
void CopyDependencyBuilderWorker::ShutDown()
|
|
{
|
|
m_isShuttingDown = true;
|
|
}
|
|
|
|
void CopyDependencyBuilderWorker::CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response)
|
|
{
|
|
if (m_isShuttingDown)
|
|
{
|
|
response.m_result = AssetBuilderSDK::CreateJobsResultCode::ShuttingDown;
|
|
return;
|
|
}
|
|
|
|
// Add source dependencies to CreateJobsResponse
|
|
auto sourceDependencesResult = GetSourceDependencies(request);
|
|
if (!sourceDependencesResult.IsSuccess())
|
|
{
|
|
AZ_Error(AssetBuilderSDK::ErrorWindow, false, sourceDependencesResult.TakeError().c_str());
|
|
response.m_result = AssetBuilderSDK::CreateJobsResultCode::Failed;
|
|
return;
|
|
}
|
|
response.m_sourceFileDependencyList = sourceDependencesResult.TakeValue();
|
|
|
|
for (const AssetBuilderSDK::PlatformInfo& info : request.m_enabledPlatforms)
|
|
{
|
|
if (m_skipServer && info.m_identifier == "server")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
AssetBuilderSDK::JobDescriptor descriptor;
|
|
descriptor.m_jobKey = m_jobKey;
|
|
descriptor.m_critical = m_critical;
|
|
descriptor.SetPlatformIdentifier(info.m_identifier.c_str());
|
|
|
|
// Add source dependencies to job parameters and pass them to ProcessJob
|
|
const int sourceDependencyStartPoint = static_cast<int>(descriptor.m_jobParameters.size());
|
|
const int sourceDependenciesNum = static_cast<int>(response.m_sourceFileDependencyList.size());
|
|
descriptor.m_jobParameters[AZ_CRC("sourceDependencyStartPoint", 0xdfa24dde)] = AZStd::to_string(sourceDependencyStartPoint);
|
|
descriptor.m_jobParameters[AZ_CRC("sourceDependenciesNum", 0xf52e721a)] = AZStd::to_string(sourceDependenciesNum);
|
|
|
|
for (int index = 0; index < sourceDependenciesNum; ++index)
|
|
{
|
|
descriptor.m_jobParameters[sourceDependencyStartPoint + index] = response.m_sourceFileDependencyList[index].m_sourceFileDependencyPath;
|
|
}
|
|
|
|
response.m_createJobOutputs.push_back(descriptor);
|
|
}
|
|
|
|
response.m_result = AssetBuilderSDK::CreateJobsResultCode::Success;
|
|
}
|
|
|
|
AZ::Outcome<AZStd::vector<AssetBuilderSDK::SourceFileDependency>, AZStd::string> CopyDependencyBuilderWorker::GetSourceDependencies(
|
|
const AssetBuilderSDK::CreateJobsRequest& /*request*/) const
|
|
{
|
|
return AZ::Success(AZStd::vector<AssetBuilderSDK::SourceFileDependency>{});
|
|
}
|
|
|
|
void CopyDependencyBuilderWorker::ProcessJob(const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response)
|
|
{
|
|
AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "CopyDependencyBuilderWorker Starting Job.\n");
|
|
|
|
if (m_isShuttingDown)
|
|
{
|
|
AZ_TracePrintf(AssetBuilderSDK::WarningWindow, "Cancelled job %s because shutdown was requested.\n", request.m_fullPath.c_str());
|
|
response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Cancelled;
|
|
return;
|
|
}
|
|
|
|
AZStd::string fileName;
|
|
AzFramework::StringFunc::Path::GetFullFileName(request.m_fullPath.c_str(), fileName);
|
|
|
|
AssetBuilderSDK::JobProduct jobProduct(request.m_fullPath, GetAssetType(fileName));
|
|
|
|
if (!ParseProductDependencies(request, jobProduct.m_dependencies, jobProduct.m_pathDependencies))
|
|
{
|
|
AZ_Error(AssetBuilderSDK::ErrorWindow, false, "Error during outputing product dependencies for asset %s.\n", fileName.c_str());
|
|
response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Failed;
|
|
return;
|
|
}
|
|
|
|
jobProduct.m_dependenciesHandled = true; // We've output the dependencies immediately above so it's OK to tell the AP we've handled dependencies
|
|
response.m_outputProducts.push_back(jobProduct);
|
|
|
|
auto reverseSourceDependencesResult = GetSourcesToReprocess(request);
|
|
if (!reverseSourceDependencesResult.IsSuccess())
|
|
{
|
|
AZ_Error(AssetBuilderSDK::ErrorWindow, false, reverseSourceDependencesResult.TakeError().c_str());
|
|
// The primary use of this system, the XMLSchemaSystem, is edited using the asset editor.
|
|
// The asset editing system does not play nice with failed jobs. It's common for GetSourcesToReprocess to fail
|
|
// due to configuration issues. It shouldn't block editing the file using the asset editor.
|
|
response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Success;
|
|
return;
|
|
}
|
|
|
|
response.m_sourcesToReprocess = reverseSourceDependencesResult.TakeValue();
|
|
response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Success;
|
|
}
|
|
|
|
AZ::Outcome<AZStd::vector<AZStd::string>, AZStd::string> CopyDependencyBuilderWorker::GetSourcesToReprocess(const AssetBuilderSDK::ProcessJobRequest& /*request*/) const
|
|
{
|
|
return AZ::Success(AZStd::vector<AZStd::string>{});
|
|
}
|
|
|
|
AZ::Data::AssetType CopyDependencyBuilderWorker::GetAssetType(const AZStd::string& fileName) const
|
|
{
|
|
static const char* vegDescriptorListExtension = ".vegdescriptorlist";
|
|
static AZ::Data::AssetType vegDescriptorListType("{60961B36-E3CA-4877-B197-1462C1363F6E}"); // DescriptorListAsset in Vegetation Gem
|
|
|
|
if (fileName.ends_with(vegDescriptorListExtension))
|
|
{
|
|
return vegDescriptorListType;
|
|
}
|
|
return AZ::Data::AssetType::CreateNull();
|
|
}
|
|
}
|