2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2025-12-27 12:31:50 +00:00

chore: adjust asset name method based on asset to not require constructor

This commit is contained in:
Jan Laupetin
2025-12-18 14:00:59 +00:00
parent 1aa4cd9127
commit 7bf7bf93de
5 changed files with 17 additions and 10 deletions

View File

@@ -18,11 +18,11 @@ public:
template<typename AssetType> struct AssetNameAccessor
{
public:
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
// static constexpr bool IS_SINGLETON = false;
// using RETURN_TYPE = const char*&;
// const char*& operator()(AssetType::Type& asset)
// static RETURN_TYPE GetAssetName(assetType::Type& asset)
// {
// throw std::runtime_error("Not implemented");
// }
@@ -34,8 +34,9 @@ public:
public: \
static_assert(std::is_base_of_v<IAssetBase, assetType>); \
static constexpr bool IS_SINGLETON = false; \
using RETURN_TYPE = const char*&; \
\
const char*& operator()(assetType::Type& asset) \
static RETURN_TYPE GetAssetName(assetType::Type& asset) \
{ \
return asset.nameProperty; \
} \
@@ -47,10 +48,17 @@ public:
public: \
static_assert(std::is_base_of_v<IAssetBase, assetType>); \
static constexpr bool IS_SINGLETON = true; \
using RETURN_TYPE = const char* const&; \
\
const char* const& operator()(assetType::Type& asset) \
static RETURN_TYPE GetAssetName(assetType::Type& asset) \
{ \
static const char* NAME = singletonName; \
return NAME; \
} \
}
template<typename AssetType> AssetNameAccessor<AssetType>::RETURN_TYPE AssetName(typename AssetType::Type& asset)
{
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
return AssetNameAccessor<AssetType>::GetAssetName(asset);
}

View File

@@ -42,7 +42,7 @@ public:
AssetCreationResult CreateDefaultAsset(const std::string& assetName, AssetCreationContext& context) const override
{
auto* asset = m_memory.Alloc<typename AssetType::Type>();
AssetNameAccessor<AssetType>{}(*asset) = m_memory.Dup(assetName.c_str());
AssetName<AssetType>(*asset) = m_memory.Dup(assetName.c_str());
return AssetCreationResult::Success(context.AddAsset<AssetType>(assetName, asset));
}

View File

@@ -2159,7 +2159,7 @@ namespace
LINEF("auto* reallocatedAsset = m_zone.Memory().Alloc<{0}>();", info->m_definition->GetFullName())
LINEF("std::memcpy(reallocatedAsset, *pAsset, sizeof({0}));", info->m_definition->GetFullName())
LINE("")
LINEF("m_asset_info = reinterpret_cast<XAssetInfo<{0}>*>(LinkAsset(AssetNameAccessor<{1}>()(**pAsset), reallocatedAsset, "
LINEF("m_asset_info = reinterpret_cast<XAssetInfo<{0}>*>(LinkAsset(AssetName<{1}>(**pAsset), reallocatedAsset, "
"assetInfo.GetDependencies(), "
"assetInfo.GetUsedScriptStrings(), assetInfo.GetIndirectAssetReferences()));",
info->m_definition->GetFullName(),
@@ -2185,7 +2185,7 @@ namespace
LINE("")
LINE("if (m_asset_info == nullptr && *pAsset != nullptr)")
m_intendation++;
LINEF("m_asset_info = reinterpret_cast<XAssetInfo<{0}>*>(GetAssetInfo(AssetNameAccessor<{1}>()(**pAsset)));",
LINEF("m_asset_info = reinterpret_cast<XAssetInfo<{0}>*>(GetAssetInfo(AssetName<{1}>(**pAsset)));",
m_env.m_asset->m_definition->GetFullName(),
m_env.m_asset->m_asset_name)
m_intendation--;

View File

@@ -261,8 +261,7 @@ namespace
"{0}::{0}({1}* asset, const Zone& zone, IZoneOutputStream& stream)", WriterClassName(m_env.m_asset), m_env.m_asset->m_definition->GetFullName())
m_intendation++;
LINEF(": AssetWriter(zone.m_pools->GetAssetOrAssetReference({0}::EnumEntry, AssetNameAccessor<{0}>()(*asset)), zone, stream)",
m_env.m_asset->m_asset_name)
LINEF(": AssetWriter(zone.m_pools->GetAssetOrAssetReference({0}::EnumEntry, AssetName<{0}>(*asset)), zone, stream)", m_env.m_asset->m_asset_name)
m_intendation--;
LINE("{")

View File

@@ -15,7 +15,7 @@ protected:
{
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
const auto result = m_visitor.Visit_Dependency(AssetType::EnumEntry, AssetNameAccessor<AssetType>()(*asset));
const auto result = m_visitor.Visit_Dependency(AssetType::EnumEntry, AssetName<AssetType>(*asset));
if (result.has_value())
asset = static_cast<std::add_pointer_t<typename AssetType::Type>>(result->m_ptr);
}