chore: get Iwd and Ipak creators in constructor for post processors

This commit is contained in:
Jan 2025-01-03 11:18:33 +01:00
parent 416823c6cd
commit 3c3161448f
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
16 changed files with 81 additions and 34 deletions

View File

@ -68,7 +68,7 @@ namespace zone_creator
AssetCreationContext creationContext(*zone, &creatorCollection, &ignoredAssetLookup); AssetCreationContext creationContext(*zone, &creatorCollection, &ignoredAssetLookup);
objCompiler->ConfigureCreatorCollection( objCompiler->ConfigureCreatorCollection(
creatorCollection, *zone, zoneDefinitionContext, *context.m_asset_search_path, lookup, context.m_out_dir, context.m_cache_dir); creatorCollection, *zone, zoneDefinitionContext, *context.m_asset_search_path, lookup, creationContext, context.m_out_dir, context.m_cache_dir);
objLoader->ConfigureCreatorCollection(creatorCollection, *zone, *context.m_asset_search_path, lookup); objLoader->ConfigureCreatorCollection(creatorCollection, *zone, *context.m_asset_search_path, lookup);
for (const auto& assetEntry : context.m_definition->m_assets) for (const auto& assetEntry : context.m_definition->m_assets)

View File

@ -17,13 +17,17 @@ namespace
// No compilers yet // No compilers yet
} }
void ConfigurePostProcessors( void ConfigurePostProcessors(AssetCreatorCollection& collection,
AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) Zone& zone,
const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir)
{ {
auto& memory = *zone.GetMemory(); auto& memory = *zone.GetMemory();
if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition)) if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, outDir)); collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));
} }
} // namespace } // namespace
@ -32,8 +36,9 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection,
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir, const fs::path& outDir,
const fs::path& cacheDir) const const fs::path& cacheDir) const
{ {
ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir);
} }

View File

@ -12,6 +12,7 @@ namespace IW3
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir, const std::filesystem::path& outDir,
const std::filesystem::path& cacheDir) const override; const std::filesystem::path& cacheDir) const override;
}; };

View File

@ -17,13 +17,17 @@ namespace
// No compilers yet // No compilers yet
} }
void ConfigurePostProcessors( void ConfigurePostProcessors(AssetCreatorCollection& collection,
AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) Zone& zone,
const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir)
{ {
auto& memory = *zone.GetMemory(); auto& memory = *zone.GetMemory();
if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition)) if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, outDir)); collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));
} }
} // namespace } // namespace
@ -32,8 +36,9 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection,
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir, const fs::path& outDir,
const fs::path& cacheDir) const const fs::path& cacheDir) const
{ {
ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir);
} }

View File

@ -12,6 +12,7 @@ namespace IW4
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir, const std::filesystem::path& outDir,
const std::filesystem::path& cacheDir) const override; const std::filesystem::path& cacheDir) const override;
}; };

View File

@ -17,13 +17,17 @@ namespace
// No compilers yet // No compilers yet
} }
void ConfigurePostProcessors( void ConfigurePostProcessors(AssetCreatorCollection& collection,
AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) Zone& zone,
const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir)
{ {
auto& memory = *zone.GetMemory(); auto& memory = *zone.GetMemory();
if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition)) if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, outDir)); collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));
} }
} // namespace } // namespace
@ -32,8 +36,9 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection,
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir, const fs::path& outDir,
const fs::path& cacheDir) const const fs::path& cacheDir) const
{ {
ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir);
} }

View File

@ -12,6 +12,7 @@ namespace IW5
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir, const std::filesystem::path& outDir,
const std::filesystem::path& cacheDir) const override; const std::filesystem::path& cacheDir) const override;
}; };

View File

@ -17,13 +17,17 @@ namespace
// No compilers yet // No compilers yet
} }
void ConfigurePostProcessors( void ConfigurePostProcessors(AssetCreatorCollection& collection,
AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) Zone& zone,
const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir)
{ {
auto& memory = *zone.GetMemory(); auto& memory = *zone.GetMemory();
if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition)) if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, outDir)); collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));
} }
} // namespace } // namespace
@ -32,8 +36,9 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection,
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir, const fs::path& outDir,
const fs::path& cacheDir) const const fs::path& cacheDir) const
{ {
ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir);
} }

View File

@ -12,6 +12,7 @@ namespace T5
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir, const std::filesystem::path& outDir,
const std::filesystem::path& cacheDir) const override; const std::filesystem::path& cacheDir) const override;
}; };

