Files
FlaxEngine/Source/Engine/Content/Factories/IAssetFactory.h
2023-01-10 15:29:37 +01:00

70 lines
1.8 KiB
C++

// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Core/Types/StringView.h"
#include "Engine/Core/Collections/Dictionary.h"
struct AssetInfo;
class Asset;
class IAssetUpgrader;
/// <summary>
/// The asset objects factory.
/// </summary>
class FLAXENGINE_API IAssetFactory
{
public:
typedef Dictionary<StringView, IAssetFactory*> Collection;
/// <summary>
/// Gets the all registered assets factories. Key is asset typename, value is the factory object.
/// </summary>
static Collection& Get()
{
static Collection Factories(1024);
return Factories;
}
public:
/// <summary>
/// Finalizes an instance of the <see cref="IAssetFactory"/> class.
/// </summary>
virtual ~IAssetFactory()
{
}
public:
/// <summary>
/// Determines whenever the virtual assets are supported by this asset tpe factory.
/// </summary>
/// <returns>True if can create virtual assets, otherwise false.</returns>
virtual bool SupportsVirtualAssets() const
{
return false;
}
/// <summary>
/// Creates new asset instance.
/// </summary>
/// <param name="info">The asset info structure.</param>
/// <returns>Created asset object.</returns>
virtual Asset* New(const AssetInfo& info) = 0;
/// <summary>
/// Creates new virtual asset instance. Virtual assets are temporary and exist until application exit.
/// </summary>
/// <param name="info">The asset info structure.</param>
/// <returns>Created asset object.</returns>
virtual Asset* NewVirtual(const AssetInfo& info) = 0;
/// <summary>
/// Gets the asset upgrader.
/// </summary>
/// <returns>Asset upgrader, or null if not used.</returns>
virtual IAssetUpgrader* GetUpgrader() const
{
return nullptr;
}
};