/* * All or portions of this file Copyright(c) Amazon.com, Inc.or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution(the "License").All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file.Do not * remove or modify any license notices.This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #include #include "CopyDependencyBuilderWorker.h" #include 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(descriptor.m_jobParameters.size()); const int sourceDependenciesNum = static_cast(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::string> CopyDependencyBuilderWorker::GetSourceDependencies( const AssetBuilderSDK::CreateJobsRequest& /*request*/) const { return AZ::Success(AZStd::vector{}); } 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::string> CopyDependencyBuilderWorker::GetSourcesToReprocess(const AssetBuilderSDK::ProcessJobRequest& /*request*/) const { return AZ::Success(AZStd::vector{}); } 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(); } }