View File

@ -19,16 +19,20 @@ namespace
collection.AddAssetCreator(std::make_unique<KeyValuePairsCompiler>(zone, zoneDefinition.m_zone_definition)); collection.AddAssetCreator(std::make_unique<KeyValuePairsCompiler>(zone, zoneDefinition.m_zone_definition));
} }
void ConfigurePostProcessors( void ConfigurePostProcessors(AssetCreatorCollection& collection,
AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) Zone& zone,
const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir)
{ {
auto& memory = *zone.GetMemory(); auto& memory = *zone.GetMemory();
if (ImageIPakPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition)) if (ImageIPakPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIPakPostProcessor<AssetImage>>(zoneDefinition, searchPath, outDir)); collection.AddAssetPostProcessor(std::make_unique<ImageIPakPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));
if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition)) if (ImageIwdPostProcessor<AssetImage>::AppliesToZoneDefinition(zoneDefinition))
collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, outDir)); collection.AddAssetPostProcessor(std::make_unique<ImageIwdPostProcessor<AssetImage>>(zoneDefinition, searchPath, zoneStates, outDir));
} }
} // namespace } // namespace
@ -37,9 +41,10 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection,
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const fs::path& outDir, const fs::path& outDir,
const fs::path& cacheDir) const const fs::path& cacheDir) const
{ {
ConfigureCompilers(collection, zone, zoneDefinition, searchPath); ConfigureCompilers(collection, zone, zoneDefinition, searchPath);
ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir);
} }

View File

@ -12,6 +12,7 @@ namespace T6
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir, const std::filesystem::path& outDir,
const std::filesystem::path& cacheDir) const override; const std::filesystem::path& cacheDir) const override;
}; };

View File

@ -27,6 +27,7 @@ public:
const ZoneDefinitionContext& zoneDefinition, const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
IGdtQueryable& gdt, IGdtQueryable& gdt,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir, const std::filesystem::path& outDir,
const std::filesystem::path& cacheDir) const = 0; const std::filesystem::path& cacheDir) const = 0;

View File

@ -6,9 +6,11 @@
AbstractImageIPakPostProcessor::AbstractImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition, AbstractImageIPakPostProcessor::AbstractImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir) const std::filesystem::path& outDir)
: m_zone_definition(zoneDefinition), : m_zone_definition(zoneDefinition),
m_search_path(searchPath), m_search_path(searchPath),
m_ipak_creator(zoneStates.GetZoneAssetCreationState<IPakCreator>()),
m_out_dir(outDir), m_out_dir(outDir),
m_initialized(false), m_initialized(false),
m_obj_container_index(0u), m_obj_container_index(0u),
@ -39,8 +41,7 @@ void AbstractImageIPakPostProcessor::FindNextObjContainer(AssetCreationContext&
if (objContainer.m_type != ZoneDefinitionObjContainerType::IPAK) if (objContainer.m_type != ZoneDefinitionObjContainerType::IPAK)
continue; continue;
auto& ipakCreator = context.GetZoneAssetCreationState<IPakCreator>(); m_current_ipak = m_ipak_creator.GetOrAddIPak(objContainer.m_name);
m_current_ipak = ipakCreator.GetOrAddIPak(objContainer.m_name);
m_current_ipak_start_index = objContainer.m_asset_start; m_current_ipak_start_index = objContainer.m_asset_start;
m_current_ipak_end_index = objContainer.m_asset_end; m_current_ipak_end_index = objContainer.m_asset_end;
return; return;
@ -70,5 +71,5 @@ void AbstractImageIPakPostProcessor::PostProcessAsset(XAssetInfoGeneric& assetIn
void AbstractImageIPakPostProcessor::FinalizeZone(AssetCreationContext& context) void AbstractImageIPakPostProcessor::FinalizeZone(AssetCreationContext& context)
{ {
context.GetZoneAssetCreationState<IPakCreator>().Finalize(m_search_path, m_out_dir); m_ipak_creator.Finalize(m_search_path, m_out_dir);
} }

View File

@ -9,7 +9,10 @@
class AbstractImageIPakPostProcessor : public IAssetPostProcessor class AbstractImageIPakPostProcessor : public IAssetPostProcessor
{ {
public: public:
AbstractImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const std::filesystem::path& outDir); AbstractImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir);
static bool AppliesToZoneDefinition(const ZoneDefinitionContext& zoneDefinition); static bool AppliesToZoneDefinition(const ZoneDefinitionContext& zoneDefinition);
@ -21,6 +24,7 @@ private:
const ZoneDefinitionContext& m_zone_definition; const ZoneDefinitionContext& m_zone_definition;
ISearchPath& m_search_path; ISearchPath& m_search_path;
IPakCreator& m_ipak_creator;
const std::filesystem::path& m_out_dir; const std::filesystem::path& m_out_dir;
bool m_initialized; bool m_initialized;
@ -35,8 +39,11 @@ template<typename AssetType> class ImageIPakPostProcessor final : public Abstrac
public: public:
static_assert(std::is_base_of_v<IAssetBase, AssetType>); static_assert(std::is_base_of_v<IAssetBase, AssetType>);
ImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const std::filesystem::path& outDir) ImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition,
: AbstractImageIPakPostProcessor(zoneDefinition, searchPath, outDir) ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir)
: AbstractImageIPakPostProcessor(zoneDefinition, searchPath, zoneStates, outDir)
{ {
} }

