fix: consider asset references when looking for assets of zone

This commit is contained in:
Jan 2024-03-30 17:44:55 +01:00
parent e7a9e4b528
commit fc18f81302
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
4 changed files with 20 additions and 5 deletions

View File

@ -59,7 +59,7 @@ XAssetInfoGeneric* AssetLoadingManager::AddAsset(std::unique_ptr<XAssetInfoGener
XAssetInfoGeneric* AssetLoadingManager::LoadIgnoredDependency(const asset_type_t assetType, const std::string& assetName, IAssetLoader* loader) XAssetInfoGeneric* AssetLoadingManager::LoadIgnoredDependency(const asset_type_t assetType, const std::string& assetName, IAssetLoader* loader)
{ {
auto* alreadyLoadedAsset = m_context.m_zone->m_pools->GetAsset(assetType, assetName); auto* alreadyLoadedAsset = m_context.m_zone->m_pools->GetAssetOrAssetReference(assetType, assetName);
if (alreadyLoadedAsset) if (alreadyLoadedAsset)
return alreadyLoadedAsset; return alreadyLoadedAsset;
@ -147,7 +147,7 @@ XAssetInfoGeneric* AssetLoadingManager::LoadAssetDependency(const asset_type_t a
XAssetInfoGeneric* AssetLoadingManager::LoadDependency(const asset_type_t assetType, const std::string& assetName) XAssetInfoGeneric* AssetLoadingManager::LoadDependency(const asset_type_t assetType, const std::string& assetName)
{ {
auto* alreadyLoadedAsset = m_context.m_zone->m_pools->GetAsset(assetType, assetName); auto* alreadyLoadedAsset = m_context.m_zone->m_pools->GetAssetOrAssetReference(assetType, assetName);
if (alreadyLoadedAsset) if (alreadyLoadedAsset)
return alreadyLoadedAsset; return alreadyLoadedAsset;
@ -171,7 +171,7 @@ XAssetInfoGeneric* AssetLoadingManager::LoadDependency(const asset_type_t assetT
IndirectAssetReference AssetLoadingManager::LoadIndirectAssetReference(const asset_type_t assetType, const std::string& assetName) IndirectAssetReference AssetLoadingManager::LoadIndirectAssetReference(const asset_type_t assetType, const std::string& assetName)
{ {
const auto* alreadyLoadedAsset = m_context.m_zone->m_pools->GetAsset(assetType, assetName); const auto* alreadyLoadedAsset = m_context.m_zone->m_pools->GetAssetOrAssetReference(assetType, assetName);
if (alreadyLoadedAsset) if (alreadyLoadedAsset)
return IndirectAssetReference(assetType, assetName); return IndirectAssetReference(assetType, assetName);

View File

@ -115,7 +115,7 @@ class ZoneWriteTemplate::Internal final : BaseTemplate
<< "* asset, Zone* zone, IZoneOutputStream* stream)") << "* asset, Zone* zone, IZoneOutputStream* stream)")
m_intendation++; m_intendation++;
LINE_START(": AssetWriter(zone->m_pools->GetAsset(" << m_env.m_asset->m_asset_enum_entry->m_name << ", GetAssetName(asset))" LINE_START(": AssetWriter(zone->m_pools->GetAssetOrAssetReference(" << m_env.m_asset->m_asset_enum_entry->m_name << ", GetAssetName(asset))"
<< ", zone, stream)") << ", zone, stream)")
LINE_END("") LINE_END("")
m_intendation--; m_intendation--;

View File

@ -1,5 +1,7 @@
#include "ZoneAssetPools.h" #include "ZoneAssetPools.h"
#include <format>
ZoneAssetPools::ZoneAssetPools(Zone* zone) ZoneAssetPools::ZoneAssetPools(Zone* zone)
: m_zone(zone) : m_zone(zone)
{ {
@ -25,6 +27,17 @@ XAssetInfoGeneric* ZoneAssetPools::AddAsset(std::unique_ptr<XAssetInfoGeneric> x
return assetInfo; return assetInfo;
} }
XAssetInfoGeneric* ZoneAssetPools::GetAssetOrAssetReference(const asset_type_t type, const std::string& name) const
{
auto* result = GetAsset(type, name);
if (result != nullptr || (!name.empty() && name[0] == ','))
return result;
result = GetAsset(type, std::format(",{}", name));
return result;
}
size_t ZoneAssetPools::GetTotalAssetCount() const size_t ZoneAssetPools::GetTotalAssetCount() const
{ {
return m_assets_in_order.size(); return m_assets_in_order.size();

View File

@ -39,6 +39,8 @@ public:
std::vector<scr_string_t> usedScriptStrings, std::vector<scr_string_t> usedScriptStrings,
std::vector<IndirectAssetReference> indirectAssetReferences); std::vector<IndirectAssetReference> indirectAssetReferences);
_NODISCARD virtual XAssetInfoGeneric* GetAsset(asset_type_t type, const std::string& name) const = 0; _NODISCARD virtual XAssetInfoGeneric* GetAsset(asset_type_t type, const std::string& name) const = 0;
_NODISCARD virtual XAssetInfoGeneric* GetAssetOrAssetReference(asset_type_t type, const std::string& name) const;
_NODISCARD virtual asset_type_t GetAssetTypeCount() const = 0; _NODISCARD virtual asset_type_t GetAssetTypeCount() const = 0;
_NODISCARD virtual const char* GetAssetTypeName(asset_type_t assetType) const = 0; _NODISCARD virtual const char* GetAssetTypeName(asset_type_t assetType) const = 0;