mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-10-23 20:18:10 +00:00
refactor: generate combined asset loader/writer/marker headers per variant
This commit is contained in:
49 files changed
+408
-368
No files matched your search
@@ -1,7 +1,7 @@
|
||||
#include "ObjLoaderIW3.h"
|
||||
|
||||
#include "Asset/GlobalAssetPoolsLoader.h"
|
||||
#include "Game/IW3/AssetMarkerIW3.h"
|
||||
#include "Game/IW3/AssetMarkerIW3_pc.h"
|
||||
#include "Game/IW3/Font/FontLoaderIW3.h"
|
||||
#include "Game/IW3/GameIW3.h"
|
||||
#include "Game/IW3/IW3.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "ObjLoaderIW4.h"
|
||||
|
||||
#include "Asset/GlobalAssetPoolsLoader.h"
|
||||
#include "Game/IW4/AssetMarkerIW4.h"
|
||||
#include "Game/IW4/AssetMarkerIW4_pc32.h"
|
||||
#include "Game/IW4/Font/FontLoaderIW4.h"
|
||||
#include "Game/IW4/GameIW4.h"
|
||||
#include "Game/IW4/IW4.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "ObjLoaderIW5.h"
|
||||
|
||||
#include "Asset/GlobalAssetPoolsLoader.h"
|
||||
#include "Game/IW5/AssetMarkerIW5.h"
|
||||
#include "Game/IW5/AssetMarkerIW5_pc32.h"
|
||||
#include "Game/IW5/Font/FontLoaderIW5.h"
|
||||
#include "Game/IW5/GameIW5.h"
|
||||
#include "Game/IW5/IW5.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "ObjLoaderQOS.h"
|
||||
|
||||
#include "Asset/GlobalAssetPoolsLoader.h"
|
||||
#include "Game/QOS/AssetMarkerQOS.h"
|
||||
#include "Game/QOS/AssetMarkerQOS_pc.h"
|
||||
#include "Game/QOS/QOS.h"
|
||||
#include "Localize/AssetLoaderLocalizeQOS.h"
|
||||
#include "RawFile/AssetLoaderRawFileQOS.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "ObjLoaderT4.h"
|
||||
|
||||
#include "Asset/GlobalAssetPoolsLoader.h"
|
||||
#include "Game/T4/AssetMarkerT4.h"
|
||||
#include "Game/T4/AssetMarkerT4_pc.h"
|
||||
#include "Game/T4/Font/FontLoaderT4.h"
|
||||
#include "Game/T4/Image/ImageLoaderEmbeddedT4.h"
|
||||
#include "Game/T4/Image/ImageLoaderExternalT4.h"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "ObjLoaderT5.h"
|
||||
|
||||
#include "Asset/GlobalAssetPoolsLoader.h"
|
||||
#include "Game/T5/AssetMarkerT5.h"
|
||||
#include "Game/T5/AssetMarkerT5_pc.h"
|
||||
#include "Game/T5/Font/FontLoaderT5.h"
|
||||
#include "Game/T5/GameT5.h"
|
||||
#include "Game/T5/Image/ImageLoaderEmbeddedT5.h"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#include "Asset/GlobalAssetPoolsLoader.h"
|
||||
#include "FontIcon/CsvLoaderFontIconT6.h"
|
||||
#include "FontIcon/JsonLoaderFontIconT6.h"
|
||||
#include "Game/T6/AssetMarkerT6.h"
|
||||
#include "Game/T6/AssetMarkerT6_pc.h"
|
||||
#include "Game/T6/CommonT6.h"
|
||||
#include "Game/T6/Font/FontLoaderT6.h"
|
||||
#include "Game/T6/GameT6.h"
|
||||
|
||||
+17
-11
@@ -306,6 +306,8 @@ function ZoneCode:allTestFiles()
|
||||
|
||||
for i, variantName in ipairs(gameData.Variants) do
|
||||
local variantLower = string.lower(variantName)
|
||||
|
||||
-- Per asset
|
||||
for j, assetName in ipairs(gameData.Assets) do
|
||||
local assetNameLower = string.lower(assetName)
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_" .. gameLower .. "_" .. variantName .. "_struct_test.cpp")
|
||||
@@ -324,15 +326,17 @@ function ZoneCode:allMarkFiles()
|
||||
|
||||
for i, variantName in ipairs(gameData.Variants) do
|
||||
local variantLower = string.lower(variantName)
|
||||
|
||||
-- Per asset
|
||||
for j, assetName in ipairs(gameData.Assets) do
|
||||
local assetNameLower = string.lower(assetName)
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_" .. gameLower .. "_" .. variantName .. "_mark_db.cpp")
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_" .. gameLower .. "_" .. variantName .. "_mark_db.h")
|
||||
end
|
||||
|
||||
-- Per variant
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/AssetMarker" .. game .. "_" .. variantLower .. ".h")
|
||||
end
|
||||
|
||||
-- PerTemplate
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/AssetMarker" .. game .. ".h")
|
||||
end
|
||||
|
||||
return result
|
||||
@@ -346,16 +350,17 @@ function ZoneCode:allLoadFiles()
|
||||
|
||||
for i, variantName in ipairs(gameData.Variants) do
|
||||
local variantLower = string.lower(variantName)
|
||||
-- Per Asset/Variant
|
||||
|
||||
-- Per asset
|
||||
for j, assetName in ipairs(gameData.Assets) do
|
||||
local assetNameLower = string.lower(assetName)
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_" .. gameLower .. "_" .. variantName .. "_load_db.cpp")
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_" .. gameLower .. "_" .. variantName .. "_load_db.h")
|
||||
end
|
||||
|
||||
-- Per variant
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/AssetLoader" .. game .. "_" .. variantLower .. ".h")
|
||||
end
|
||||
|
||||
-- PerTemplate
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/AssetLoader" .. game .. ".h")
|
||||
end
|
||||
|
||||
return result
|
||||
@@ -369,16 +374,17 @@ function ZoneCode:allWriteFiles()
|
||||
|
||||
for i, variantName in ipairs(gameData.Variants) do
|
||||
local variantLower = string.lower(variantName)
|
||||
-- Per Asset/Variant
|
||||
|
||||
-- Per asset
|
||||
for j, assetName in ipairs(gameData.Assets) do
|
||||
local assetNameLower = string.lower(assetName)
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_" .. gameLower .. "_" .. variantName .. "_write_db.cpp")
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/XAssets/" .. assetNameLower .. "/" .. assetNameLower .. "_" .. gameLower .. "_" .. variantName .. "_write_db.h")
|
||||
end
|
||||
|
||||
-- Per variant
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/AssetWriter" .. game .. "_" .. variantLower .. ".h")
|
||||
end
|
||||
|
||||
-- PerTemplate
|
||||
table.insert(result, "%{wks.location}/src/ZoneCode/Game/" .. game .. "/AssetWriter" .. game .. ".h")
|
||||
end
|
||||
|
||||
return result
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
#include "BaseRenderingContext.h"
|
||||
|
||||
BaseRenderingContext::BaseRenderingContext(std::string game, const GameVariant* variant, std::vector<const FastFileBlock*> fastFileBlocks)
|
||||
: m_game(std::move(game)),
|
||||
m_word_size_mismatch(variant->m_word_size != OWN_WORD_SIZE),
|
||||
m_word_size(variant->m_word_size),
|
||||
m_pointer_size(GetPointerSizeForWordSize(variant->m_word_size)),
|
||||
m_endianness_mismatch(std::endian::native != variant->m_endianness),
|
||||
m_endianness(variant->m_endianness),
|
||||
m_blocks(std::move(fastFileBlocks)),
|
||||
m_default_normal_block(nullptr),
|
||||
m_default_temp_block(nullptr),
|
||||
m_variant(variant)
|
||||
{
|
||||
for (const auto* block : m_blocks)
|
||||
{
|
||||
if (block->m_is_default)
|
||||
{
|
||||
if (block->m_type == FastFileBlockType::NORMAL && m_default_normal_block == nullptr)
|
||||
m_default_normal_block = block;
|
||||
else if (block->m_type == FastFileBlockType::TEMP && m_default_temp_block == nullptr)
|
||||
m_default_temp_block = block;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "Persistence/IDataRepository.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class BaseRenderingContext
|
||||
{
|
||||
public:
|
||||
std::string m_game;
|
||||
bool m_word_size_mismatch;
|
||||
WordSize m_word_size;
|
||||
unsigned m_pointer_size;
|
||||
bool m_endianness_mismatch;
|
||||
std::endian m_endianness;
|
||||
std::vector<const FastFileBlock*> m_blocks;
|
||||
|
||||
const FastFileBlock* m_default_normal_block;
|
||||
const FastFileBlock* m_default_temp_block;
|
||||
|
||||
const GameVariant* m_variant;
|
||||
|
||||
protected:
|
||||
BaseRenderingContext(std::string game, const GameVariant* variant, std::vector<const FastFileBlock*> fastFileBlocks);
|
||||
};
|
||||
@@ -15,6 +15,25 @@
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
namespace
|
||||
{
|
||||
void LogDirtyCheckResult(const utils::TextFileCheckDirtyResult result, const std::string_view forWhat)
|
||||
{
|
||||
switch (result)
|
||||
{
|
||||
case utils::TextFileCheckDirtyResult::OUTPUT_WRITTEN:
|
||||
con::info("Successfully generated code for {}", forWhat);
|
||||
break;
|
||||
case utils::TextFileCheckDirtyResult::OUTPUT_WAS_UP_TO_DATE:
|
||||
con::info("Code was up to date for {}", forWhat);
|
||||
break;
|
||||
case utils::TextFileCheckDirtyResult::FAILURE:
|
||||
con::error("Failed to generate code for {}", forWhat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
CodeGenerator::CodeGenerator(const ZoneCodeGeneratorArguments* args)
|
||||
: m_args(args)
|
||||
{
|
||||
@@ -29,7 +48,7 @@ void CodeGenerator::SetupTemplates()
|
||||
m_template_mapping["assetstructtests"] = std::make_unique<AssetStructTestsTemplate>();
|
||||
}
|
||||
|
||||
utils::TextFileCheckDirtyResult CodeGenerator::GenerateCodeOncePerTemplate(const OncePerTemplateRenderingContext& context, ICodeTemplate* codeTemplate) const
|
||||
utils::TextFileCheckDirtyResult CodeGenerator::GenerateCodeOncePerTemplate(const PerTemplateRenderingContext& context, ICodeTemplate* codeTemplate) const
|
||||
{
|
||||
bool wroteAtLeastOneFile = false;
|
||||
for (const auto& codeFile : codeTemplate->GetFilesToRenderOncePerTemplate(context))
|
||||
@@ -60,7 +79,38 @@ utils::TextFileCheckDirtyResult CodeGenerator::GenerateCodeOncePerTemplate(const
|
||||
return wroteAtLeastOneFile ? utils::TextFileCheckDirtyResult::OUTPUT_WRITTEN : utils::TextFileCheckDirtyResult::OUTPUT_WAS_UP_TO_DATE;
|
||||
}
|
||||
|
||||
utils::TextFileCheckDirtyResult CodeGenerator::GenerateCodeOncePerAsset(const OncePerAssetRenderingContext& context, ICodeTemplate* codeTemplate) const
|
||||
utils::TextFileCheckDirtyResult CodeGenerator::GenerateCodeOncePerVariant(const PerVariantRenderingContext& context, ICodeTemplate* codeTemplate) const
|
||||
{
|
||||
bool wroteAtLeastOneFile = false;
|
||||
for (const auto& codeFile : codeTemplate->GetFilesToRenderOncePerVariant(context))
|
||||
{
|
||||
fs::path outputPath(m_args->m_output_directory);
|
||||
outputPath.append(codeFile.m_file_name);
|
||||
|
||||
utils::TextFileCheckDirtyOutput out(outputPath);
|
||||
if (!out.Open())
|
||||
{
|
||||
con::error("Failed to open file '{}'", outputPath.string());
|
||||
return utils::TextFileCheckDirtyResult::FAILURE;
|
||||
}
|
||||
|
||||
codeTemplate->RenderOncePerVariantFile(out.Stream(), codeFile.m_tag, context);
|
||||
|
||||
const auto fileResult = out.Close();
|
||||
if (fileResult == utils::TextFileCheckDirtyResult::FAILURE)
|
||||
{
|
||||
con::error("Failed to write file '{}'", outputPath.string());
|
||||
return utils::TextFileCheckDirtyResult::FAILURE;
|
||||
}
|
||||
|
||||
if (fileResult == utils::TextFileCheckDirtyResult::OUTPUT_WRITTEN)
|
||||
wroteAtLeastOneFile = true;
|
||||
}
|
||||
|
||||
return wroteAtLeastOneFile ? utils::TextFileCheckDirtyResult::OUTPUT_WRITTEN : utils::TextFileCheckDirtyResult::OUTPUT_WAS_UP_TO_DATE;
|
||||
}
|
||||
|
||||
utils::TextFileCheckDirtyResult CodeGenerator::GenerateCodeOncePerAsset(const PerAssetRenderingContext& context, ICodeTemplate* codeTemplate) const
|
||||
{
|
||||
bool wroteAtLeastOneFile = false;
|
||||
for (const auto& codeFile : codeTemplate->GetFilesToRenderOncePerAsset(context))
|
||||
@@ -145,39 +195,31 @@ bool CodeGenerator::GenerateCode(const IDataRepository* repository)
|
||||
{
|
||||
for (auto* asset : assets)
|
||||
{
|
||||
auto context = OncePerAssetRenderingContext::BuildContext(repository, asset, variant);
|
||||
auto context = std::make_unique<PerAssetRenderingContext>(repository, asset, variant);
|
||||
const auto result = GenerateCodeOncePerAsset(*context, foundTemplate->second.get());
|
||||
switch (result)
|
||||
{
|
||||
case utils::TextFileCheckDirtyResult::OUTPUT_WRITTEN:
|
||||
con::info("Successfully generated code for asset '{}' with preset '{}'", asset->m_definition->GetFullName(), foundTemplate->first);
|
||||
break;
|
||||
case utils::TextFileCheckDirtyResult::OUTPUT_WAS_UP_TO_DATE:
|
||||
con::info("Code was up to date for asset '{}' with preset '{}'", asset->m_definition->GetFullName(), foundTemplate->first);
|
||||
break;
|
||||
case utils::TextFileCheckDirtyResult::FAILURE:
|
||||
con::error("Failed to generate code for asset '{}' with preset '{}'", asset->m_definition->GetFullName(), foundTemplate->first);
|
||||
LogDirtyCheckResult(
|
||||
result,
|
||||
std::format("for asset '{}' with variant '{}' and preset '{}'", asset->m_definition->GetFullName(), variant->m_name, foundTemplate->first));
|
||||
if (result == utils::TextFileCheckDirtyResult::FAILURE)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
auto context = OncePerTemplateRenderingContext::BuildContext(repository, variant);
|
||||
const auto result = GenerateCodeOncePerTemplate(*context, foundTemplate->second.get());
|
||||
switch (result)
|
||||
{
|
||||
case utils::TextFileCheckDirtyResult::OUTPUT_WRITTEN:
|
||||
con::info("Successfully generated code with preset '{}'", foundTemplate->first);
|
||||
break;
|
||||
case utils::TextFileCheckDirtyResult::OUTPUT_WAS_UP_TO_DATE:
|
||||
con::info("Code was up to date for preset '{}'", foundTemplate->first);
|
||||
break;
|
||||
case utils::TextFileCheckDirtyResult::FAILURE:
|
||||
con::error("Failed to generate code with preset '{}'", foundTemplate->first);
|
||||
auto context = std::make_unique<PerVariantRenderingContext>(repository, variant);
|
||||
const auto result = GenerateCodeOncePerVariant(*context, foundTemplate->second.get());
|
||||
LogDirtyCheckResult(result, std::format("for variant '{}' with preset '{}'", variant->m_name, foundTemplate->first));
|
||||
if (result == utils::TextFileCheckDirtyResult::FAILURE)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
auto context = std::make_unique<PerTemplateRenderingContext>(repository);
|
||||
const auto result = GenerateCodeOncePerTemplate(*context, foundTemplate->second.get());
|
||||
LogDirtyCheckResult(result, std::format("for preset '{}'", foundTemplate->first));
|
||||
if (result == utils::TextFileCheckDirtyResult::FAILURE)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const auto end = std::chrono::steady_clock::now();
|
||||
const auto timeInMs = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
|
||||
|
||||
@@ -18,8 +18,9 @@ public:
|
||||
private:
|
||||
void SetupTemplates();
|
||||
|
||||
utils::TextFileCheckDirtyResult GenerateCodeOncePerTemplate(const OncePerTemplateRenderingContext& context, ICodeTemplate* codeTemplate) const;
|
||||
utils::TextFileCheckDirtyResult GenerateCodeOncePerAsset(const OncePerAssetRenderingContext& context, ICodeTemplate* codeTemplate) const;
|
||||
utils::TextFileCheckDirtyResult GenerateCodeOncePerTemplate(const PerTemplateRenderingContext& context, ICodeTemplate* codeTemplate) const;
|
||||
utils::TextFileCheckDirtyResult GenerateCodeOncePerVariant(const PerVariantRenderingContext& context, ICodeTemplate* codeTemplate) const;
|
||||
utils::TextFileCheckDirtyResult GenerateCodeOncePerAsset(const PerAssetRenderingContext& context, ICodeTemplate* codeTemplate) const;
|
||||
|
||||
static bool GetAssetWithName(const IDataRepository* repository, const std::string& name, StructureInformation*& asset);
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "OncePerAssetRenderingContext.h"
|
||||
#include "OncePerTemplateRenderingContext.h"
|
||||
#include "PerAssetRenderingContext.h"
|
||||
#include "PerTemplateRenderingContext.h"
|
||||
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
@@ -32,17 +32,24 @@ public:
|
||||
ICodeTemplate& operator=(const ICodeTemplate& other) = default;
|
||||
ICodeTemplate& operator=(ICodeTemplate&& other) noexcept = default;
|
||||
|
||||
virtual std::vector<CodeTemplateFile> GetFilesToRenderOncePerTemplate(const OncePerTemplateRenderingContext& context)
|
||||
virtual std::vector<CodeTemplateFile> GetFilesToRenderOncePerTemplate(const PerTemplateRenderingContext& context)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
virtual void RenderOncePerTemplateFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerTemplateRenderingContext& context) {}
|
||||
virtual void RenderOncePerTemplateFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerTemplateRenderingContext& context) {}
|
||||
|
||||
virtual std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
|
||||
virtual std::vector<CodeTemplateFile> GetFilesToRenderOncePerVariant(const PerVariantRenderingContext& context)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
virtual void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) {}
|
||||
virtual void RenderOncePerVariantFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerVariantRenderingContext& context) {}
|
||||
|
||||
virtual std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const PerAssetRenderingContext& context)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
virtual void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerAssetRenderingContext& context) {}
|
||||
};
|
||||
@@ -1,39 +0,0 @@
|
||||
#include "OncePerTemplateRenderingContext.h"
|
||||
|
||||
#include "Domain/Computations/StructureComputations.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
OncePerTemplateRenderingContext::OncePerTemplateRenderingContext(std::string game,
|
||||
const GameVariant* variant,
|
||||
std::vector<const FastFileBlock*> fastFileBlocks,
|
||||
std::vector<StructureInformation*> assets)
|
||||
: BaseRenderingContext(std::move(game), variant, std::move(fastFileBlocks)),
|
||||
m_assets(std::move(assets))
|
||||
{
|
||||
for (const auto* block : m_blocks)
|
||||
{
|
||||
if (block->m_is_default)
|
||||
{
|
||||
if (block->m_type == FastFileBlockType::NORMAL && m_default_normal_block == nullptr)
|
||||
m_default_normal_block = block;
|
||||
else if (block->m_type == FastFileBlockType::TEMP && m_default_temp_block == nullptr)
|
||||
m_default_temp_block = block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<OncePerTemplateRenderingContext> OncePerTemplateRenderingContext::BuildContext(const IDataRepository* repository, const GameVariant* variant)
|
||||
{
|
||||
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(), variant, repository->GetAllFastFileBlocks(), assetInformation));
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "BaseRenderingContext.h"
|
||||
#include "Persistence/IDataRepository.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class OncePerTemplateRenderingContext : public BaseRenderingContext
|
||||
{
|
||||
public:
|
||||
static std::unique_ptr<OncePerTemplateRenderingContext> BuildContext(const IDataRepository* repository, const GameVariant* variant);
|
||||
|
||||
std::vector<StructureInformation*> m_assets;
|
||||
|
||||
private:
|
||||
OncePerTemplateRenderingContext(std::string game,
|
||||
const GameVariant* variant,
|
||||
std::vector<const FastFileBlock*> fastFileBlocks,
|
||||
std::vector<StructureInformation*> assets);
|
||||
};
|
||||
+12
-33
@@ -1,4 +1,4 @@
|
||||
#include "OncePerAssetRenderingContext.h"
|
||||
#include "PerAssetRenderingContext.h"
|
||||
|
||||
#include "Domain/Computations/MemberComputations.h"
|
||||
#include "Domain/Computations/StructureComputations.h"
|
||||
@@ -18,24 +18,16 @@ RenderingUsedType::RenderingUsedType(const DataDefinition* type, StructureInform
|
||||
{
|
||||
}
|
||||
|
||||
OncePerAssetRenderingContext::OncePerAssetRenderingContext(std::string game, const GameVariant* variant, std::vector<const FastFileBlock*> fastFileBlocks)
|
||||
: BaseRenderingContext(std::move(game), variant, std::move(fastFileBlocks)),
|
||||
PerAssetRenderingContext::PerAssetRenderingContext(const IDataRepository* repository, StructureInformation* asset, const GameVariant* variant)
|
||||
: PerVariantRenderingContext(repository, variant),
|
||||
m_asset(nullptr),
|
||||
m_has_actions(false)
|
||||
{
|
||||
for (const auto* block : m_blocks)
|
||||
{
|
||||
if (block->m_is_default)
|
||||
{
|
||||
if (block->m_type == FastFileBlockType::NORMAL && m_default_normal_block == nullptr)
|
||||
m_default_normal_block = block;
|
||||
else if (block->m_type == FastFileBlockType::TEMP && m_default_temp_block == nullptr)
|
||||
m_default_temp_block = block;
|
||||
}
|
||||
}
|
||||
MakeAsset(repository, asset);
|
||||
CreateUsedTypeCollections();
|
||||
}
|
||||
|
||||
RenderingUsedType* OncePerAssetRenderingContext::AddUsedType(std::unique_ptr<RenderingUsedType> usedType)
|
||||
RenderingUsedType* PerAssetRenderingContext::AddUsedType(std::unique_ptr<RenderingUsedType> usedType)
|
||||
{
|
||||
auto* result = usedType.get();
|
||||
m_used_types.push_back(usedType.get());
|
||||
@@ -44,8 +36,7 @@ RenderingUsedType* OncePerAssetRenderingContext::AddUsedType(std::unique_ptr<Ren
|
||||
return result;
|
||||
}
|
||||
|
||||
RenderingUsedType*
|
||||
OncePerAssetRenderingContext::GetBaseType(const IDataRepository* repository, const MemberComputations* computations, RenderingUsedType* usedType)
|
||||
RenderingUsedType* PerAssetRenderingContext::GetBaseType(const IDataRepository* repository, const MemberComputations* computations, RenderingUsedType* usedType)
|
||||
{
|
||||
if (usedType->m_type->GetType() == DataDefinitionType::TYPEDEF)
|
||||
{
|
||||
@@ -73,7 +64,7 @@ RenderingUsedType*
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void OncePerAssetRenderingContext::AddMembersToContext(const IDataRepository* repository, const StructureInformation* info)
|
||||
void PerAssetRenderingContext::AddMembersToContext(const IDataRepository* repository, const StructureInformation* info)
|
||||
{
|
||||
for (const auto& member : info->m_ordered_members)
|
||||
{
|
||||
@@ -117,7 +108,7 @@ void OncePerAssetRenderingContext::AddMembersToContext(const IDataRepository* re
|
||||
}
|
||||
}
|
||||
|
||||
void OncePerAssetRenderingContext::ScanUsedTypeIfNeeded(const IDataRepository* repository, const MemberComputations* computations, RenderingUsedType* usedType)
|
||||
void PerAssetRenderingContext::ScanUsedTypeIfNeeded(const IDataRepository* repository, const MemberComputations* computations, RenderingUsedType* usedType)
|
||||
{
|
||||
if (usedType->m_info != nullptr && !StructureComputations(usedType->m_info).IsAsset() && !computations->IsInRuntimeBlock() && !usedType->m_members_loaded)
|
||||
{
|
||||
@@ -126,7 +117,7 @@ void OncePerAssetRenderingContext::ScanUsedTypeIfNeeded(const IDataRepository* r
|
||||
}
|
||||
}
|
||||
|
||||
void OncePerAssetRenderingContext::MakeAsset(const IDataRepository* repository, StructureInformation* asset)
|
||||
void PerAssetRenderingContext::MakeAsset(const IDataRepository* repository, StructureInformation* asset)
|
||||
{
|
||||
m_asset = asset;
|
||||
AddUsedType(std::make_unique<RenderingUsedType>(asset->m_definition, asset));
|
||||
@@ -134,7 +125,7 @@ void OncePerAssetRenderingContext::MakeAsset(const IDataRepository* repository,
|
||||
AddMembersToContext(repository, asset);
|
||||
}
|
||||
|
||||
void OncePerAssetRenderingContext::CreateUsedTypeCollections()
|
||||
void PerAssetRenderingContext::CreateUsedTypeCollections()
|
||||
{
|
||||
for (auto* usedType : m_used_types)
|
||||
{
|
||||
@@ -161,7 +152,7 @@ void OncePerAssetRenderingContext::CreateUsedTypeCollections()
|
||||
}
|
||||
}
|
||||
|
||||
bool OncePerAssetRenderingContext::UsedTypeHasActions(const RenderingUsedType* usedType)
|
||||
bool PerAssetRenderingContext::UsedTypeHasActions(const RenderingUsedType* usedType)
|
||||
{
|
||||
const StructureComputations computations(usedType->m_info);
|
||||
|
||||
@@ -185,15 +176,3 @@ bool OncePerAssetRenderingContext::UsedTypeHasActions(const RenderingUsedType* u
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
std::unique_ptr<OncePerAssetRenderingContext>
|
||||
OncePerAssetRenderingContext::BuildContext(const IDataRepository* repository, StructureInformation* asset, const GameVariant* variant)
|
||||
{
|
||||
auto context =
|
||||
std::make_unique<OncePerAssetRenderingContext>(OncePerAssetRenderingContext(repository->GetGameName(), variant, repository->GetAllFastFileBlocks()));
|
||||
|
||||
context->MakeAsset(repository, asset);
|
||||
context->CreateUsedTypeCollections();
|
||||
|
||||
return std::move(context);
|
||||
}
|
||||
+3
-7
@@ -1,11 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include "BaseRenderingContext.h"
|
||||
#include "Domain/Computations/MemberComputations.h"
|
||||
#include "Domain/Information/StructureInformation.h"
|
||||
#include "PerVariantRenderingContext.h"
|
||||
#include "Persistence/IDataRepository.h"
|
||||
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
class RenderingUsedType
|
||||
@@ -25,11 +24,10 @@ public:
|
||||
bool m_pointer_array_reference_is_reusable;
|
||||
};
|
||||
|
||||
class OncePerAssetRenderingContext : public BaseRenderingContext
|
||||
class PerAssetRenderingContext : public PerVariantRenderingContext
|
||||
{
|
||||
public:
|
||||
static std::unique_ptr<OncePerAssetRenderingContext>
|
||||
BuildContext(const IDataRepository* repository, StructureInformation* asset, const GameVariant* variant);
|
||||
PerAssetRenderingContext(const IDataRepository* repository, StructureInformation* asset, const GameVariant* variant);
|
||||
|
||||
StructureInformation* m_asset;
|
||||
|
||||
@@ -39,8 +37,6 @@ public:
|
||||
bool m_has_actions;
|
||||
|
||||
private:
|
||||
OncePerAssetRenderingContext(std::string game, const GameVariant* variant, std::vector<const FastFileBlock*> fastFileBlocks);
|
||||
|
||||
RenderingUsedType* AddUsedType(std::unique_ptr<RenderingUsedType> usedType);
|
||||
RenderingUsedType* GetBaseType(const IDataRepository* repository, const MemberComputations* computations, RenderingUsedType* usedType);
|
||||
void AddMembersToContext(const IDataRepository* repository, const StructureInformation* info);
|
||||
@@ -0,0 +1,34 @@
|
||||
#include "PerTemplateRenderingContext.h"
|
||||
|
||||
#include "Domain/Computations/StructureComputations.h"
|
||||
|
||||
PerTemplateRenderingContext::PerTemplateRenderingContext(const IDataRepository* repository)
|
||||
: m_game(repository->GetGameName()),
|
||||
m_blocks(repository->GetAllFastFileBlocks()),
|
||||
m_default_normal_block(nullptr),
|
||||
m_default_temp_block(nullptr)
|
||||
{
|
||||
for (const auto* block : m_blocks)
|
||||
{
|
||||
if (block->m_is_default)
|
||||
{
|
||||
if (block->m_type == FastFileBlockType::NORMAL && m_default_normal_block == nullptr)
|
||||
m_default_normal_block = block;
|
||||
else if (block->m_type == FastFileBlockType::TEMP && m_default_temp_block == nullptr)
|
||||
m_default_temp_block = block;
|
||||
}
|
||||
}
|
||||
|
||||
for (auto* info : repository->GetAllStructureInformation())
|
||||
{
|
||||
if (!StructureComputations(info).IsAsset())
|
||||
continue;
|
||||
|
||||
m_all_assets.emplace_back(info);
|
||||
}
|
||||
|
||||
for (auto* variant : repository->GetGameVariants())
|
||||
{
|
||||
m_all_variants.emplace_back(variant);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
#pragma once
|
||||
|
||||
#include "Persistence/IDataRepository.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class PerTemplateRenderingContext
|
||||
{
|
||||
public:
|
||||
explicit PerTemplateRenderingContext(const IDataRepository* repository);
|
||||
|
||||
std::string m_game;
|
||||
std::vector<const FastFileBlock*> m_blocks;
|
||||
|
||||
const FastFileBlock* m_default_normal_block;
|
||||
const FastFileBlock* m_default_temp_block;
|
||||
|
||||
std::vector<StructureInformation*> m_all_assets;
|
||||
std::vector<GameVariant*> m_all_variants;
|
||||
};
|
||||
@@ -0,0 +1,12 @@
|
||||
#include "PerVariantRenderingContext.h"
|
||||
|
||||
PerVariantRenderingContext::PerVariantRenderingContext(const IDataRepository* repository, const GameVariant* variant)
|
||||
: PerTemplateRenderingContext(repository),
|
||||
m_word_size_mismatch(variant->m_word_size != OWN_WORD_SIZE),
|
||||
m_word_size(variant->m_word_size),
|
||||
m_pointer_size(GetPointerSizeForWordSize(variant->m_word_size)),
|
||||
m_endianness_mismatch(std::endian::native != variant->m_endianness),
|
||||
m_endianness(variant->m_endianness),
|
||||
m_variant(variant)
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "PerTemplateRenderingContext.h"
|
||||
#include "Persistence/IDataRepository.h"
|
||||
|
||||
#include <bit>
|
||||
|
||||
class PerVariantRenderingContext : public PerTemplateRenderingContext
|
||||
{
|
||||
public:
|
||||
PerVariantRenderingContext(const IDataRepository* repository, const GameVariant* variant);
|
||||
|
||||
bool m_word_size_mismatch;
|
||||
WordSize m_word_size;
|
||||
unsigned m_pointer_size;
|
||||
bool m_endianness_mismatch;
|
||||
std::endian m_endianness;
|
||||
|
||||
const GameVariant* m_variant;
|
||||
};
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "AssetStructTestsTemplate.h"
|
||||
|
||||
#include "Domain/Computations/StructureComputations.h"
|
||||
#include "Internal/BasePerVariantTemplate.h"
|
||||
#include "Internal/BaseTemplate.h"
|
||||
#include "Utils/StringUtils.h"
|
||||
|
||||
@@ -11,11 +12,11 @@ namespace
|
||||
{
|
||||
constexpr int TAG_SOURCE = 1;
|
||||
|
||||
class PerAsset final : BaseTemplate
|
||||
class PerAsset final : BasePerVariantTemplate
|
||||
{
|
||||
public:
|
||||
PerAsset(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream, context),
|
||||
PerAsset(std::ostream& stream, const PerAssetRenderingContext& context)
|
||||
: BasePerVariantTemplate(stream, context),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
@@ -76,11 +77,11 @@ namespace
|
||||
LINE("}")
|
||||
}
|
||||
|
||||
const OncePerAssetRenderingContext& m_env;
|
||||
const PerAssetRenderingContext& m_env;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
|
||||
std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRenderOncePerAsset(const PerAssetRenderingContext& context)
|
||||
{
|
||||
std::vector<CodeTemplateFile> files;
|
||||
|
||||
@@ -98,7 +99,7 @@ std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRenderOncePerA
|
||||
return files;
|
||||
}
|
||||
|
||||
void AssetStructTestsTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
|
||||
void AssetStructTestsTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const PerAssetRenderingContext& context)
|
||||
{
|
||||
PerAsset t(stream, context);
|
||||
|
||||
|
||||
@@ -5,6 +5,6 @@
|
||||
class AssetStructTestsTemplate final : public ICodeTemplate
|
||||
{
|
||||
public:
|
||||
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
|
||||
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
|
||||
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const PerAssetRenderingContext& context) override;
|
||||
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerAssetRenderingContext& context) override;
|
||||
};
|
||||
@@ -0,0 +1,65 @@
|
||||
#include "BasePerVariantTemplate.h"
|
||||
|
||||
#include "Domain/Computations/StructureComputations.h"
|
||||
#include "Domain/Definition/ArrayDeclarationModifier.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
BasePerVariantTemplate::BasePerVariantTemplate(std::ostream& stream, const PerVariantRenderingContext& context)
|
||||
: BaseTemplate(stream, context),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
|
||||
std::string BasePerVariantTemplate::MakeAllocAlignment(const StructureInformation& info) const
|
||||
{
|
||||
if (info.m_alloc_alignment)
|
||||
return MakeEvaluation(info.m_alloc_alignment.get());
|
||||
|
||||
return std::to_string(info.m_definition->GetAlignment(m_env.m_word_size));
|
||||
}
|
||||
|
||||
size_t BasePerVariantTemplate::SizeForDeclModifierLevel(const MemberInformation& memberInfo, const size_t level) const
|
||||
{
|
||||
const auto& declModifiers = memberInfo.m_member->m_type_declaration->m_declaration_modifiers;
|
||||
if (declModifiers.empty())
|
||||
return memberInfo.m_member->m_type_declaration->GetSize(m_env.m_word_size);
|
||||
|
||||
if (level == 0)
|
||||
return memberInfo.m_member->m_type_declaration->GetSize(m_env.m_word_size);
|
||||
|
||||
size_t currentSize = memberInfo.m_member->m_type_declaration->m_type->GetSize(m_env.m_word_size);
|
||||
const auto end = declModifiers.rbegin() + (declModifiers.size() - level);
|
||||
for (auto i = declModifiers.rbegin(); i != end; ++i)
|
||||
{
|
||||
if ((*i)->GetType() == DeclarationModifierType::POINTER)
|
||||
currentSize = m_env.m_pointer_size;
|
||||
else
|
||||
currentSize *= dynamic_cast<ArrayDeclarationModifier*>(i->get())->m_size;
|
||||
}
|
||||
|
||||
return currentSize;
|
||||
}
|
||||
|
||||
size_t BasePerVariantTemplate::OffsetForMemberModifier(const MemberInformation& memberInfo,
|
||||
const DeclarationModifierComputations& modifier,
|
||||
const size_t nestedBaseOffset) const
|
||||
{
|
||||
size_t curOffset = memberInfo.m_member->m_offset;
|
||||
|
||||
auto curLevel = 0u;
|
||||
for (const auto index : modifier.GetArrayIndices())
|
||||
{
|
||||
if (index > 0)
|
||||
curOffset += index * SizeForDeclModifierLevel(memberInfo, curLevel + 1);
|
||||
|
||||
curLevel++;
|
||||
}
|
||||
|
||||
return curOffset + nestedBaseOffset;
|
||||
}
|
||||
|
||||
bool BasePerVariantTemplate::MemoryLayoutMatches(const StructureInformation& structureInfo) const
|
||||
{
|
||||
return !m_env.m_word_size_mismatch || structureInfo.m_has_matching_cross_platform_memory_layout;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#include "BaseTemplate.h"
|
||||
#include "Domain/Evaluation/OperandDynamic.h"
|
||||
#include "Domain/Evaluation/Operation.h"
|
||||
#include "Generating/PerAssetRenderingContext.h"
|
||||
|
||||
#include <format>
|
||||
|
||||
class BasePerVariantTemplate : public BaseTemplate
|
||||
{
|
||||
protected:
|
||||
BasePerVariantTemplate(std::ostream& stream, const PerVariantRenderingContext& context);
|
||||
|
||||
[[nodiscard]] std::string MakeAllocAlignment(const StructureInformation& info) const;
|
||||
|
||||
[[nodiscard]] size_t SizeForDeclModifierLevel(const MemberInformation& memberInfo, size_t level) const;
|
||||
[[nodiscard]] size_t
|
||||
OffsetForMemberModifier(const MemberInformation& memberInfo, const DeclarationModifierComputations& modifier, size_t nestedBaseOffset) const;
|
||||
|
||||
/**
|
||||
* Evaluates whether the struct/union has matching memory layouts between the generated code and game.
|
||||
*/
|
||||
[[nodiscard]] bool MemoryLayoutMatches(const StructureInformation& structureInfo) const;
|
||||
|
||||
const PerVariantRenderingContext& m_env;
|
||||
};
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <sstream>
|
||||
|
||||
BaseTemplate::BaseTemplate(std::ostream& stream, const BaseRenderingContext& context)
|
||||
BaseTemplate::BaseTemplate(std::ostream& stream, const PerTemplateRenderingContext& context)
|
||||
: m_out(stream),
|
||||
m_intendation(0u),
|
||||
m_env(context)
|
||||
@@ -256,14 +256,6 @@ void BaseTemplate::MakeEvaluationInternal(const IEvaluation* evaluation, std::os
|
||||
MakeOperandDynamic(dynamic_cast<const OperandDynamic*>(evaluation), str);
|
||||
}
|
||||
|
||||
std::string BaseTemplate::MakeAllocAlignment(const StructureInformation& info) const
|
||||
{
|
||||
if (info.m_alloc_alignment)
|
||||
return MakeEvaluation(info.m_alloc_alignment.get());
|
||||
|
||||
return std::to_string(info.m_definition->GetAlignment(m_env.m_word_size));
|
||||
}
|
||||
|
||||
std::string BaseTemplate::MakeEvaluation(const IEvaluation* evaluation)
|
||||
{
|
||||
std::ostringstream str;
|
||||
@@ -279,48 +271,3 @@ bool BaseTemplate::ShouldGenerateFillMethod(const RenderingUsedType& type)
|
||||
|
||||
return isNotForeignAsset && (hasMismatchingStructure || isEmbeddedDynamic);
|
||||
}
|
||||
|
||||
size_t BaseTemplate::SizeForDeclModifierLevel(const MemberInformation& memberInfo, const size_t level) const
|
||||
{
|
||||
const auto& declModifiers = memberInfo.m_member->m_type_declaration->m_declaration_modifiers;
|
||||
if (declModifiers.empty())
|
||||
return memberInfo.m_member->m_type_declaration->GetSize(m_env.m_word_size);
|
||||
|
||||
if (level == 0)
|
||||
return memberInfo.m_member->m_type_declaration->GetSize(m_env.m_word_size);
|
||||
|
||||
size_t currentSize = memberInfo.m_member->m_type_declaration->m_type->GetSize(m_env.m_word_size);
|
||||
const auto end = declModifiers.rbegin() + (declModifiers.size() - level);
|
||||
for (auto i = declModifiers.rbegin(); i != end; ++i)
|
||||
{
|
||||
if ((*i)->GetType() == DeclarationModifierType::POINTER)
|
||||
currentSize = m_env.m_pointer_size;
|
||||
else
|
||||
currentSize *= dynamic_cast<ArrayDeclarationModifier*>(i->get())->m_size;
|
||||
}
|
||||
|
||||
return currentSize;
|
||||
}
|
||||
|
||||
size_t BaseTemplate::OffsetForMemberModifier(const MemberInformation& memberInfo,
|
||||
const DeclarationModifierComputations& modifier,
|
||||
const size_t nestedBaseOffset) const
|
||||
{
|
||||
size_t curOffset = memberInfo.m_member->m_offset;
|
||||
|
||||
auto curLevel = 0u;
|
||||
for (const auto index : modifier.GetArrayIndices())
|
||||
{
|
||||
if (index > 0)
|
||||
curOffset += index * SizeForDeclModifierLevel(memberInfo, curLevel + 1);
|
||||
|
||||
curLevel++;
|
||||
}
|
||||
|
||||
return curOffset + nestedBaseOffset;
|
||||
}
|
||||
|
||||
bool BaseTemplate::MemoryLayoutMatches(const StructureInformation& structureInfo) const
|
||||
{
|
||||
return !m_env.m_word_size_mismatch || structureInfo.m_has_matching_cross_platform_memory_layout;
|
||||
}
|
||||
@@ -5,8 +5,8 @@
|
||||
#include "Domain/Evaluation/OperandDynamic.h"
|
||||
#include "Domain/Evaluation/OperandStatic.h"
|
||||
#include "Domain/Evaluation/Operation.h"
|
||||
#include "Generating/BaseRenderingContext.h"
|
||||
#include "Generating/OncePerAssetRenderingContext.h"
|
||||
#include "Generating/PerAssetRenderingContext.h"
|
||||
#include "Generating/PerTemplateRenderingContext.h"
|
||||
|
||||
#include <format>
|
||||
#include <ostream>
|
||||
@@ -16,7 +16,7 @@ class BaseTemplate
|
||||
protected:
|
||||
static constexpr auto INTENDATION = " ";
|
||||
|
||||
explicit BaseTemplate(std::ostream& stream, const BaseRenderingContext& context);
|
||||
explicit BaseTemplate(std::ostream& stream, const PerTemplateRenderingContext& context);
|
||||
|
||||
void DoIntendation() const;
|
||||
|
||||
@@ -33,7 +33,6 @@ protected:
|
||||
static std::string MakeArrayIndices(const DeclarationModifierComputations& modifierComputations);
|
||||
static std::string MakeCustomActionCall(const CustomAction* action);
|
||||
static std::string MakeArrayCount(const ArrayDeclarationModifier* arrayModifier);
|
||||
std::string MakeAllocAlignment(const StructureInformation& info) const;
|
||||
static std::string MakeEvaluation(const IEvaluation* evaluation);
|
||||
|
||||
static bool ShouldGenerateFillMethod(const RenderingUsedType& type);
|
||||
@@ -41,15 +40,6 @@ protected:
|
||||
static void MakeSafeTypeNameInternal(const DataDefinition* def, std::ostringstream& str);
|
||||
static void MakeArrayIndicesInternal(const DeclarationModifierComputations& modifierComputations, std::ostringstream& str);
|
||||
|
||||
[[nodiscard]] size_t SizeForDeclModifierLevel(const MemberInformation& memberInfo, size_t level) const;
|
||||
[[nodiscard]] size_t
|
||||
OffsetForMemberModifier(const MemberInformation& memberInfo, const DeclarationModifierComputations& modifier, size_t nestedBaseOffset) const;
|
||||
|
||||
/**
|
||||
* Evaluates whether the struct/union has matching memory layouts between the generated code and game.
|
||||
*/
|
||||
[[nodiscard]] bool MemoryLayoutMatches(const StructureInformation& structureInfo) const;
|
||||
|
||||
std::ostream& m_out;
|
||||
unsigned m_intendation;
|
||||
|
||||
@@ -61,7 +51,7 @@ private:
|
||||
static void MakeOperation(const Operation* operation, std::ostringstream& str);
|
||||
static void MakeEvaluationInternal(const IEvaluation* evaluation, std::ostringstream& str);
|
||||
|
||||
const BaseRenderingContext& m_env;
|
||||
const PerTemplateRenderingContext& m_env;
|
||||
};
|
||||
|
||||
#define LINE(x) \
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "Domain/Computations/MemberComputations.h"
|
||||
#include "Domain/Computations/StructureComputations.h"
|
||||
#include "Internal/BasePerVariantTemplate.h"
|
||||
#include "Internal/BaseTemplate.h"
|
||||
#include "Utils/StringUtils.h"
|
||||
|
||||
@@ -14,11 +15,11 @@ namespace
|
||||
constexpr int TAG_SOURCE = 2;
|
||||
constexpr int TAG_ALL_LOADERS = 3;
|
||||
|
||||
class PerTemplate final : BaseTemplate
|
||||
class PerVariant final : BasePerVariantTemplate
|
||||
{
|
||||
public:
|
||||
PerTemplate(std::ostream& stream, const OncePerTemplateRenderingContext& context)
|
||||
: BaseTemplate(stream, context),
|
||||
PerVariant(std::ostream& stream, const PerVariantRenderingContext& context)
|
||||
: BasePerVariantTemplate(stream, context),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
@@ -30,7 +31,7 @@ namespace
|
||||
LINE("#pragma once")
|
||||
LINE("")
|
||||
|
||||
for (const auto* asset : m_env.m_assets)
|
||||
for (const auto* asset : m_env.m_all_assets)
|
||||
{
|
||||
LINEF("#include \"Game/{0}/XAssets/{1}/{1}_{2}_{3}_load_db.h\"",
|
||||
m_env.m_game,
|
||||
@@ -41,14 +42,14 @@ namespace
|
||||
}
|
||||
|
||||
private:
|
||||
const OncePerTemplateRenderingContext& m_env;
|
||||
const PerVariantRenderingContext& m_env;
|
||||
};
|
||||
|
||||
class PerAsset final : BaseTemplate
|
||||
class PerAsset final : BasePerVariantTemplate
|
||||
{
|
||||
public:
|
||||
PerAsset(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream, context),
|
||||
PerAsset(std::ostream& stream, const PerAssetRenderingContext& context)
|
||||
: BasePerVariantTemplate(stream, context),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
@@ -168,7 +169,7 @@ namespace
|
||||
|
||||
LINEF("#include \"{0}_{1}_{2}_load_db.h\"", Lower(m_env.m_asset->m_definition->m_name), Lower(m_env.m_game), Lower(m_env.m_variant->m_name))
|
||||
LINE("")
|
||||
LINEF("#include \"Game/{0}/AssetMarker{0}.h\"", m_env.m_game)
|
||||
LINEF("#include \"Game/{0}/AssetMarker{0}_{1}.h\"", m_env.m_game, Lower(m_env.m_variant->m_name))
|
||||
LINE("")
|
||||
LINE("#include \"Loading/AssetInfoCollector.h\"")
|
||||
|
||||
@@ -2157,28 +2158,28 @@ namespace
|
||||
LINE("}")
|
||||
}
|
||||
|
||||
const OncePerAssetRenderingContext& m_env;
|
||||
const PerAssetRenderingContext& m_env;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerTemplate(const OncePerTemplateRenderingContext& context)
|
||||
std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerVariant(const PerVariantRenderingContext& context)
|
||||
{
|
||||
std::vector<CodeTemplateFile> files;
|
||||
|
||||
files.emplace_back(std::format("AssetLoader{0}.h", context.m_game), TAG_ALL_LOADERS);
|
||||
files.emplace_back(std::format("AssetLoader{0}_{1}.h", context.m_game, context.m_variant->m_name), TAG_ALL_LOADERS);
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneLoadTemplate::RenderOncePerTemplateFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerTemplateRenderingContext& context)
|
||||
void ZoneLoadTemplate::RenderOncePerVariantFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const PerVariantRenderingContext& context)
|
||||
{
|
||||
assert(fileTag == TAG_ALL_LOADERS);
|
||||
|
||||
const PerTemplate t(stream, context);
|
||||
const PerVariant t(stream, context);
|
||||
t.AllLoaders();
|
||||
}
|
||||
|
||||
std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
|
||||
std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerAsset(const PerAssetRenderingContext& context)
|
||||
{
|
||||
std::vector<CodeTemplateFile> files;
|
||||
|
||||
@@ -2197,7 +2198,7 @@ std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerAsset(con
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneLoadTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
|
||||
void ZoneLoadTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const PerAssetRenderingContext& context)
|
||||
{
|
||||
PerAsset t(stream, context);
|
||||
|
||||
|
||||
@@ -5,9 +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> GetFilesToRenderOncePerVariant(const PerVariantRenderingContext& context) override;
|
||||
void RenderOncePerVariantFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerVariantRenderingContext& context) override;
|
||||
|
||||
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
|
||||
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
|
||||
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const PerAssetRenderingContext& context) override;
|
||||
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerAssetRenderingContext& context) override;
|
||||
};
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "Domain/Computations/MemberComputations.h"
|
||||
#include "Domain/Computations/StructureComputations.h"
|
||||
#include "Internal/BasePerVariantTemplate.h"
|
||||
#include "Internal/BaseTemplate.h"
|
||||
#include "Utils/StringUtils.h"
|
||||
|
||||
@@ -14,11 +15,11 @@ namespace
|
||||
constexpr int TAG_SOURCE = 2;
|
||||
constexpr int TAG_ALL_MARKERS = 3;
|
||||
|
||||
class PerTemplate final : BaseTemplate
|
||||
class PerVariant final : BasePerVariantTemplate
|
||||
{
|
||||
public:
|
||||
PerTemplate(std::ostream& stream, const OncePerTemplateRenderingContext& context)
|
||||
: BaseTemplate(stream, context),
|
||||
PerVariant(std::ostream& stream, const PerVariantRenderingContext& context)
|
||||
: BasePerVariantTemplate(stream, context),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
@@ -30,7 +31,7 @@ namespace
|
||||
LINE("#pragma once")
|
||||
LINE("")
|
||||
|
||||
for (const auto* asset : m_env.m_assets)
|
||||
for (const auto* asset : m_env.m_all_assets)
|
||||
{
|
||||
LINEF("#include \"Game/{0}/XAssets/{1}/{1}_{2}_{3}_mark_db.h\"",
|
||||
m_env.m_game,
|
||||
@@ -41,14 +42,14 @@ namespace
|
||||
}
|
||||
|
||||
private:
|
||||
const OncePerTemplateRenderingContext& m_env;
|
||||
const PerVariantRenderingContext& m_env;
|
||||
};
|
||||
|
||||
class PerAsset final : BaseTemplate
|
||||
class PerAsset final : BasePerVariantTemplate
|
||||
{
|
||||
public:
|
||||
PerAsset(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream, context),
|
||||
PerAsset(std::ostream& stream, const PerAssetRenderingContext& context)
|
||||
: BasePerVariantTemplate(stream, context),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
@@ -786,28 +787,28 @@ namespace
|
||||
LINE("}")
|
||||
}
|
||||
|
||||
const OncePerAssetRenderingContext& m_env;
|
||||
const PerAssetRenderingContext& m_env;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerTemplate(const OncePerTemplateRenderingContext& context)
|
||||
std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerVariant(const PerVariantRenderingContext& context)
|
||||
{
|
||||
std::vector<CodeTemplateFile> files;
|
||||
|
||||
files.emplace_back(std::format("AssetMarker{0}.h", context.m_game), TAG_ALL_MARKERS);
|
||||
files.emplace_back(std::format("AssetMarker{0}_{1}.h", context.m_game, context.m_variant->m_name), TAG_ALL_MARKERS);
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneMarkTemplate::RenderOncePerTemplateFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerTemplateRenderingContext& context)
|
||||
void ZoneMarkTemplate::RenderOncePerVariantFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const PerVariantRenderingContext& context)
|
||||
{
|
||||
assert(fileTag == TAG_ALL_MARKERS);
|
||||
|
||||
const PerTemplate t(stream, context);
|
||||
const PerVariant t(stream, context);
|
||||
t.AllMarkers();
|
||||
}
|
||||
|
||||
std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
|
||||
std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerAsset(const PerAssetRenderingContext& context)
|
||||
{
|
||||
std::vector<CodeTemplateFile> files;
|
||||
|
||||
@@ -826,7 +827,7 @@ std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerAsset(con
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneMarkTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
|
||||
void ZoneMarkTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const PerAssetRenderingContext& context)
|
||||
{
|
||||
PerAsset t(stream, context);
|
||||
|
||||
|
||||
@@ -5,9 +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> GetFilesToRenderOncePerVariant(const PerVariantRenderingContext& context) override;
|
||||
void RenderOncePerVariantFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerVariantRenderingContext& context) override;
|
||||
|
||||
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
|
||||
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
|
||||
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const PerAssetRenderingContext& context) override;
|
||||
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerAssetRenderingContext& context) override;
|
||||
};
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "ZoneWriteTemplate.h"
|
||||
|
||||
#include "Domain/Computations/StructureComputations.h"
|
||||
#include "Internal/BasePerVariantTemplate.h"
|
||||
#include "Internal/BaseTemplate.h"
|
||||
#include "Utils/StringUtils.h"
|
||||
|
||||
@@ -14,11 +15,11 @@ namespace
|
||||
constexpr CodeTemplateFileTag TAG_SOURCE = 2;
|
||||
constexpr CodeTemplateFileTag TAG_ALL_WRITERS = 3;
|
||||
|
||||
class PerTemplate final : BaseTemplate
|
||||
class PerVariant final : BasePerVariantTemplate
|
||||
{
|
||||
public:
|
||||
PerTemplate(std::ostream& stream, const OncePerTemplateRenderingContext& context)
|
||||
: BaseTemplate(stream, context),
|
||||
PerVariant(std::ostream& stream, const PerVariantRenderingContext& context)
|
||||
: BasePerVariantTemplate(stream, context),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
@@ -30,7 +31,7 @@ namespace
|
||||
LINE("#pragma once")
|
||||
LINE("")
|
||||
|
||||
for (const auto* asset : m_env.m_assets)
|
||||
for (const auto* asset : m_env.m_all_assets)
|
||||
{
|
||||
LINEF("#include \"Game/{0}/XAssets/{1}/{1}_{2}_{3}_write_db.h\"",
|
||||
m_env.m_game,
|
||||
@@ -41,14 +42,14 @@ namespace
|
||||
}
|
||||
|
||||
private:
|
||||
const OncePerTemplateRenderingContext& m_env;
|
||||
const PerVariantRenderingContext& m_env;
|
||||
};
|
||||
|
||||
class PerAsset final : BaseTemplate
|
||||
class PerAsset final : BasePerVariantTemplate
|
||||
{
|
||||
public:
|
||||
PerAsset(std::ostream& stream, const OncePerAssetRenderingContext& context)
|
||||
: BaseTemplate(stream, context),
|
||||
PerAsset(std::ostream& stream, const PerAssetRenderingContext& context)
|
||||
: BasePerVariantTemplate(stream, context),
|
||||
m_env(context)
|
||||
{
|
||||
}
|
||||
@@ -1639,28 +1640,28 @@ namespace
|
||||
LINE("}")
|
||||
}
|
||||
|
||||
const OncePerAssetRenderingContext& m_env;
|
||||
const PerAssetRenderingContext& m_env;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRenderOncePerTemplate(const OncePerTemplateRenderingContext& context)
|
||||
std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRenderOncePerVariant(const PerVariantRenderingContext& context)
|
||||
{
|
||||
std::vector<CodeTemplateFile> files;
|
||||
|
||||
files.emplace_back(std::format("AssetWriter{0}.h", context.m_game), TAG_ALL_WRITERS);
|
||||
files.emplace_back(std::format("AssetWriter{0}_{1}.h", context.m_game, context.m_variant->m_name), TAG_ALL_WRITERS);
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneWriteTemplate::RenderOncePerTemplateFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerTemplateRenderingContext& context)
|
||||
void ZoneWriteTemplate::RenderOncePerVariantFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const PerVariantRenderingContext& context)
|
||||
{
|
||||
assert(fileTag == TAG_ALL_WRITERS);
|
||||
|
||||
const PerTemplate t(stream, context);
|
||||
const PerVariant t(stream, context);
|
||||
t.AllWriters();
|
||||
}
|
||||
|
||||
std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
|
||||
std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRenderOncePerAsset(const PerAssetRenderingContext& context)
|
||||
{
|
||||
std::vector<CodeTemplateFile> files;
|
||||
|
||||
@@ -1679,7 +1680,7 @@ std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRenderOncePerAsset(co
|
||||
return files;
|
||||
}
|
||||
|
||||
void ZoneWriteTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
|
||||
void ZoneWriteTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const PerAssetRenderingContext& context)
|
||||
{
|
||||
PerAsset t(stream, context);
|
||||
|
||||
|
||||
@@ -5,9 +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> GetFilesToRenderOncePerVariant(const PerVariantRenderingContext& context) override;
|
||||
void RenderOncePerVariantFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerVariantRenderingContext& context) override;
|
||||
|
||||
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
|
||||
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
|
||||
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const PerAssetRenderingContext& context) override;
|
||||
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const PerAssetRenderingContext& context) override;
|
||||
};
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ZoneDefWriterIW5.h"
|
||||
|
||||
#include "Game/IW5/AssetMarkerIW5.h"
|
||||
#include "Game/IW5/IW5.h"
|
||||
|
||||
using namespace IW5;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ZoneDefWriterT5.h"
|
||||
|
||||
#include "Game/T5/AssetMarkerT5.h"
|
||||
#include "Game/T5/T5.h"
|
||||
|
||||
using namespace T5;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentLoaderIW3.h"
|
||||
|
||||
#include "Game/IW3/AssetLoaderIW3.h"
|
||||
#include "Game/IW3/AssetLoaderIW3_pc.h"
|
||||
#include "Game/IW3/IW3.h"
|
||||
#include "Loading/Exception/UnsupportedAssetTypeException.h"
|
||||
|
||||
@@ -44,7 +44,7 @@ void ContentLoader::LoadXAsset(const bool atStreamStart) const
|
||||
#define LOAD_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Loader_##typeName loader(m_zone, m_stream); \
|
||||
Loader_##typeName##_pc loader(m_zone, m_stream); \
|
||||
loader.Load(&varXAsset->header.headerEntry); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentLoaderIW4.h"
|
||||
|
||||
#include "Game/IW4/AssetLoaderIW4.h"
|
||||
#include "Game/IW4/AssetLoaderIW4_pc32.h"
|
||||
#include "Game/IW4/IW4.h"
|
||||
#include "Loading/Exception/UnsupportedAssetTypeException.h"
|
||||
|
||||
@@ -44,7 +44,7 @@ void ContentLoader::LoadXAsset(const bool atStreamStart) const
|
||||
#define LOAD_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Loader_##typeName loader(m_zone, m_stream); \
|
||||
Loader_##typeName##_pc32 loader(m_zone, m_stream); \
|
||||
loader.Load(&varXAsset->header.headerEntry); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentLoaderIW5.h"
|
||||
|
||||
#include "Game/IW5/AssetLoaderIW5.h"
|
||||
#include "Game/IW5/AssetLoaderIW5_pc32.h"
|
||||
#include "Game/IW5/IW5.h"
|
||||
#include "Loading/Exception/UnsupportedAssetTypeException.h"
|
||||
|
||||
@@ -44,7 +44,7 @@ void ContentLoader::LoadXAsset(const bool atStreamStart) const
|
||||
#define LOAD_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Loader_##typeName loader(m_zone, m_stream); \
|
||||
Loader_##typeName##_pc32 loader(m_zone, m_stream); \
|
||||
loader.Load(&varXAsset->header.headerEntry); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentLoaderQOS.h"
|
||||
|
||||
#include "Game/QOS/AssetLoaderQOS.h"
|
||||
#include "Game/QOS/AssetLoaderQOS_pc.h"
|
||||
#include "Loading/Exception/UnsupportedAssetTypeException.h"
|
||||
|
||||
#include <cassert>
|
||||
@@ -43,7 +43,7 @@ void ContentLoader::LoadXAsset(const bool atStreamStart) const
|
||||
#define LOAD_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Loader_##typeName loader(m_zone, m_stream); \
|
||||
Loader_##typeName##_pc loader(m_zone, m_stream); \
|
||||
loader.Load(&varXAsset->header.headerEntry); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentLoaderT4.h"
|
||||
|
||||
#include "Game/T4/AssetLoaderT4.h"
|
||||
#include "Game/T4/AssetLoaderT4_pc.h"
|
||||
#include "Game/T4/T4.h"
|
||||
#include "Loading/Exception/UnsupportedAssetTypeException.h"
|
||||
|
||||
@@ -44,7 +44,7 @@ void ContentLoader::LoadXAsset(const bool atStreamStart) const
|
||||
#define LOAD_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Loader_##typeName loader(m_zone, m_stream); \
|
||||
Loader_##typeName##_pc loader(m_zone, m_stream); \
|
||||
loader.Load(&varXAsset->header.headerEntry); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentLoaderT5.h"
|
||||
|
||||
#include "Game/T5/AssetLoaderT5.h"
|
||||
#include "Game/T5/AssetLoaderT5_pc.h"
|
||||
#include "Game/T5/T5.h"
|
||||
#include "Loading/Exception/UnsupportedAssetTypeException.h"
|
||||
|
||||
@@ -44,7 +44,7 @@ void ContentLoader::LoadXAsset(const bool atStreamStart) const
|
||||
#define LOAD_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Loader_##typeName loader(m_zone, m_stream); \
|
||||
Loader_##typeName##_pc loader(m_zone, m_stream); \
|
||||
loader.Load(&varXAsset->header.headerEntry); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentLoaderT6.h"
|
||||
|
||||
#include "Game/T6/AssetLoaderT6.h"
|
||||
#include "Game/T6/AssetLoaderT6_pc.h"
|
||||
#include "Game/T6/T6.h"
|
||||
#include "Loading/Exception/UnsupportedAssetTypeException.h"
|
||||
|
||||
@@ -44,7 +44,7 @@ void ContentLoader::LoadXAsset(const bool atStreamStart) const
|
||||
#define LOAD_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Loader_##typeName loader(m_zone, m_stream); \
|
||||
Loader_##typeName##_pc loader(m_zone, m_stream); \
|
||||
loader.Load(&varXAsset->header.headerEntry); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentWriterIW3.h"
|
||||
|
||||
#include "Game/IW3/AssetWriterIW3.h"
|
||||
#include "Game/IW3/AssetWriterIW3_pc.h"
|
||||
#include "Writing/WritingException.h"
|
||||
|
||||
#include <cassert>
|
||||
@@ -80,7 +80,7 @@ void ContentWriter::WriteXAsset(const bool atStreamStart)
|
||||
#define WRITE_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Writer_##typeName writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
Writer_##typeName##_pc writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
writer.Write(varXAsset->header.headerEntry, varXAssetWritten.AtOffset(4)); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentWriterIW4.h"
|
||||
|
||||
#include "Game/IW4/AssetWriterIW4.h"
|
||||
#include "Game/IW4/AssetWriterIW4_pc32.h"
|
||||
#include "Writing/WritingException.h"
|
||||
|
||||
#include <cassert>
|
||||
@@ -80,7 +80,7 @@ void ContentWriter::WriteXAsset(const bool atStreamStart)
|
||||
#define WRITE_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Writer_##typeName writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
Writer_##typeName##_pc32 writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
writer.Write(varXAsset->header.headerEntry, varXAssetWritten.AtOffset(4)); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentWriterIW5.h"
|
||||
|
||||
#include "Game/IW5/AssetWriterIW5.h"
|
||||
#include "Game/IW5/AssetWriterIW5_pc32.h"
|
||||
#include "Writing/WritingException.h"
|
||||
|
||||
#include <cassert>
|
||||
@@ -80,7 +80,7 @@ void ContentWriter::WriteXAsset(const bool atStreamStart)
|
||||
#define WRITE_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Writer_##typeName writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
Writer_##typeName##_pc32 writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
writer.Write(varXAsset->header.headerEntry, varXAssetWritten.AtOffset(4)); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentWriterQOS.h"
|
||||
|
||||
#include "Game/QOS/AssetWriterQOS.h"
|
||||
#include "Game/QOS/AssetWriterQOS_pc.h"
|
||||
#include "Writing/WritingException.h"
|
||||
|
||||
#include <cassert>
|
||||
@@ -80,7 +80,7 @@ void ContentWriter::WriteXAsset(const bool atStreamStart)
|
||||
#define WRITE_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Writer_##typeName writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
Writer_##typeName##_pc writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
writer.Write(varXAsset->header.headerEntry, varXAssetWritten.AtOffset(4)); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentWriterT4.h"
|
||||
|
||||
#include "Game/T4/AssetWriterT4.h"
|
||||
#include "Game/T4/AssetWriterT4_pc.h"
|
||||
#include "Writing/WritingException.h"
|
||||
|
||||
#include <cassert>
|
||||
@@ -80,7 +80,7 @@ void ContentWriter::WriteXAsset(const bool atStreamStart)
|
||||
#define WRITE_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Writer_##typeName writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
Writer_##typeName##_pc writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
writer.Write(varXAsset->header.headerEntry, varXAssetWritten.AtOffset(4)); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentWriterT5.h"
|
||||
|
||||
#include "Game/T5/AssetWriterT5.h"
|
||||
#include "Game/T5/AssetWriterT5_pc.h"
|
||||
#include "Writing/WritingException.h"
|
||||
|
||||
#include <cassert>
|
||||
@@ -80,7 +80,7 @@ void ContentWriter::WriteXAsset(const bool atStreamStart)
|
||||
#define WRITE_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Writer_##typeName writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
Writer_##typeName##_pc writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
writer.Write(varXAsset->header.headerEntry, varXAssetWritten.AtOffset(4)); \
|
||||
break; \
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "ContentWriterT6.h"
|
||||
|
||||
#include "Game/T6/AssetWriterT6.h"
|
||||
#include "Game/T6/AssetWriterT6_pc.h"
|
||||
#include "Writing/WritingException.h"
|
||||
|
||||
#include <cassert>
|
||||
@@ -83,7 +83,7 @@ void ContentWriter::WriteXAsset(const bool atStreamStart)
|
||||
#define WRITE_ASSET(type_index, typeName, headerEntry) \
|
||||
case type_index: \
|
||||
{ \
|
||||
Writer_##typeName writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
Writer_##typeName##_pc writer(varXAsset->header.headerEntry, m_zone, *m_stream); \
|
||||
writer.Write(varXAsset->header.headerEntry, varXAssetWritten.AtOffset(4)); \
|
||||
break; \
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user