Gems/Umbra/Code/Source/UmbraSceneAsset/UmbraSceneAssetBuilderComponent.h (32 lines of code) (raw):
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*/
#pragma once
#include <AssetBuilderSDK/AssetBuilderBusses.h>
#include <AzCore/Asset/AssetCommon.h>
#include <AzCore/Asset/AssetManager.h>
#include <AzCore/Component/Component.h>
namespace Umbra
{
//! This is a helper function for creating an asset builder unique_ptr instance and registering it.
template<class T>
AZStd::unique_ptr<T> MakeAssetBuilder()
{
static_assert(
(AZStd::is_base_of<AssetBuilderSDK::AssetBuilderCommandBus::Handler, T>::value),
"Can only specify desired type if it's an AssetBuilderCommandBus::Handler");
auto assetWorker = AZStd::make_unique<T>();
assetWorker->RegisterBuilder();
return AZStd::move(assetWorker);
}
//! Creates and registers an instance of the umbra scene asset builder
class UmbraSceneAssetBuilderComponent final : public AZ::Component
{
public:
AZ_COMPONENT(UmbraSceneAssetBuilderComponent, "{F1AF5754-51B2-46C3-A34B-70F02A63ACE5}");
static void Reflect(AZ::ReflectContext* context);
UmbraSceneAssetBuilderComponent();
~UmbraSceneAssetBuilderComponent() override;
// AZ::Component overrides...
void Activate() override;
void Deactivate() override;
private:
UmbraSceneAssetBuilderComponent(const UmbraSceneAssetBuilderComponent&) = delete;
using AssetWorker = AssetBuilderSDK::AssetBuilderCommandBus::Handler;
AZStd::vector<AZStd::unique_ptr<AssetWorker>> m_assetWorkers;
};
} // namespace Umbra