vkmEngine 1.0.0
A C++ game engine · vkmengine.com
Loading...
Searching...
No Matches
asset_factory.h
1#pragma once
2
3#include <type_traits>
4
5#include <nlohmann/json_fwd.hpp>
6
7#include "core/reflect.h"
8#include "resource/asset/animation_clip_asset.h"
9#include "resource/asset/audio_clip_asset.h"
10#include "resource/asset/mesh_asset.h"
11#include "resource/asset/skeleton_asset.h"
12#include "resource/asset/texture_asset.h"
13
14namespace Vkm::Engine {
15
16class ResourceManager;
17
23template<typename Asset>
24using RecipeImport = Handle<Asset> (*)(const nlohmann::json&, ResourceManager&);
25
34 RecipeImport<MeshAsset> createMesh = nullptr;
35 RecipeImport<TextureAsset> createTexture = nullptr;
36 RecipeImport<SkeletonAsset> createSkeleton = nullptr;
37 RecipeImport<AnimationClipAsset> createAnimationClip = nullptr;
38 RecipeImport<AudioClipAsset> createAudioClip = nullptr;
39};
40
46AssetFactory& assetFactory();
47
54template<typename Asset>
55RecipeImport<Asset> recipeImport() {
56 const AssetFactory& factory = assetFactory();
57 if constexpr (std::is_same_v<Asset, MeshAsset>) return factory.createMesh;
58 else if constexpr (std::is_same_v<Asset, TextureAsset>) return factory.createTexture;
59 else if constexpr (std::is_same_v<Asset, SkeletonAsset>) return factory.createSkeleton;
60 else if constexpr (std::is_same_v<Asset, AnimationClipAsset>) return factory.createAnimationClip;
61 else if constexpr (std::is_same_v<Asset, AudioClipAsset>) return factory.createAudioClip;
62 else static_assert(Reflect::DEPENDENT_FALSE<Asset>, "recipeImport: this kind has no import slot");
63}
64
65} // namespace Vkm::Engine
Open type-erased resource registry with typed handles and generational lifetimes.
Definition resource_manager.h:46
The io<->tools recipe-import seam: one import per kind that cooks to a binary.
Definition asset_factory.h:33
Opaque, type-safe handle for resources, distinguished by ResourceType.
Definition resource_handle.h:16