View File

@ -7,9 +7,11 @@
AbstractImageIwdPostProcessor::AbstractImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition, AbstractImageIwdPostProcessor::AbstractImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir) const std::filesystem::path& outDir)
: m_zone_definition(zoneDefinition), : m_zone_definition(zoneDefinition),
m_search_path(searchPath), m_search_path(searchPath),
m_iwd_creator(zoneStates.GetZoneAssetCreationState<IwdCreator>()),
m_out_dir(outDir), m_out_dir(outDir),
m_initialized(false), m_initialized(false),
m_obj_container_index(0u), m_obj_container_index(0u),
@ -40,8 +42,7 @@ void AbstractImageIwdPostProcessor::FindNextObjContainer(AssetCreationContext& c
if (objContainer.m_type != ZoneDefinitionObjContainerType::IWD) if (objContainer.m_type != ZoneDefinitionObjContainerType::IWD)
continue; continue;
auto& iwdCreator = context.GetZoneAssetCreationState<IwdCreator>(); m_current_iwd = m_iwd_creator.GetOrAddIwd(objContainer.m_name);
m_current_iwd = iwdCreator.GetOrAddIwd(objContainer.m_name);
m_current_iwd_start_index = objContainer.m_asset_start; m_current_iwd_start_index = objContainer.m_asset_start;
m_current_iwd_end_index = objContainer.m_asset_end; m_current_iwd_end_index = objContainer.m_asset_end;
return; return;
@ -71,5 +72,5 @@ void AbstractImageIwdPostProcessor::PostProcessAsset(XAssetInfoGeneric& assetInf
void AbstractImageIwdPostProcessor::FinalizeZone(AssetCreationContext& context) void AbstractImageIwdPostProcessor::FinalizeZone(AssetCreationContext& context)
{ {
context.GetZoneAssetCreationState<IwdCreator>().Finalize(m_search_path, m_out_dir); m_iwd_creator.Finalize(m_search_path, m_out_dir);
} }

View File

@ -9,7 +9,10 @@
class AbstractImageIwdPostProcessor : public IAssetPostProcessor class AbstractImageIwdPostProcessor : public IAssetPostProcessor
{ {
public: public:
AbstractImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const std::filesystem::path& outDir); AbstractImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir);
static bool AppliesToZoneDefinition(const ZoneDefinitionContext& zoneDefinition); static bool AppliesToZoneDefinition(const ZoneDefinitionContext& zoneDefinition);
@ -21,6 +24,7 @@ private:
const ZoneDefinitionContext& m_zone_definition; const ZoneDefinitionContext& m_zone_definition;
ISearchPath& m_search_path; ISearchPath& m_search_path;
IwdCreator& m_iwd_creator;
const std::filesystem::path& m_out_dir; const std::filesystem::path& m_out_dir;
bool m_initialized; bool m_initialized;
@ -35,8 +39,11 @@ template<typename AssetType> class ImageIwdPostProcessor final : public Abstract
public: public:
static_assert(std::is_base_of_v<IAssetBase, AssetType>); static_assert(std::is_base_of_v<IAssetBase, AssetType>);
ImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const std::filesystem::path& outDir) ImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition,
: AbstractImageIwdPostProcessor(zoneDefinition, searchPath, outDir) ISearchPath& searchPath,
ZoneAssetCreationStateContainer& zoneStates,
const std::filesystem::path& outDir)
: AbstractImageIwdPostProcessor(zoneDefinition, searchPath, zoneStates, outDir)
{ {
} }