feat: automatically add ipak_read kvp when creating ipak

This commit is contained in:
Jan 2025-01-03 12:52:41 +01:00
parent 2313da1c12
commit ac43b646cc
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
2 changed files with 20 additions and 0 deletions

View File

@ -7,6 +7,7 @@
#include "Utils/Alignment.h" #include "Utils/Alignment.h"
#include <algorithm> #include <algorithm>
#include <cassert>
#include <format> #include <format>
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
@ -394,6 +395,16 @@ void IPakToCreate::Build(ISearchPath& searchPath, const std::filesystem::path& o
std::cout << std::format("Created ipak {} with {} entries\n", m_name, m_image_names.size()); std::cout << std::format("Created ipak {} with {} entries\n", m_name, m_image_names.size());
} }
IPakCreator::IPakCreator()
: m_kvp_creator(nullptr)
{
}
void IPakCreator::Inject(ZoneAssetCreationInjection& inject)
{
m_kvp_creator = &inject.m_zone_states.GetZoneAssetCreationState<KeyValuePairsCreator>();
}
IPakToCreate* IPakCreator::GetOrAddIPak(const std::string& ipakName) IPakToCreate* IPakCreator::GetOrAddIPak(const std::string& ipakName)
{ {
const auto existingIPak = m_ipak_lookup.find(ipakName); const auto existingIPak = m_ipak_lookup.find(ipakName);
@ -404,6 +415,9 @@ IPakToCreate* IPakCreator::GetOrAddIPak(const std::string& ipakName)
auto* result = newIPak.get(); auto* result = newIPak.get();
m_ipaks.emplace_back(std::move(newIPak)); m_ipaks.emplace_back(std::move(newIPak));
assert(m_kvp_creator);
m_kvp_creator->AddKeyValuePair(CommonKeyValuePair("ipak_read", ipakName));
return result; return result;
} }

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "Asset/IZoneAssetCreationState.h" #include "Asset/IZoneAssetCreationState.h"
#include "KeyValuePairs/KeyValuePairsCreator.h"
#include "SearchPath/ISearchPath.h" #include "SearchPath/ISearchPath.h"
#include <filesystem> #include <filesystem>
@ -24,10 +25,15 @@ private:
class IPakCreator : public IZoneAssetCreationState class IPakCreator : public IZoneAssetCreationState
{ {
public: public:
IPakCreator();
void Inject(ZoneAssetCreationInjection& inject) override;
IPakToCreate* GetOrAddIPak(const std::string& ipakName); IPakToCreate* GetOrAddIPak(const std::string& ipakName);
void Finalize(ISearchPath& searchPath, const std::filesystem::path& outPath); void Finalize(ISearchPath& searchPath, const std::filesystem::path& outPath);
private: private:
KeyValuePairsCreator* m_kvp_creator;
std::unordered_map<std::string, IPakToCreate*> m_ipak_lookup; std::unordered_map<std::string, IPakToCreate*> m_ipak_lookup;
std::vector<std::unique_ptr<IPakToCreate>> m_ipaks; std::vector<std::unique_ptr<IPakToCreate>> m_ipaks;
}; };