123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- """
- 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
- """
- import azlmbr.asset
- import azlmbr.asset.builder
- import azlmbr.bus
- import azlmbr.math
- import os, traceback, binascii, sys
- jobKeyName = 'Mock Asset'
- def log_exception_traceback():
- exc_type, exc_value, exc_tb = sys.exc_info()
- data = traceback.format_exception(exc_type, exc_value, exc_tb)
- print(str(data))
- # creates a single job to compile for each platform
- def create_jobs(request):
- # create job descriptor for each platform
- jobDescriptorList = []
- for platformInfo in request.enabledPlatforms:
- jobDesc = azlmbr.asset.builder.JobDescriptor()
- jobDesc.jobKey = f'{jobKeyName}-{platformInfo.identifier}'
- jobDesc.set_platform_identifier(platformInfo.identifier)
- jobDescriptorList.append(jobDesc)
- response = azlmbr.asset.builder.CreateJobsResponse()
- response.result = azlmbr.asset.builder.CreateJobsResponse_ResultSuccess
- response.createJobOutputs = jobDescriptorList
- return response
- def on_create_jobs(args):
- try:
- request = args[0]
- return create_jobs(request)
- except:
- log_exception_traceback()
- # returning back a default CreateJobsResponse() records an asset error
- return azlmbr.asset.builder.CreateJobsResponse()
- def process_file(request):
- # prepare output folder
- basePath, _ = os.path.split(request.sourceFile)
- outputPath = os.path.join(request.tempDirPath, basePath)
- os.makedirs(outputPath, exist_ok=True)
- # write out a mock file
- basePath, sourceFile = os.path.split(request.sourceFile)
- mockFilename = os.path.splitext(sourceFile)[0] + '.mock_asset'
- mockFilename = os.path.join(basePath, mockFilename)
- mockFilename = mockFilename.replace('\\', '/')
- tempFilename = os.path.join(request.tempDirPath, mockFilename)
- # write out a tempFilename like a JSON
- fileOutput = open(tempFilename, "w")
- fileOutput.write('{}')
- fileOutput.close()
- print(f'Wrote mock asset file: {tempFilename}')
- # generate a product asset file entry
- subId = binascii.crc32(mockFilename.encode())
- mockAssetType = azlmbr.math.Uuid_CreateString('{9274AD17-3212-4651-9F3B-7DCCB080E467}')
- product = azlmbr.asset.builder.JobProduct(mockFilename, mockAssetType, subId)
- product.dependenciesHandled = True
- productOutputs = []
- productOutputs.append(product)
- # fill out response object
- response = azlmbr.asset.builder.ProcessJobResponse()
- response.outputProducts = productOutputs
- response.resultCode = azlmbr.asset.builder.ProcessJobResponse_Success
- response.dependenciesHandled = True
- return response
- # using the incoming 'request' find the type of job via 'jobKey' to determine what to do
- def on_process_job(args):
- try:
- request = args[0]
- if (request.jobDescription.jobKey.startswith(jobKeyName)):
- return process_file(request)
- except:
- log_exception_traceback()
- # returning back an empty ProcessJobResponse() will record an error
- return azlmbr.asset.builder.ProcessJobResponse()
- # register asset builder
- def register_asset_builder(busId):
- assetPattern = azlmbr.asset.builder.AssetBuilderPattern()
- assetPattern.pattern = '*.mock'
- assetPattern.type = azlmbr.asset.builder.AssetBuilderPattern_Wildcard
- builderDescriptor = azlmbr.asset.builder.AssetBuilderDesc()
- builderDescriptor.name = "Mock Builder"
- builderDescriptor.patterns = [assetPattern]
- builderDescriptor.busId = busId
- builderDescriptor.version = 1
- outcome = azlmbr.asset.builder.PythonAssetBuilderRequestBus(azlmbr.bus.Broadcast, 'RegisterAssetBuilder', builderDescriptor)
- if outcome.IsSuccess():
- # created the asset builder to hook into the notification bus
- handler = azlmbr.asset.builder.PythonBuilderNotificationBusHandler()
- handler.connect(busId)
- handler.add_callback('OnCreateJobsRequest', on_create_jobs)
- handler.add_callback('OnProcessJobRequest', on_process_job)
- return handler
- # create the asset builder handler
- busIdString = '{CF5C74C1-9ED4-5851-95B1-0B15090DBEC7}'
- busId = azlmbr.math.Uuid_CreateString(busIdString)
- handler = None
- try:
- handler = register_asset_builder(busId)
- except:
- handler = None
- log_exception_traceback()
|