diff --git a/src/ObjCommon/Localize/CommonLocalizeEntry.cpp b/src/ObjCommon/Localize/CommonLocalizeEntry.cpp new file mode 100644 index 00000000..6d20809c --- /dev/null +++ b/src/ObjCommon/Localize/CommonLocalizeEntry.cpp @@ -0,0 +1,9 @@ +#include "CommonLocalizeEntry.h" + +CommonLocalizeEntry::CommonLocalizeEntry() = default; + +CommonLocalizeEntry::CommonLocalizeEntry(std::string key, std::string value) + : m_key(std::move(key)), + m_value(std::move(value)) +{ +} diff --git a/src/ObjCommon/Localize/CommonLocalizeEntry.h b/src/ObjCommon/Localize/CommonLocalizeEntry.h new file mode 100644 index 00000000..811ad33a --- /dev/null +++ b/src/ObjCommon/Localize/CommonLocalizeEntry.h @@ -0,0 +1,12 @@ +#pragma once +#include + +class CommonLocalizeEntry +{ +public: + std::string m_key; + std::string m_value; + + CommonLocalizeEntry(); + CommonLocalizeEntry(std::string key, std::string value); +}; diff --git a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderLocalizeEntry.cpp b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderLocalizeEntry.cpp index 6295f521..a4fd689c 100644 --- a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderLocalizeEntry.cpp +++ b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderLocalizeEntry.cpp @@ -1,9 +1,6 @@ #include "AssetLoaderLocalizeEntry.h" -#include "Localize/LocalizeCommon.h" -#include "Localize/Parsing/LocalizeFileReader.h" - -#include +#include "Localize/LocalizeCommonAssetLoader.h" using namespace IW4; @@ -25,29 +22,15 @@ bool AssetLoaderLocalizeEntry::CanLoadFromRaw() const bool AssetLoaderLocalizeEntry::LoadFromRaw( const std::string& assetName, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager, Zone* zone) const { - std::string fileName; - { - std::ostringstream str; - str << LocalizeCommon::GetNameOfLanguage(zone->m_language) << "/localizedstrings/" << assetName << ".str"; - fileName = str.str(); - } + LocalizeCommonAssetLoader commonLoader( + [memory, manager](const CommonLocalizeEntry& entry) + { + auto* localizeEntry = memory->Create(); + localizeEntry->name = memory->Dup(entry.m_key.c_str()); + localizeEntry->value = memory->Dup(entry.m_value.c_str()); - const auto file = searchPath->Open(fileName); - if (!file.IsOpen()) - return false; + manager->AddAsset(ASSET_TYPE_LOCALIZE_ENTRY, entry.m_key, localizeEntry); + }); - auto* zoneState = manager->GetAssetLoadingContext()->GetZoneAssetLoaderState(); - LocalizeFileReader reader(*file.m_stream, assetName, zone->m_language, zoneState); - const auto localizeEntries = reader.ReadLocalizeFile(); - - for (const auto& [key, value] : localizeEntries) - { - auto* localizeEntry = memory->Create(); - localizeEntry->name = memory->Dup(key.c_str()); - localizeEntry->value = memory->Dup(value.c_str()); - - manager->AddAsset(ASSET_TYPE_LOCALIZE_ENTRY, key, localizeEntry); - } - - return true; + return commonLoader.LoadLocalizeAsset(assetName, searchPath, manager, zone); } diff --git a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderLocalizeEntry.h b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderLocalizeEntry.h index 9833c10b..4dbf1521 100644 --- a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderLocalizeEntry.h +++ b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderLocalizeEntry.h @@ -1,4 +1,5 @@ #pragma once + #include "AssetLoading/BasicAssetLoader.h" #include "AssetLoading/IAssetLoadingManager.h" #include "Game/IW4/IW4.h" diff --git a/src/ObjLoading/Game/IW5/AssetLoaders/AssetLoaderLocalizeEntry.cpp b/src/ObjLoading/Game/IW5/AssetLoaders/AssetLoaderLocalizeEntry.cpp index 52c4a53e..f8c47383 100644 --- a/src/ObjLoading/Game/IW5/AssetLoaders/AssetLoaderLocalizeEntry.cpp +++ b/src/ObjLoading/Game/IW5/AssetLoaders/AssetLoaderLocalizeEntry.cpp @@ -1,9 +1,6 @@ #include "AssetLoaderLocalizeEntry.h" -#include "Localize/LocalizeCommon.h" -#include "Localize/Parsing/LocalizeFileReader.h" - -#include +#include "Localize/LocalizeCommonAssetLoader.h" using namespace IW5; @@ -25,29 +22,15 @@ bool AssetLoaderLocalizeEntry::CanLoadFromRaw() const bool AssetLoaderLocalizeEntry::LoadFromRaw( const std::string& assetName, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager, Zone* zone) const { - std::string fileName; - { - std::ostringstream str; - str << LocalizeCommon::GetNameOfLanguage(zone->m_language) << "/localizedstrings/" << assetName << ".str"; - fileName = str.str(); - } + LocalizeCommonAssetLoader commonLoader( + [memory, manager](const CommonLocalizeEntry& entry) + { + auto* localizeEntry = memory->Create(); + localizeEntry->name = memory->Dup(entry.m_key.c_str()); + localizeEntry->value = memory->Dup(entry.m_value.c_str()); - const auto file = searchPath->Open(fileName); - if (!file.IsOpen()) - return false; + manager->AddAsset(ASSET_TYPE_LOCALIZE_ENTRY, entry.m_key, localizeEntry); + }); - auto* zoneState = manager->GetAssetLoadingContext()->GetZoneAssetLoaderState(); - LocalizeFileReader reader(*file.m_stream, assetName, zone->m_language, zoneState); - const auto localizeEntries = reader.ReadLocalizeFile(); - - for (const auto& [key, value] : localizeEntries) - { - auto* localizeEntry = memory->Create(); - localizeEntry->name = memory->Dup(key.c_str()); - localizeEntry->value = memory->Dup(value.c_str()); - - manager->AddAsset(ASSET_TYPE_LOCALIZE_ENTRY, key, localizeEntry); - } - - return true; + return commonLoader.LoadLocalizeAsset(assetName, searchPath, manager, zone); } diff --git a/src/ObjLoading/Game/IW5/AssetLoaders/AssetLoaderLocalizeEntry.h b/src/ObjLoading/Game/IW5/AssetLoaders/AssetLoaderLocalizeEntry.h index d21c80c7..e35c2fd5 100644 --- a/src/ObjLoading/Game/IW5/AssetLoaders/AssetLoaderLocalizeEntry.h +++ b/src/ObjLoading/Game/IW5/AssetLoaders/AssetLoaderLocalizeEntry.h @@ -1,4 +1,5 @@ #pragma once + #include "AssetLoading/BasicAssetLoader.h" #include "AssetLoading/IAssetLoadingManager.h" #include "Game/IW5/IW5.h" diff --git a/src/ObjLoading/Game/T5/AssetLoaders/AssetLoaderLocalizeEntry.cpp b/src/ObjLoading/Game/T5/AssetLoaders/AssetLoaderLocalizeEntry.cpp index 05e353a9..6152f877 100644 --- a/src/ObjLoading/Game/T5/AssetLoaders/AssetLoaderLocalizeEntry.cpp +++ b/src/ObjLoading/Game/T5/AssetLoaders/AssetLoaderLocalizeEntry.cpp @@ -1,9 +1,6 @@ #include "AssetLoaderLocalizeEntry.h" -#include "Localize/LocalizeCommon.h" -#include "Localize/Parsing/LocalizeFileReader.h" - -#include +#include "Localize/LocalizeCommonAssetLoader.h" using namespace T5; @@ -25,29 +22,15 @@ bool AssetLoaderLocalizeEntry::CanLoadFromRaw() const bool AssetLoaderLocalizeEntry::LoadFromRaw( const std::string& assetName, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager, Zone* zone) const { - std::string fileName; - { - std::ostringstream str; - str << LocalizeCommon::GetNameOfLanguage(zone->m_language) << "/localizedstrings/" << assetName << ".str"; - fileName = str.str(); - } + LocalizeCommonAssetLoader commonLoader( + [memory, manager](const CommonLocalizeEntry& entry) + { + auto* localizeEntry = memory->Create(); + localizeEntry->name = memory->Dup(entry.m_key.c_str()); + localizeEntry->value = memory->Dup(entry.m_value.c_str()); - const auto file = searchPath->Open(fileName); - if (!file.IsOpen()) - return false; + manager->AddAsset(ASSET_TYPE_LOCALIZE_ENTRY, entry.m_key, localizeEntry); + }); - auto* zoneState = manager->GetAssetLoadingContext()->GetZoneAssetLoaderState(); - LocalizeFileReader reader(*file.m_stream, assetName, zone->m_language, zoneState); - const auto localizeEntries = reader.ReadLocalizeFile(); - - for (const auto& [key, value] : localizeEntries) - { - auto* localizeEntry = memory->Create(); - localizeEntry->name = memory->Dup(key.c_str()); - localizeEntry->value = memory->Dup(value.c_str()); - - manager->AddAsset(ASSET_TYPE_LOCALIZE_ENTRY, key, localizeEntry); - } - - return true; + return commonLoader.LoadLocalizeAsset(assetName, searchPath, manager, zone); } diff --git a/src/ObjLoading/Game/T5/AssetLoaders/AssetLoaderLocalizeEntry.h b/src/ObjLoading/Game/T5/AssetLoaders/AssetLoaderLocalizeEntry.h index b311172c..005f51cc 100644 --- a/src/ObjLoading/Game/T5/AssetLoaders/AssetLoaderLocalizeEntry.h +++ b/src/ObjLoading/Game/T5/AssetLoaders/AssetLoaderLocalizeEntry.h @@ -1,4 +1,5 @@ #pragma once + #include "AssetLoading/BasicAssetLoader.h" #include "AssetLoading/IAssetLoadingManager.h" #include "Game/T5/T5.h" diff --git a/src/ObjLoading/Game/T6/AssetLoaders/AssetLoaderLocalizeEntry.cpp b/src/ObjLoading/Game/T6/AssetLoaders/AssetLoaderLocalizeEntry.cpp index 9dda88e4..2aaa13e5 100644 --- a/src/ObjLoading/Game/T6/AssetLoaders/AssetLoaderLocalizeEntry.cpp +++ b/src/ObjLoading/Game/T6/AssetLoaders/AssetLoaderLocalizeEntry.cpp @@ -1,9 +1,6 @@ #include "AssetLoaderLocalizeEntry.h" -#include "Localize/LocalizeCommon.h" -#include "Localize/Parsing/LocalizeFileReader.h" - -#include +#include "Localize/LocalizeCommonAssetLoader.h" using namespace T6; @@ -25,29 +22,15 @@ bool AssetLoaderLocalizeEntry::CanLoadFromRaw() const bool AssetLoaderLocalizeEntry::LoadFromRaw( const std::string& assetName, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager, Zone* zone) const { - std::string fileName; - { - std::ostringstream str; - str << LocalizeCommon::GetNameOfLanguage(zone->m_language) << "/localizedstrings/" << assetName << ".str"; - fileName = str.str(); - } + LocalizeCommonAssetLoader commonLoader( + [memory, manager](const CommonLocalizeEntry& entry) + { + auto* localizeEntry = memory->Create(); + localizeEntry->name = memory->Dup(entry.m_key.c_str()); + localizeEntry->value = memory->Dup(entry.m_value.c_str()); - const auto file = searchPath->Open(fileName); - if (!file.IsOpen()) - return false; + manager->AddAsset(ASSET_TYPE_LOCALIZE_ENTRY, entry.m_key, localizeEntry); + }); - auto* zoneState = manager->GetAssetLoadingContext()->GetZoneAssetLoaderState(); - LocalizeFileReader reader(*file.m_stream, assetName, zone->m_language, zoneState); - const auto localizeEntries = reader.ReadLocalizeFile(); - - for (const auto& [key, value] : localizeEntries) - { - auto* localizeEntry = memory->Create(); - localizeEntry->name = memory->Dup(key.c_str()); - localizeEntry->value = memory->Dup(value.c_str()); - - manager->AddAsset(ASSET_TYPE_LOCALIZE_ENTRY, key, localizeEntry); - } - - return true; + return commonLoader.LoadLocalizeAsset(assetName, searchPath, manager, zone); } diff --git a/src/ObjLoading/Localize/LocalizeCommonAssetLoader.cpp b/src/ObjLoading/Localize/LocalizeCommonAssetLoader.cpp new file mode 100644 index 00000000..ab39dff5 --- /dev/null +++ b/src/ObjLoading/Localize/LocalizeCommonAssetLoader.cpp @@ -0,0 +1,40 @@ +#include "LocalizeCommonAssetLoader.h" + +#include "Localize/LocalizeCommon.h" +#include "Localize/LocalizeReadingZoneState.h" +#include "Localize/Parsing/LocalizeFileReader.h" + +#include + +LocalizeCommonAssetLoader::LocalizeCommonAssetLoader(std::function entryCallback) + : m_entry_callback(std::move(entryCallback)) +{ +} + +std::string LocalizeCommonAssetLoader::GetFileName(const std::string& assetName, Zone* zone) const +{ + std::ostringstream ss; + ss << LocalizeCommon::GetNameOfLanguage(zone->m_language) << "/localizedstrings/" << assetName << ".str"; + return ss.str(); +} + +bool LocalizeCommonAssetLoader::LoadLocalizeAsset(const std::string& assetName, ISearchPath* searchPath, IAssetLoadingManager* manager, Zone* zone) const +{ + std::string fileName = GetFileName(assetName, zone); + + const auto file = searchPath->Open(fileName); + if (!file.IsOpen()) + return false; + + auto* zoneState = manager->GetAssetLoadingContext()->GetZoneAssetLoaderState(); + LocalizeFileReader reader(*file.m_stream, assetName, zone->m_language, zoneState); + const auto localizeEntries = reader.ReadLocalizeFile(); + + for (const auto& [key, value] : localizeEntries) + { + CommonLocalizeEntry entry(key, value); + m_entry_callback(entry); + } + + return true; +} diff --git a/src/ObjLoading/Localize/LocalizeCommonAssetLoader.h b/src/ObjLoading/Localize/LocalizeCommonAssetLoader.h new file mode 100644 index 00000000..0955b630 --- /dev/null +++ b/src/ObjLoading/Localize/LocalizeCommonAssetLoader.h @@ -0,0 +1,22 @@ +#pragma once + +#include "AssetLoading/IAssetLoadingManager.h" +#include "Localize/CommonLocalizeEntry.h" +#include "SearchPath/ISearchPath.h" +#include "Zone/Zone.h" + +#include +#include + +class LocalizeCommonAssetLoader +{ +public: + explicit LocalizeCommonAssetLoader(std::function entryCallback); + + bool LoadLocalizeAsset(const std::string& assetName, ISearchPath* searchPath, IAssetLoadingManager* manager, Zone* zone) const; + +private: + std::string GetFileName(const std::string& assetName, Zone* zone) const; + + std::function m_entry_callback; +};