2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-01-13 20:21:48 +00:00

refactor: add game name to generated load and write files

This commit is contained in:
Jan Laupetin
2026-01-06 10:30:16 +00:00
parent 2d1cfbf43d
commit 4feccd4587
17 changed files with 168 additions and 394 deletions

View File

@@ -87,7 +87,10 @@ std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRenderOncePerA
auto assetName = context.m_asset->m_definition->m_name;
utils::MakeStringLowerCase(assetName);
files.emplace_back(std::format("XAssets/{0}/{0}_struct_test.cpp", assetName), TAG_SOURCE);
auto gameName = context.m_game;
utils::MakeStringLowerCase(gameName);
files.emplace_back(std::format("XAssets/{0}/{0}_{1}_struct_test.cpp", assetName, gameName), TAG_SOURCE);
return files;
}

View File

@@ -12,6 +12,33 @@ namespace
{
constexpr int TAG_HEADER = 1;
constexpr int TAG_SOURCE = 2;
constexpr int TAG_ALL_LOADERS = 3;
class PerTemplate final : BaseTemplate
{
public:
PerTemplate(std::ostream& stream, const OncePerTemplateRenderingContext& context)
: BaseTemplate(stream),
m_env(context)
{
}
void AllLoaders() const
{
AddGeneratedHint();
LINE("#pragma once")
LINE("")
for (const auto* asset : m_env.m_assets)
{
LINEF("#include \"Game/{0}/XAssets/{1}/{1}_{2}_load_db.h\"", m_env.m_game, Lower(asset->m_definition->m_name), Lower(m_env.m_game))
}
}
private:
const OncePerTemplateRenderingContext& m_env;
};
class PerAsset final : BaseTemplate
{
@@ -135,7 +162,7 @@ namespace
{
AddGeneratedHint();
LINEF("#include \"{0}_load_db.h\"", Lower(m_env.m_asset->m_definition->m_name))
LINEF("#include \"{0}_{1}_load_db.h\"", Lower(m_env.m_asset->m_definition->m_name), Lower(m_env.m_game))
LINE("")
LINEF("#include \"Game/{0}/AssetMarker{0}.h\"", m_env.m_game)
LINE("")
@@ -147,7 +174,7 @@ namespace
LINE("// Referenced Assets:")
for (const auto* type : m_env.m_referenced_assets)
{
LINEF("#include \"../{0}/{0}_load_db.h\"", Lower(type->m_type->m_name))
LINEF("#include \"../{0}/{0}_{1}_load_db.h\"", Lower(type->m_type->m_name), Lower(m_env.m_game))
}
}
@@ -2192,6 +2219,23 @@ namespace
};
} // namespace
std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerTemplate(const OncePerTemplateRenderingContext& context)
{
std::vector<CodeTemplateFile> files;
files.emplace_back(std::format("AssetLoader{0}.h", context.m_game), TAG_ALL_LOADERS);
return files;
}
void ZoneLoadTemplate::RenderOncePerTemplateFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerTemplateRenderingContext& context)
{
assert(fileTag == TAG_ALL_LOADERS);
const PerTemplate t(stream, context);
t.AllLoaders();
}
std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
{
std::vector<CodeTemplateFile> files;
@@ -2199,8 +2243,11 @@ std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerAsset(con
auto assetName = context.m_asset->m_definition->m_name;
utils::MakeStringLowerCase(assetName);
files.emplace_back(std::format("XAssets/{0}/{0}_load_db.h", assetName), TAG_HEADER);
files.emplace_back(std::format("XAssets/{0}/{0}_load_db.cpp", assetName), TAG_SOURCE);
auto gameName = context.m_game;
utils::MakeStringLowerCase(gameName);
files.emplace_back(std::format("XAssets/{0}/{0}_{1}_load_db.h", assetName, gameName), TAG_HEADER);
files.emplace_back(std::format("XAssets/{0}/{0}_{1}_load_db.cpp", assetName, gameName), TAG_SOURCE);
return files;
}

View File

@@ -5,6 +5,9 @@
class ZoneLoadTemplate final : public ICodeTemplate
{
public:
std::vector<CodeTemplateFile> GetFilesToRenderOncePerTemplate(const OncePerTemplateRenderingContext& context) override;
void RenderOncePerTemplateFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerTemplateRenderingContext& context) override;
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
};

View File

