diff --git a/src/Linker/ZoneCreation/ZoneCreator.cpp b/src/Linker/ZoneCreation/ZoneCreator.cpp index b2aab95a..21bc80f0 100644 --- a/src/Linker/ZoneCreation/ZoneCreator.cpp +++ b/src/Linker/ZoneCreation/ZoneCreator.cpp @@ -68,7 +68,7 @@ namespace zone_creator AssetCreationContext creationContext(*zone, &creatorCollection, &ignoredAssetLookup); 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); for (const auto& assetEntry : context.m_definition->m_assets) diff --git a/src/ObjCompiling/Game/IW3/ObjCompilerIW3.cpp b/src/ObjCompiling/Game/IW3/ObjCompilerIW3.cpp index 31350591..b3914ae8 100644 --- a/src/ObjCompiling/Game/IW3/ObjCompilerIW3.cpp +++ b/src/ObjCompiling/Game/IW3/ObjCompilerIW3.cpp @@ -17,13 +17,17 @@ namespace // No compilers yet } - void ConfigurePostProcessors( - AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) + void ConfigurePostProcessors(AssetCreatorCollection& collection, + Zone& zone, + const ZoneDefinitionContext& zoneDefinition, + ISearchPath& searchPath, + ZoneAssetCreationStateContainer& zoneStates, + const fs::path& outDir) { auto& memory = *zone.GetMemory(); if (ImageIwdPostProcessor::AppliesToZoneDefinition(zoneDefinition)) - collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, outDir)); + collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, zoneStates, outDir)); } } // namespace @@ -32,8 +36,9 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const fs::path& outDir, const fs::path& cacheDir) const { - ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); + ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir); } diff --git a/src/ObjCompiling/Game/IW3/ObjCompilerIW3.h b/src/ObjCompiling/Game/IW3/ObjCompilerIW3.h index 5b3644ac..771821a7 100644 --- a/src/ObjCompiling/Game/IW3/ObjCompilerIW3.h +++ b/src/ObjCompiling/Game/IW3/ObjCompilerIW3.h @@ -12,6 +12,7 @@ namespace IW3 const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const std::filesystem::path& outDir, const std::filesystem::path& cacheDir) const override; }; diff --git a/src/ObjCompiling/Game/IW4/ObjCompilerIW4.cpp b/src/ObjCompiling/Game/IW4/ObjCompilerIW4.cpp index 7d7f17f5..12f8e839 100644 --- a/src/ObjCompiling/Game/IW4/ObjCompilerIW4.cpp +++ b/src/ObjCompiling/Game/IW4/ObjCompilerIW4.cpp @@ -17,13 +17,17 @@ namespace // No compilers yet } - void ConfigurePostProcessors( - AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) + void ConfigurePostProcessors(AssetCreatorCollection& collection, + Zone& zone, + const ZoneDefinitionContext& zoneDefinition, + ISearchPath& searchPath, + ZoneAssetCreationStateContainer& zoneStates, + const fs::path& outDir) { auto& memory = *zone.GetMemory(); if (ImageIwdPostProcessor::AppliesToZoneDefinition(zoneDefinition)) - collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, outDir)); + collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, zoneStates, outDir)); } } // namespace @@ -32,8 +36,9 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const fs::path& outDir, const fs::path& cacheDir) const { - ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); + ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir); } diff --git a/src/ObjCompiling/Game/IW4/ObjCompilerIW4.h b/src/ObjCompiling/Game/IW4/ObjCompilerIW4.h index 07edb7b9..522b3c51 100644 --- a/src/ObjCompiling/Game/IW4/ObjCompilerIW4.h +++ b/src/ObjCompiling/Game/IW4/ObjCompilerIW4.h @@ -12,6 +12,7 @@ namespace IW4 const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const std::filesystem::path& outDir, const std::filesystem::path& cacheDir) const override; }; diff --git a/src/ObjCompiling/Game/IW5/ObjCompilerIW5.cpp b/src/ObjCompiling/Game/IW5/ObjCompilerIW5.cpp index 0f970267..dbfc20d0 100644 --- a/src/ObjCompiling/Game/IW5/ObjCompilerIW5.cpp +++ b/src/ObjCompiling/Game/IW5/ObjCompilerIW5.cpp @@ -17,13 +17,17 @@ namespace // No compilers yet } - void ConfigurePostProcessors( - AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) + void ConfigurePostProcessors(AssetCreatorCollection& collection, + Zone& zone, + const ZoneDefinitionContext& zoneDefinition, + ISearchPath& searchPath, + ZoneAssetCreationStateContainer& zoneStates, + const fs::path& outDir) { auto& memory = *zone.GetMemory(); if (ImageIwdPostProcessor::AppliesToZoneDefinition(zoneDefinition)) - collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, outDir)); + collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, zoneStates, outDir)); } } // namespace @@ -32,8 +36,9 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const fs::path& outDir, const fs::path& cacheDir) const { - ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); + ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir); } diff --git a/src/ObjCompiling/Game/IW5/ObjCompilerIW5.h b/src/ObjCompiling/Game/IW5/ObjCompilerIW5.h index 77b4be0c..80805f77 100644 --- a/src/ObjCompiling/Game/IW5/ObjCompilerIW5.h +++ b/src/ObjCompiling/Game/IW5/ObjCompilerIW5.h @@ -12,6 +12,7 @@ namespace IW5 const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const std::filesystem::path& outDir, const std::filesystem::path& cacheDir) const override; }; diff --git a/src/ObjCompiling/Game/T5/ObjCompilerT5.cpp b/src/ObjCompiling/Game/T5/ObjCompilerT5.cpp index 642cb9f0..5fb02146 100644 --- a/src/ObjCompiling/Game/T5/ObjCompilerT5.cpp +++ b/src/ObjCompiling/Game/T5/ObjCompilerT5.cpp @@ -17,13 +17,17 @@ namespace // No compilers yet } - void ConfigurePostProcessors( - AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) + void ConfigurePostProcessors(AssetCreatorCollection& collection, + Zone& zone, + const ZoneDefinitionContext& zoneDefinition, + ISearchPath& searchPath, + ZoneAssetCreationStateContainer& zoneStates, + const fs::path& outDir) { auto& memory = *zone.GetMemory(); if (ImageIwdPostProcessor::AppliesToZoneDefinition(zoneDefinition)) - collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, outDir)); + collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, zoneStates, outDir)); } } // namespace @@ -32,8 +36,9 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const fs::path& outDir, const fs::path& cacheDir) const { - ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); + ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir); } diff --git a/src/ObjCompiling/Game/T5/ObjCompilerT5.h b/src/ObjCompiling/Game/T5/ObjCompilerT5.h index 9a1d6d21..bd216b7c 100644 --- a/src/ObjCompiling/Game/T5/ObjCompilerT5.h +++ b/src/ObjCompiling/Game/T5/ObjCompilerT5.h @@ -12,6 +12,7 @@ namespace T5 const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const std::filesystem::path& outDir, const std::filesystem::path& cacheDir) const override; }; diff --git a/src/ObjCompiling/Game/T6/ObjCompilerT6.cpp b/src/ObjCompiling/Game/T6/ObjCompilerT6.cpp index f8dadf6a..6b5f1dfe 100644 --- a/src/ObjCompiling/Game/T6/ObjCompilerT6.cpp +++ b/src/ObjCompiling/Game/T6/ObjCompilerT6.cpp @@ -19,16 +19,20 @@ namespace collection.AddAssetCreator(std::make_unique(zone, zoneDefinition.m_zone_definition)); } - void ConfigurePostProcessors( - AssetCreatorCollection& collection, Zone& zone, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const fs::path& outDir) + void ConfigurePostProcessors(AssetCreatorCollection& collection, + Zone& zone, + const ZoneDefinitionContext& zoneDefinition, + ISearchPath& searchPath, + ZoneAssetCreationStateContainer& zoneStates, + const fs::path& outDir) { auto& memory = *zone.GetMemory(); if (ImageIPakPostProcessor::AppliesToZoneDefinition(zoneDefinition)) - collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, outDir)); + collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, zoneStates, outDir)); if (ImageIwdPostProcessor::AppliesToZoneDefinition(zoneDefinition)) - collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, outDir)); + collection.AddAssetPostProcessor(std::make_unique>(zoneDefinition, searchPath, zoneStates, outDir)); } } // namespace @@ -37,9 +41,10 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection, const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const fs::path& outDir, const fs::path& cacheDir) const { ConfigureCompilers(collection, zone, zoneDefinition, searchPath); - ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, outDir); + ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir); } diff --git a/src/ObjCompiling/Game/T6/ObjCompilerT6.h b/src/ObjCompiling/Game/T6/ObjCompilerT6.h index 9080a8bd..73d30655 100644 --- a/src/ObjCompiling/Game/T6/ObjCompilerT6.h +++ b/src/ObjCompiling/Game/T6/ObjCompilerT6.h @@ -12,6 +12,7 @@ namespace T6 const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const std::filesystem::path& outDir, const std::filesystem::path& cacheDir) const override; }; diff --git a/src/ObjCompiling/IObjCompiler.h b/src/ObjCompiling/IObjCompiler.h index 5bcf28a1..26bac9ba 100644 --- a/src/ObjCompiling/IObjCompiler.h +++ b/src/ObjCompiling/IObjCompiler.h @@ -27,6 +27,7 @@ public: const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, IGdtQueryable& gdt, + ZoneAssetCreationStateContainer& zoneStates, const std::filesystem::path& outDir, const std::filesystem::path& cacheDir) const = 0; diff --git a/src/ObjCompiling/Image/ImageIPakPostProcessor.cpp b/src/ObjCompiling/Image/ImageIPakPostProcessor.cpp index c1af9df9..6c712d70 100644 --- a/src/ObjCompiling/Image/ImageIPakPostProcessor.cpp +++ b/src/ObjCompiling/Image/ImageIPakPostProcessor.cpp @@ -6,9 +6,11 @@ AbstractImageIPakPostProcessor::AbstractImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, + ZoneAssetCreationStateContainer& zoneStates, const std::filesystem::path& outDir) : m_zone_definition(zoneDefinition), m_search_path(searchPath), + m_ipak_creator(zoneStates.GetZoneAssetCreationState()), m_out_dir(outDir), m_initialized(false), m_obj_container_index(0u), @@ -39,8 +41,7 @@ void AbstractImageIPakPostProcessor::FindNextObjContainer(AssetCreationContext& if (objContainer.m_type != ZoneDefinitionObjContainerType::IPAK) continue; - auto& ipakCreator = context.GetZoneAssetCreationState(); - m_current_ipak = ipakCreator.GetOrAddIPak(objContainer.m_name); + m_current_ipak = m_ipak_creator.GetOrAddIPak(objContainer.m_name); m_current_ipak_start_index = objContainer.m_asset_start; m_current_ipak_end_index = objContainer.m_asset_end; return; @@ -70,5 +71,5 @@ void AbstractImageIPakPostProcessor::PostProcessAsset(XAssetInfoGeneric& assetIn void AbstractImageIPakPostProcessor::FinalizeZone(AssetCreationContext& context) { - context.GetZoneAssetCreationState().Finalize(m_search_path, m_out_dir); + m_ipak_creator.Finalize(m_search_path, m_out_dir); } diff --git a/src/ObjCompiling/Image/ImageIPakPostProcessor.h b/src/ObjCompiling/Image/ImageIPakPostProcessor.h index 95f92436..36638f34 100644 --- a/src/ObjCompiling/Image/ImageIPakPostProcessor.h +++ b/src/ObjCompiling/Image/ImageIPakPostProcessor.h @@ -9,7 +9,10 @@ class AbstractImageIPakPostProcessor : public IAssetPostProcessor { 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); @@ -21,6 +24,7 @@ private: const ZoneDefinitionContext& m_zone_definition; ISearchPath& m_search_path; + IPakCreator& m_ipak_creator; const std::filesystem::path& m_out_dir; bool m_initialized; @@ -35,8 +39,11 @@ template class ImageIPakPostProcessor final : public Abstrac public: static_assert(std::is_base_of_v); - ImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const std::filesystem::path& outDir) - : AbstractImageIPakPostProcessor(zoneDefinition, searchPath, outDir) + ImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition, + ISearchPath& searchPath, + ZoneAssetCreationStateContainer& zoneStates, + const std::filesystem::path& outDir) + : AbstractImageIPakPostProcessor(zoneDefinition, searchPath, zoneStates, outDir) { } diff --git a/src/ObjCompiling/Image/ImageIwdPostProcessor.cpp b/src/ObjCompiling/Image/ImageIwdPostProcessor.cpp index 45771ae7..c9b05254 100644 --- a/src/ObjCompiling/Image/ImageIwdPostProcessor.cpp +++ b/src/ObjCompiling/Image/ImageIwdPostProcessor.cpp @@ -7,9 +7,11 @@ AbstractImageIwdPostProcessor::AbstractImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, + ZoneAssetCreationStateContainer& zoneStates, const std::filesystem::path& outDir) : m_zone_definition(zoneDefinition), m_search_path(searchPath), + m_iwd_creator(zoneStates.GetZoneAssetCreationState()), m_out_dir(outDir), m_initialized(false), m_obj_container_index(0u), @@ -40,8 +42,7 @@ void AbstractImageIwdPostProcessor::FindNextObjContainer(AssetCreationContext& c if (objContainer.m_type != ZoneDefinitionObjContainerType::IWD) continue; - auto& iwdCreator = context.GetZoneAssetCreationState(); - m_current_iwd = iwdCreator.GetOrAddIwd(objContainer.m_name); + m_current_iwd = m_iwd_creator.GetOrAddIwd(objContainer.m_name); m_current_iwd_start_index = objContainer.m_asset_start; m_current_iwd_end_index = objContainer.m_asset_end; return; @@ -71,5 +72,5 @@ void AbstractImageIwdPostProcessor::PostProcessAsset(XAssetInfoGeneric& assetInf void AbstractImageIwdPostProcessor::FinalizeZone(AssetCreationContext& context) { - context.GetZoneAssetCreationState().Finalize(m_search_path, m_out_dir); + m_iwd_creator.Finalize(m_search_path, m_out_dir); } diff --git a/src/ObjCompiling/Image/ImageIwdPostProcessor.h b/src/ObjCompiling/Image/ImageIwdPostProcessor.h index 3b35cd8d..62cfe50a 100644 --- a/src/ObjCompiling/Image/ImageIwdPostProcessor.h +++ b/src/ObjCompiling/Image/ImageIwdPostProcessor.h @@ -9,7 +9,10 @@ class AbstractImageIwdPostProcessor : public IAssetPostProcessor { 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); @@ -21,6 +24,7 @@ private: const ZoneDefinitionContext& m_zone_definition; ISearchPath& m_search_path; + IwdCreator& m_iwd_creator; const std::filesystem::path& m_out_dir; bool m_initialized; @@ -35,8 +39,11 @@ template class ImageIwdPostProcessor final : public Abstract public: static_assert(std::is_base_of_v); - ImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition, ISearchPath& searchPath, const std::filesystem::path& outDir) - : AbstractImageIwdPostProcessor(zoneDefinition, searchPath, outDir) + ImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition, + ISearchPath& searchPath, + ZoneAssetCreationStateContainer& zoneStates, + const std::filesystem::path& outDir) + : AbstractImageIwdPostProcessor(zoneDefinition, searchPath, zoneStates, outDir) { }