Add support for custom asset type factory in game code

This commit is contained in:
Wojtek Figat
2021-04-15 16:55:03 +02:00
parent 653cdd8654
commit a9ec4566e7
8 changed files with 11 additions and 11 deletions

View File

@@ -14,7 +14,7 @@ class FlaxStorage;
/// The binary assets factory base class.
/// </summary>
/// <seealso cref="IAssetFactory" />
class BinaryAssetFactoryBase : public IAssetFactory
class FLAXENGINE_API BinaryAssetFactoryBase : public IAssetFactory
{
public:

View File

@@ -15,7 +15,7 @@ class IAssetUpgrader;
/// <summary>
/// The asset objects factory.
/// </summary>
class IAssetFactory
class FLAXENGINE_API IAssetFactory
{
public:

View File

@@ -10,7 +10,7 @@
/// The Json assets factory base class.
/// </summary>
/// <seealso cref="IAssetFactory" />
class JsonAssetFactoryBase : public IAssetFactory
class FLAXENGINE_API JsonAssetFactoryBase : public IAssetFactory
{
protected:
@@ -23,7 +23,6 @@ public:
{
return Create(info);
}
Asset* NewVirtual(const AssetInfo& info) override
{
return Create(info);
@@ -47,12 +46,13 @@ protected:
}
};
#define REGISTER_JSON_ASSET(type, typeName) \
#define REGISTER_JSON_ASSET(type, typeName, supportsVirtualAssets) \
const String type::TypeName = TEXT(typeName); \
class CONCAT_MACROS(Factory, type) : public JsonAssetFactory<type> \
{ \
public: \
CONCAT_MACROS(Factory, type)() { IAssetFactory::Get().Add(type::TypeName, this); } \
~CONCAT_MACROS(Factory, type)() { IAssetFactory::Get().Remove(type::TypeName); } \
bool SupportsVirtualAssets() const override { return supportsVirtualAssets; } \
}; \
static CONCAT_MACROS(Factory, type) CONCAT_MACROS(CFactory, type)

View File

@@ -176,7 +176,7 @@ void JsonAssetBase::onRename(const StringView& newPath)
#endif
REGISTER_JSON_ASSET(JsonAsset, "FlaxEngine.JsonAsset");
REGISTER_JSON_ASSET(JsonAsset, "FlaxEngine.JsonAsset", true);
JsonAsset::JsonAsset(const SpawnParams& params, const AssetInfo* info)
: JsonAssetBase(params, info)

View File

@@ -9,7 +9,7 @@
/// <summary>
/// Binary asset upgrading context structure.
/// </summary>
struct AssetMigrationContext
struct FLAXENGINE_API AssetMigrationContext
{
/// <summary>
/// The input data.
@@ -63,7 +63,7 @@ typedef bool (*UpgradeHandler)(AssetMigrationContext& context);
/// Binary Assets Upgrader base class
/// </summary>
/// <seealso cref="IAssetUpgrader" />
class BinaryAssetUpgrader : public IAssetUpgrader
class FLAXENGINE_API BinaryAssetUpgrader : public IAssetUpgrader
{
public:

View File

@@ -7,7 +7,7 @@
/// <summary>
/// The assets upgrading objects interface.
/// </summary>
class IAssetUpgrader
class FLAXENGINE_API IAssetUpgrader
{
public:

View File

@@ -11,7 +11,7 @@
#include "Engine/Scripting/Scripting.h"
#endif
REGISTER_JSON_ASSET(Prefab, "FlaxEngine.Prefab");
REGISTER_JSON_ASSET(Prefab, "FlaxEngine.Prefab", false);
Prefab::Prefab(const SpawnParams& params, const AssetInfo* info)
: JsonAssetBase(params, info)

View File

@@ -14,7 +14,7 @@
#include "Engine/Profiler/ProfilerCPU.h"
#include "Engine/Serialization/Serialization.h"
REGISTER_JSON_ASSET(SceneAsset, "FlaxEngine.SceneAsset");
REGISTER_JSON_ASSET(SceneAsset, "FlaxEngine.SceneAsset", false);
SceneAsset::SceneAsset(const SpawnParams& params, const AssetInfo* info)
: JsonAsset(params, info)