@@ -32,10 +32,7 @@ namespace
for (const auto* asset : m_env.m_assets)
{
auto lowerAssetName = asset->m_definition->m_name;
utils::MakeStringLowerCase(lowerAssetName);
LINEF("#include \"Game/{0}/XAssets/{1}/{1}_mark_db.h\"", m_env.m_game, lowerAssetName)
LINEF("#include \"Game/{0}/XAssets/{1}/{1}_{2}_mark_db.h\"", m_env.m_game, Lower(asset->m_definition->m_name), Lower(m_env.m_game))
}
}
@@ -142,7 +139,7 @@ namespace
{
AddGeneratedHint();
LINEF("#include \"{0}_mark_db.h\"", Lower(m_env.m_asset->m_definition->m_name))
LINEF("#include \"{0}_{1}_mark_db.h\"", Lower(m_env.m_asset->m_definition->m_name), Lower(m_env.m_game))
if (!m_env.m_referenced_assets.empty())
{
@@ -150,7 +147,7 @@ namespace
LINE("// Referenced Assets:")
for (const auto* type : m_env.m_referenced_assets)
{
LINEF("#include \"../{0}/{0}_mark_db.h\"", Lower(type->m_type->m_name))
LINEF("#include \"../{0}/{0}_{1}_mark_db.h\"", Lower(type->m_type->m_name), Lower(m_env.m_game))
}
}
LINE("")
@@ -802,7 +799,7 @@ void ZoneMarkTemplate::RenderOncePerTemplateFile(std::ostream& stream, const Cod
{
assert(fileTag == TAG_ALL_MARKERS);
PerTemplate t(stream, context);
const PerTemplate t(stream, context);
t.AllMarkers();
}
@@ -813,8 +810,11 @@ std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerAsset(con
auto assetName = context.m_asset->m_definition->m_name;
utils::MakeStringLowerCase(assetName);
files.emplace_back(std::format("XAssets/{0}/{0}_mark_db.h", assetName), TAG_HEADER);
files.emplace_back(std::format("XAssets/{0}/{0}_mark_db.cpp", assetName), TAG_SOURCE);
auto gameName = context.m_game;
utils::MakeStringLowerCase(gameName);
files.emplace_back(std::format("XAssets/{0}/{0}_{1}_mark_db.h", assetName, gameName), TAG_HEADER);
files.emplace_back(std::format("XAssets/{0}/{0}_{1}_mark_db.cpp", assetName, gameName), TAG_SOURCE);
return files;
}

View File

@@ -2,6 +2,7 @@
#include "Domain/Computations/StructureComputations.h"
#include "Internal/BaseTemplate.h"
#include "Utils/StringUtils.h"
#include <cassert>
#include <cstdint>
@@ -11,6 +12,33 @@ namespace
{
constexpr CodeTemplateFileTag TAG_HEADER = 1;
constexpr CodeTemplateFileTag TAG_SOURCE = 2;
constexpr CodeTemplateFileTag TAG_ALL_WRITERS = 3;
class PerTemplate final : BaseTemplate
{
public:
PerTemplate(std::ostream& stream, const OncePerTemplateRenderingContext& context)
: BaseTemplate(stream),
m_env(context)
{
}
void AllWriters() const
{
AddGeneratedHint();
LINE("#pragma once")
LINE("")
for (const auto* asset : m_env.m_assets)
{
LINEF("#include \"Game/{0}/XAssets/{1}/{1}_{2}_write_db.h\"", m_env.m_game, Lower(asset->m_definition->m_name), Lower(m_env.m_game))
}
}
private:
const OncePerTemplateRenderingContext& m_env;
};
class PerAsset final : BaseTemplate
{
@@ -111,7 +139,7 @@ namespace
{
AddGeneratedHint();
LINEF("#include \"{0}_write_db.h\"", Lower(m_env.m_asset->m_definition->m_name))
LINEF("#include \"{0}_{1}_write_db.h\"", Lower(m_env.m_asset->m_definition->m_name), Lower(m_env.m_game))
if (!m_env.m_referenced_assets.empty())
{
@@ -119,7 +147,7 @@ namespace
LINE("// Referenced Assets:")
for (const auto* type : m_env.m_referenced_assets)
{
LINEF("#include \"../{0}/{0}_write_db.h\"", Lower(type->m_type->m_name))
LINEF("#include \"../{0}/{0}_{1}_write_db.h\"", Lower(type->m_type->m_name), Lower(m_env.m_game))
}
}
@@ -1228,16 +1256,35 @@ namespace
};
} // namespace
std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRenderOncePerTemplate(const OncePerTemplateRenderingContext& context)
{
std::vector<CodeTemplateFile> files;
files.emplace_back(std::format("AssetWriter{0}.h", context.m_game), TAG_ALL_WRITERS);
return files;
}
void ZoneWriteTemplate::RenderOncePerTemplateFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerTemplateRenderingContext& context)
{
assert(fileTag == TAG_ALL_WRITERS);
const PerTemplate t(stream, context);
t.AllWriters();
}
std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
{
std::vector<CodeTemplateFile> files;
auto assetName = context.m_asset->m_definition->m_name;
for (auto& c : assetName)
c = static_cast<char>(tolower(c));
utils::MakeStringLowerCase(assetName);
files.emplace_back(std::format("XAssets/{0}/{0}_write_db.h", assetName), TAG_HEADER);
files.emplace_back(std::format("XAssets/{0}/{0}_write_db.cpp", assetName), TAG_SOURCE);
auto gameName = context.m_game;
utils::MakeStringLowerCase(gameName);
files.emplace_back(std::format("XAssets/{0}/{0}_{1}_write_db.h", assetName, gameName), TAG_HEADER);
files.emplace_back(std::format("XAssets/{0}/{0}_{1}_write_db.cpp", assetName, gameName), TAG_SOURCE);
return files;
}

View File

@@ -5,6 +5,9 @@
class ZoneWriteTemplate final : public ICodeTemplate
{
public:
std::vector<CodeTemplateFile> GetFilesToRenderOncePerTemplate(const OncePerTemplateRenderingContext& context) override;
void RenderOncePerTemplateFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerTemplateRenderingContext& context) override;
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
};