chore: initialize ipak and iwd post processors immediately in constructor

This commit is contained in:
Jan 2025-01-05 09:30:59 +00:00
parent 83833cb84e
commit 67fb11506c
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
4 changed files with 22 additions and 40 deletions

View File

@ -2,7 +2,8 @@
#include "IPak/IPakCreator.h" #include "IPak/IPakCreator.h"
#include <format> #include <algorithm>
#include <ranges>
AbstractImageIPakPostProcessor::AbstractImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition, AbstractImageIPakPostProcessor::AbstractImageIPakPostProcessor(const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
@ -12,26 +13,24 @@ AbstractImageIPakPostProcessor::AbstractImageIPakPostProcessor(const ZoneDefinit
m_search_path(searchPath), m_search_path(searchPath),
m_ipak_creator(zoneStates.GetZoneAssetCreationState<IPakCreator>()), m_ipak_creator(zoneStates.GetZoneAssetCreationState<IPakCreator>()),
m_out_dir(outDir), m_out_dir(outDir),
m_initialized(false),
m_obj_container_index(0u), m_obj_container_index(0u),
m_current_ipak(nullptr), m_current_ipak(nullptr),
m_current_ipak_start_index(0u), m_current_ipak_start_index(0u),
m_current_ipak_end_index(0u) m_current_ipak_end_index(0u)
{ {
FindNextObjContainer();
} }
bool AbstractImageIPakPostProcessor::AppliesToZoneDefinition(const ZoneDefinitionContext& zoneDefinition) bool AbstractImageIPakPostProcessor::AppliesToZoneDefinition(const ZoneDefinitionContext& zoneDefinition)
{ {
for (const auto& objContainer : zoneDefinition.m_zone_definition.m_obj_containers) return std::ranges::any_of(zoneDefinition.m_zone_definition.m_obj_containers,
{ [](const ZoneDefinitionObjContainer& objContainer)
if (objContainer.m_type == ZoneDefinitionObjContainerType::IPAK) {
return true; return objContainer.m_type == ZoneDefinitionObjContainerType::IPAK;
} });
return false;
} }
void AbstractImageIPakPostProcessor::FindNextObjContainer(AssetCreationContext& context) void AbstractImageIPakPostProcessor::FindNextObjContainer()
{ {
const auto objContainerCount = m_zone_definition.m_zone_definition.m_obj_containers.size(); const auto objContainerCount = m_zone_definition.m_zone_definition.m_obj_containers.size();
while (m_obj_container_index < objContainerCount) while (m_obj_container_index < objContainerCount)
@ -55,15 +54,8 @@ void AbstractImageIPakPostProcessor::PostProcessAsset(XAssetInfoGeneric& assetIn
if (assetInfo.m_name.empty() || assetInfo.m_name[0] == ',') if (assetInfo.m_name.empty() || assetInfo.m_name[0] == ',')
return; return;
// Initialize on first image occurance
if (!m_initialized)
{
FindNextObjContainer(context);
m_initialized = true;
}
while (m_current_ipak && m_zone_definition.m_asset_index_in_definition >= m_current_ipak_end_index) while (m_current_ipak && m_zone_definition.m_asset_index_in_definition >= m_current_ipak_end_index)
FindNextObjContainer(context); FindNextObjContainer();
if (m_current_ipak && m_zone_definition.m_asset_index_in_definition <= m_current_ipak_start_index) if (m_current_ipak && m_zone_definition.m_asset_index_in_definition <= m_current_ipak_start_index)
m_current_ipak->AddImage(assetInfo.m_name); m_current_ipak->AddImage(assetInfo.m_name);

View File

@ -20,14 +20,13 @@ public:
void FinalizeZone(AssetCreationContext& context) override; void FinalizeZone(AssetCreationContext& context) override;
private: private:
void FindNextObjContainer(AssetCreationContext& context); void FindNextObjContainer();
const ZoneDefinitionContext& m_zone_definition; const ZoneDefinitionContext& m_zone_definition;
ISearchPath& m_search_path; ISearchPath& m_search_path;
IPakCreator& m_ipak_creator; IPakCreator& m_ipak_creator;
const std::filesystem::path& m_out_dir; const std::filesystem::path& m_out_dir;
bool m_initialized;
unsigned m_obj_container_index; unsigned m_obj_container_index;
IPakToCreate* m_current_ipak; IPakToCreate* m_current_ipak;
unsigned m_current_ipak_start_index; unsigned m_current_ipak_start_index;

View File

@ -2,8 +2,9 @@
#include "Iwd/IwdCreator.h" #include "Iwd/IwdCreator.h"
#include <algorithm>
#include <format> #include <format>
#include <iostream> #include <ranges>
AbstractImageIwdPostProcessor::AbstractImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition, AbstractImageIwdPostProcessor::AbstractImageIwdPostProcessor(const ZoneDefinitionContext& zoneDefinition,
ISearchPath& searchPath, ISearchPath& searchPath,
@ -13,26 +14,24 @@ AbstractImageIwdPostProcessor::AbstractImageIwdPostProcessor(const ZoneDefinitio
m_search_path(searchPath), m_search_path(searchPath),
m_iwd_creator(zoneStates.GetZoneAssetCreationState<IwdCreator>()), m_iwd_creator(zoneStates.GetZoneAssetCreationState<IwdCreator>()),
m_out_dir(outDir), m_out_dir(outDir),
m_initialized(false),
m_obj_container_index(0u), m_obj_container_index(0u),
m_current_iwd(nullptr), m_current_iwd(nullptr),
m_current_iwd_start_index(0u), m_current_iwd_start_index(0u),
m_current_iwd_end_index(0u) m_current_iwd_end_index(0u)
{ {
FindNextObjContainer();
} }
bool AbstractImageIwdPostProcessor::AppliesToZoneDefinition(const ZoneDefinitionContext& zoneDefinition) bool AbstractImageIwdPostProcessor::AppliesToZoneDefinition(const ZoneDefinitionContext& zoneDefinition)
{ {
for (const auto& objContainer : zoneDefinition.m_zone_definition.m_obj_containers) return std::ranges::any_of(zoneDefinition.m_zone_definition.m_obj_containers,
{ [](const ZoneDefinitionObjContainer& objContainer)
if (objContainer.m_type == ZoneDefinitionObjContainerType::IWD) {
return true; return objContainer.m_type == ZoneDefinitionObjContainerType::IWD;
} });
return false;
} }
void AbstractImageIwdPostProcessor::FindNextObjContainer(AssetCreationContext& context) void AbstractImageIwdPostProcessor::FindNextObjContainer()
{ {
const auto objContainerCount = m_zone_definition.m_zone_definition.m_obj_containers.size(); const auto objContainerCount = m_zone_definition.m_zone_definition.m_obj_containers.size();
while (m_obj_container_index < objContainerCount) while (m_obj_container_index < objContainerCount)
@ -56,15 +55,8 @@ void AbstractImageIwdPostProcessor::PostProcessAsset(XAssetInfoGeneric& assetInf
if (assetInfo.m_name.empty() || assetInfo.m_name[0] == ',') if (assetInfo.m_name.empty() || assetInfo.m_name[0] == ',')
return; return;
// Initialize on first image occurance
if (!m_initialized)
{
FindNextObjContainer(context);
m_initialized = true;
}
while (m_current_iwd && m_zone_definition.m_asset_index_in_definition >= m_current_iwd_end_index) while (m_current_iwd && m_zone_definition.m_asset_index_in_definition >= m_current_iwd_end_index)
FindNextObjContainer(context); FindNextObjContainer();
if (m_current_iwd && m_zone_definition.m_asset_index_in_definition <= m_current_iwd_start_index) if (m_current_iwd && m_zone_definition.m_asset_index_in_definition <= m_current_iwd_start_index)
m_current_iwd->AddFile(std::format("images/{}.iwi", assetInfo.m_name)); m_current_iwd->AddFile(std::format("images/{}.iwi", assetInfo.m_name));

View File

@ -20,14 +20,13 @@ public:
void FinalizeZone(AssetCreationContext& context) override; void FinalizeZone(AssetCreationContext& context) override;
private: private:
void FindNextObjContainer(AssetCreationContext& context); void FindNextObjContainer();
const ZoneDefinitionContext& m_zone_definition; const ZoneDefinitionContext& m_zone_definition;
ISearchPath& m_search_path; ISearchPath& m_search_path;
IwdCreator& m_iwd_creator; IwdCreator& m_iwd_creator;
const std::filesystem::path& m_out_dir; const std::filesystem::path& m_out_dir;
bool m_initialized;
unsigned m_obj_container_index; unsigned m_obj_container_index;
IwdToCreate* m_current_iwd; IwdToCreate* m_current_iwd;
unsigned m_current_iwd_start_index; unsigned m_current_iwd_start_index;