31 SpecificAssetImporter() { assetType = internalAssetType; }
32 static AssetType GetStaticAssetType() {
return internalAssetType; }
33 static const char* GetStaticAssetTypeName() {
return GetAssetTypeToString(internalAssetType); }
34 virtual void OnDeleteAsset(AssetStructType& asset) {}
36 virtual void* IncrementAssetUse(
Uuid uuid)
override {
37 void* output =
nullptr;
38 if (TryGetIfLoaded(uuid, output)) {
39 AssetStructType* asset =
static_cast<AssetStructType*
>(output);
41 if (asset->assetLoadStatus == AssetLoadStatus::Ready) {
42 ++asset->referenceCount;
49 return LoadAsset(uuid);
55 virtual void DecrementAssetUse(
Uuid uuid)
override {
56 void* output =
nullptr;
58 if (TryGetIfLoaded(uuid, output) && output !=
nullptr) {
59 AssetStructType* asset =
static_cast<AssetStructType*
>(output);
60 if (asset->referenceCount <= 1) {
61 OnDeleteAsset(*asset);
65 --asset->referenceCount;
70 virtual bool TryGetIfLoaded(
Uuid uuid,
void*& output)
override {
71 auto& assetInMap = assets.find(uuid);
72 if (assetInMap != assets.end()) {
73 output = &assetInMap->second;
80 virtual void IncrementOrLoad(
Uuid uuid)
override {
81 auto& assetInMap = assets.find(uuid);
82 if (assetInMap != assets.end()) {
83 ++assetInMap->second.referenceCount;
89 size_t AssetCount()
const {
return assets.size(); }
90 bool HasAssets()
const {
return assets.size() != 0; }
92 auto begin()
noexcept {
return assets.begin(); }
93 auto cbegin()
const noexcept {
return assets.begin(); }
94 auto end()
noexcept {
return assets.end(); }
95 auto cend()
const noexcept {
return assets.cend(); }
98 std::map<Uuid, AssetStructType> assets;