/* * 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 * */ #pragma once #include #include #include #include #include namespace AZ { namespace RPI { /** * This is a helper function for creating an asset builder unique_ptr instance and registering it. */ template AZStd::unique_ptr MakeAssetBuilder() { static_assert((AZStd::is_base_of::value), "Can only specify desired type if it's an AssetBuilderCommandBus::Handler"); auto assetWorker = AZStd::make_unique(); assetWorker->RegisterBuilder(); return AZStd::move(assetWorker); } class BuilderComponent final : public AZ::Component { public: AZ_COMPONENT(BuilderComponent, "{7B959232-A812-4F3F-817D-25FEEA844E7C}"); static void Reflect(AZ::ReflectContext* context); BuilderComponent(); ~BuilderComponent() override; // AZ::Component overrides... void Activate() override; void Deactivate() override; private: BuilderComponent(const BuilderComponent&) = delete; using AssetWorker = AssetBuilderSDK::AssetBuilderCommandBus::Handler; AZStd::vector< AZStd::unique_ptr > m_assetWorkers; AZStd::vector< AZStd::unique_ptr > m_assetHandlers; MaterialFunctorSourceDataRegistration m_materialFunctorRegistration; }; } // namespace RPI } // namespace AZ