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. /// The binary assets factory base class.
/// </summary> /// </summary>
/// <seealso cref="IAssetFactory" /> /// <seealso cref="IAssetFactory" />
class BinaryAssetFactoryBase : public IAssetFactory class FLAXENGINE_API BinaryAssetFactoryBase : public IAssetFactory
{ {
public: public:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -14,7 +14,7 @@
#include "Engine/Profiler/ProfilerCPU.h" #include "Engine/Profiler/ProfilerCPU.h"
#include "Engine/Serialization/Serialization.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) SceneAsset::SceneAsset(const SpawnParams& params, const AssetInfo* info)
: JsonAsset(params, info) : JsonAsset(params, info)