mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-01-13 20:21:48 +00:00
refactor: add AssetMarker headers to zcg marker template
This commit is contained in:
@@ -1,14 +1,18 @@
|
||||
#include "OncePerTemplateRenderingContext.h"
|
||||
|
||||
#include "Domain/Computations/StructureComputations.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
OncePerTemplateRenderingContext::OncePerTemplateRenderingContext(std::string game,
|
||||
const Architecture gameArchitecture,
|
||||
std::vector<const FastFileBlock*> fastFileBlocks)
|
||||
std::vector<const FastFileBlock*> fastFileBlocks,
|
||||
std::vector<StructureInformation*> assets)
|
||||
: m_game(std::move(game)),
|
||||
m_architecture_mismatch(gameArchitecture != OWN_ARCHITECTURE),
|
||||
m_pointer_size(GetPointerSizeForArchitecture(gameArchitecture)),
|
||||
m_blocks(std::move(fastFileBlocks)),
|
||||
m_assets(std::move(assets)),
|
||||
m_default_normal_block(nullptr),
|
||||
m_default_temp_block(nullptr)
|
||||
{
|
||||
@@ -26,6 +30,15 @@ OncePerTemplateRenderingContext::OncePerTemplateRenderingContext(std::string gam
|
||||
|
||||
std::unique_ptr<OncePerTemplateRenderingContext> OncePerTemplateRenderingContext::BuildContext(const IDataRepository* repository)
|
||||
{
|
||||
std::vector<StructureInformation*> assetInformation;
|
||||
for (auto* info : repository->GetAllStructureInformation())
|
||||
{
|
||||
if (!StructureComputations(info).IsAsset())
|
||||
continue;
|
||||
|
||||
assetInformation.emplace_back(info);
|
||||
}
|
||||
|
||||
return std::make_unique<OncePerTemplateRenderingContext>(
|
||||
OncePerTemplateRenderingContext(repository->GetGameName(), repository->GetArchitecture(), repository->GetAllFastFileBlocks()));
|
||||
OncePerTemplateRenderingContext(repository->GetGameName(), repository->GetArchitecture(), repository->GetAllFastFileBlocks(), assetInformation));
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "Persistence/IDataRepository.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class OncePerTemplateRenderingContext
|
||||
{
|
||||
@@ -13,10 +14,14 @@ public:
|
||||
bool m_architecture_mismatch;
|
||||
unsigned m_pointer_size;
|
||||
std::vector<const FastFileBlock*> m_blocks;
|
||||
std::vector<StructureInformation*> m_assets;
|
||||
|
||||
const FastFileBlock* m_default_normal_block;
|
||||
const FastFileBlock* m_default_temp_block;
|
||||
|
||||
private:
|
||||
OncePerTemplateRenderingContext(std::string game, Architecture gameArchitecture, std::vector<const FastFileBlock*> fastFileBlocks);
|
||||
OncePerTemplateRenderingContext(std::string game,
|
||||
Architecture gameArchitecture,
|
||||
std::vector<const FastFileBlock*> fastFileBlocks,
|
||||
std::vector<StructureInformation*> assets);
|
||||
};
|
||||
|
||||
@@ -11,22 +11,19 @@ namespace
|
||||
{
|
||||
constexpr int TAG_SOURCE = 1;
|
||||
|
||||
class Template final : BaseTemplate
|
||||
class PerAsset final : BaseTemplate
|
||||
{
|
||||
public:
|
||||
Template(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream, context)
|
||||
PerAsset(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
|
||||
void Source()
|
||||
{
|
||||
LINE("// ====================================================================")
|
||||
LINE("// This file has been generated by ZoneCodeGenerator.")
|
||||
LINE("// Do not modify.")
|
||||
LINE("// Any changes will be discarded when regenerating.")
|
||||
LINE("// ====================================================================")
|
||||
LINE("")
|
||||
AddGeneratedHint();
|
||||
|
||||
LINEF("#include \"Game/{0}/{0}.h\"", m_env.m_game)
|
||||
LINE("")
|
||||
LINE("#include <catch2/catch_test_macros.hpp>")
|
||||
@@ -78,6 +75,8 @@ namespace
|
||||
m_intendation--;
|
||||
LINE("}")
|
||||
}
|
||||
|
||||
const OncePerAssetRenderingContext& m_env;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
@@ -88,14 +87,14 @@ std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRenderOncePerA
|
||||
auto assetName = context.m_asset->m_definition->m_name;
|
||||
utils::MakeStringLowerCase(assetName);
|
||||
|
||||
files.emplace_back(std::format("{0}/{0}_struct_test.cpp", assetName), TAG_SOURCE);
|
||||
files.emplace_back(std::format("XAssets/{0}/{0}_struct_test.cpp", assetName), TAG_SOURCE);
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
void AssetStructTestsTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
|
||||
{
|
||||
Template t(stream, context);
|
||||
PerAsset t(stream, context);
|
||||
|
||||
assert(fileTag == TAG_SOURCE);
|
||||
if (fileTag == TAG_SOURCE)
|
||||
|
||||
@@ -5,9 +5,8 @@
|
||||
|
||||
#include <sstream>
|
||||
|
||||
BaseTemplate::BaseTemplate(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
BaseTemplate::BaseTemplate(std::ostream& stream)
|
||||
: m_out(stream),
|
||||
m_env(context),
|
||||
m_intendation(0u)
|
||||
{
|
||||
}
|
||||
@@ -18,6 +17,17 @@ void BaseTemplate::DoIntendation() const
|
||||
m_out << INTENDATION;
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
void BaseTemplate::AddGeneratedHint() const
|
||||
{
|
||||
LINE("// ====================================================================")
|
||||
LINE("// This file has been generated by ZoneCodeGenerator.")
|
||||
LINE("// Do not modify.")
|
||||
LINE("// Any changes will be discarded when regenerating.")
|
||||
LINE("// ====================================================================")
|
||||
LINE("")
|
||||
} // clang-format on
|
||||
|
||||
std::string BaseTemplate::Upper(std::string str)
|
||||
{
|
||||
for (auto& c : str)
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "Domain/Evaluation/OperandDynamic.h"
|
||||
#include "Domain/Evaluation/OperandStatic.h"
|
||||
#include "Domain/Evaluation/Operation.h"
|
||||
#include "Generating/OncePerAssetRenderingContext.h"
|
||||
|
||||
#include <format>
|
||||
#include <ostream>
|
||||
@@ -15,10 +14,12 @@ class BaseTemplate
|
||||
protected:
|
||||
static constexpr auto INTENDATION = " ";
|
||||
|
||||
BaseTemplate(std::ostream& stream, const OncePerAssetRenderingContext& context);
|
||||
explicit BaseTemplate(std::ostream& stream);
|
||||
|
||||
void DoIntendation() const;
|
||||
|
||||
void AddGeneratedHint() const;
|
||||
|
||||
static std::string Upper(std::string str);
|
||||
static std::string Lower(std::string str);
|
||||
static std::string MakeTypeVarName(const DataDefinition* def);
|
||||
@@ -37,7 +38,6 @@ protected:
|
||||
static std::string MakeEvaluation(const IEvaluation* evaluation);
|
||||
|
||||
std::ostream& m_out;
|
||||
const OncePerAssetRenderingContext& m_env;
|
||||
unsigned m_intendation;
|
||||
|
||||
private:
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "Utils/StringUtils.h"
|
||||
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
namespace
|
||||
@@ -14,22 +13,19 @@ namespace
|
||||
constexpr int TAG_HEADER = 1;
|
||||
constexpr int TAG_SOURCE = 2;
|
||||
|
||||
class Template final : BaseTemplate
|
||||
class PerAsset final : BaseTemplate
|
||||
{
|
||||
public:
|
||||
Template(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream, context)
|
||||
PerAsset(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
|
||||
void Header()
|
||||
{
|
||||
LINE("// ====================================================================")
|
||||
LINE("// This file has been generated by ZoneCodeGenerator.")
|
||||
LINE("// Do not modify.")
|
||||
LINE("// Any changes will be discarded when regenerating.")
|
||||
LINE("// ====================================================================")
|
||||
LINE("")
|
||||
AddGeneratedHint();
|
||||
|
||||
LINE("#pragma once")
|
||||
LINE("")
|
||||
LINEF("#include \"Game/{0}/{0}.h\"", m_env.m_game)
|
||||
@@ -137,12 +133,8 @@ namespace
|
||||
|
||||
void Source()
|
||||
{
|
||||
LINE("// ====================================================================")
|
||||
LINE("// This file has been generated by ZoneCodeGenerator.")
|
||||
LINE("// Do not modify.")
|
||||
LINE("// Any changes will be discarded when regenerating.")
|
||||
LINE("// ====================================================================")
|
||||
LINE("")
|
||||
AddGeneratedHint();
|
||||
|
||||
LINEF("#include \"{0}_load_db.h\"", Lower(m_env.m_asset->m_definition->m_name))
|
||||
LINE("")
|
||||
LINEF("#include \"Game/{0}/AssetMarker{0}.h\"", m_env.m_game)
|
||||
@@ -2195,6 +2187,8 @@ namespace
|
||||
m_intendation--;
|
||||
LINE("}")
|
||||
}
|
||||
|
||||
const OncePerAssetRenderingContext& m_env;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
@@ -2205,15 +2199,15 @@ std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerAsset(con
|
||||
auto assetName = context.m_asset->m_definition->m_name;
|
||||
utils::MakeStringLowerCase(assetName);
|
||||
|
||||
files.emplace_back(std::format("{0}/{0}_load_db.h", assetName), TAG_HEADER);
|
||||
files.emplace_back(std::format("{0}/{0}_load_db.cpp", assetName), TAG_SOURCE);
|
||||
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);
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneLoadTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
|
||||
{
|
||||
Template t(stream, context);
|
||||
PerAsset t(stream, context);
|
||||
|
||||
if (fileTag == TAG_HEADER)
|
||||
{
|
||||
|
||||
@@ -12,23 +12,50 @@ namespace
|
||||
{
|
||||
constexpr int TAG_HEADER = 1;
|
||||
constexpr int TAG_SOURCE = 2;
|
||||
constexpr int TAG_ALL_MARKERS = 3;
|
||||
|
||||
class Template final : BaseTemplate
|
||||
class PerTemplate final : BaseTemplate
|
||||
{
|
||||
public:
|
||||
Template(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream, context)
|
||||
PerTemplate(std::ostream& stream, const OncePerTemplateRenderingContext& context)
|
||||
: BaseTemplate(stream),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
|
||||
void AllMarkers() const
|
||||
{
|
||||
AddGeneratedHint();
|
||||
|
||||
LINE("#pragma once")
|
||||
LINE("")
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
const OncePerTemplateRenderingContext& m_env;
|
||||
};
|
||||
|
||||
class PerAsset final : BaseTemplate
|
||||
{
|
||||
public:
|
||||
PerAsset(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
|
||||
void Header()
|
||||
{
|
||||
LINE("// ====================================================================")
|
||||
LINE("// This file has been generated by ZoneCodeGenerator.")
|
||||
LINE("// Do not modify.")
|
||||
LINE("// Any changes will be discarded when regenerating.")
|
||||
LINE("// ====================================================================")
|
||||
LINE("")
|
||||
AddGeneratedHint();
|
||||
|
||||
LINE("#pragma once")
|
||||
LINE("")
|
||||
LINEF("#include \"Game/{0}/{0}.h\"", m_env.m_game)
|
||||
@@ -113,12 +140,8 @@ namespace
|
||||
|
||||
void Source()
|
||||
{
|
||||
LINE("// ====================================================================")
|
||||
LINE("// This file has been generated by ZoneCodeGenerator.")
|
||||
LINE("// Do not modify.")
|
||||
LINE("// Any changes will be discarded when regenerating.")
|
||||
LINE("// ====================================================================")
|
||||
LINE("")
|
||||
AddGeneratedHint();
|
||||
|
||||
LINEF("#include \"{0}_mark_db.h\"", Lower(m_env.m_asset->m_definition->m_name))
|
||||
|
||||
if (!m_env.m_referenced_assets.empty())
|
||||
@@ -761,9 +784,28 @@ namespace
|
||||
m_intendation--;
|
||||
LINE("}")
|
||||
}
|
||||
|
||||
const OncePerAssetRenderingContext& m_env;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerTemplate(const OncePerTemplateRenderingContext& context)
|
||||
{
|
||||
std::vector<CodeTemplateFile> files;
|
||||
|
||||
files.emplace_back(std::format("AssetMarker{0}.h", context.m_game), TAG_ALL_MARKERS);
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneMarkTemplate::RenderOncePerTemplateFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerTemplateRenderingContext& context)
|
||||
{
|
||||
assert(fileTag == TAG_ALL_MARKERS);
|
||||
|
||||
PerTemplate t(stream, context);
|
||||
t.AllMarkers();
|
||||
}
|
||||
|
||||
std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
|
||||
{
|
||||
std::vector<CodeTemplateFile> files;
|
||||
@@ -771,15 +813,15 @@ std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerAsset(con
|
||||
auto assetName = context.m_asset->m_definition->m_name;
|
||||
utils::MakeStringLowerCase(assetName);
|
||||
|
||||
files.emplace_back(std::format("{0}/{0}_mark_db.h", assetName), TAG_HEADER);
|
||||
files.emplace_back(std::format("{0}/{0}_mark_db.cpp", assetName), TAG_SOURCE);
|
||||
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);
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneMarkTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
|
||||
{
|
||||
Template t(stream, context);
|
||||
PerAsset t(stream, context);
|
||||
|
||||
if (fileTag == TAG_HEADER)
|
||||
{
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
class ZoneMarkTemplate 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;
|
||||
};
|
||||
|
||||
@@ -12,22 +12,19 @@ namespace
|
||||
constexpr CodeTemplateFileTag TAG_HEADER = 1;
|
||||
constexpr CodeTemplateFileTag TAG_SOURCE = 2;
|
||||
|
||||
class Template final : BaseTemplate
|
||||
class PerAsset final : BaseTemplate
|
||||
{
|
||||
public:
|
||||
Template(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream, context)
|
||||
PerAsset(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
|
||||
void Header()
|
||||
{
|
||||
LINE("// ====================================================================")
|
||||
LINE("// This file has been generated by ZoneCodeGenerator.")
|
||||
LINE("// Do not modify.")
|
||||
LINE("// Any changes will be discarded when regenerating.")
|
||||
LINE("// ====================================================================")
|
||||
LINE("")
|
||||
AddGeneratedHint();
|
||||
|
||||
LINE("#pragma once")
|
||||
LINE("")
|
||||
LINEF("#include \"Game/{0}/{0}.h\"", m_env.m_game)
|
||||
@@ -112,12 +109,8 @@ namespace
|
||||
|
||||
void Source()
|
||||
{
|
||||
LINE("// ====================================================================")
|
||||
LINE("// This file has been generated by ZoneCodeGenerator.")
|
||||
LINE("// Do not modify.")
|
||||
LINE("// Any changes will be discarded when regenerating.")
|
||||
LINE("// ====================================================================")
|
||||
LINE("")
|
||||
AddGeneratedHint();
|
||||
|
||||
LINEF("#include \"{0}_write_db.h\"", Lower(m_env.m_asset->m_definition->m_name))
|
||||
|
||||
if (!m_env.m_referenced_assets.empty())
|
||||
@@ -1230,6 +1223,8 @@ namespace
|
||||
m_intendation--;
|
||||
LINE("}")
|
||||
}
|
||||
|
||||
const OncePerAssetRenderingContext& m_env;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
@@ -1241,15 +1236,15 @@ std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRenderOncePerAsset(co
|
||||
for (auto& c : assetName)
|
||||
c = static_cast<char>(tolower(c));
|
||||
|
||||
files.emplace_back(std::format("{0}/{0}_write_db.h", assetName), TAG_HEADER);
|
||||
files.emplace_back(std::format("{0}/{0}_write_db.cpp", assetName), TAG_SOURCE);
|
||||
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);
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneWriteTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
|
||||
{
|
||||
Template t(stream, context);
|
||||
PerAsset t(stream, context);
|
||||
|
||||
if (fileTag == TAG_HEADER)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user