[Zone🅱️uilder]: Port over json parsing of loc strings (#621)
This commit is contained in:
parent
5eec7687be
commit
72460032ae
@ -81,4 +81,51 @@ namespace Assets
|
||||
builder->addRawAsset(type, entry);
|
||||
}
|
||||
}
|
||||
|
||||
void ILocalizeEntry::ParseLocalizedStringsJson(Components::ZoneBuilder::Zone* builder, Components::FileSystem::File& file)
|
||||
{
|
||||
nlohmann::json localize;
|
||||
try
|
||||
{
|
||||
Components::Logger::Debug("Parsing localized string \"{}\"...", file.getName());
|
||||
localize = nlohmann::json::parse(file.getBuffer());
|
||||
}
|
||||
catch (const std::exception& ex)
|
||||
{
|
||||
Components::Logger::PrintError(Game::CON_CHANNEL_ERROR, "{}\n", ex.what());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!localize.is_object())
|
||||
{
|
||||
Components::Logger::PrintError(Game::CON_CHANNEL_ERROR, "Localized strings json file '{}' should be an object!", file.getName());
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<Game::LocalizeEntry*> assets;
|
||||
|
||||
try
|
||||
{
|
||||
for (const auto& [key, value] : localize.items())
|
||||
{
|
||||
const auto valueStr = value.get<std::string>();
|
||||
|
||||
auto* entry = builder->getAllocator()->allocate<Game::LocalizeEntry>();
|
||||
entry->name = builder->getAllocator()->duplicateString(key);
|
||||
entry->value = builder->getAllocator()->duplicateString(valueStr);
|
||||
|
||||
assets.emplace_back(entry);
|
||||
}
|
||||
}
|
||||
catch (const std::exception& ex)
|
||||
{
|
||||
Components::Logger::PrintError(Game::CON_CHANNEL_ERROR, "{}: Localized strings json file '{}' contains invalid data!", ex.what(), file.getName());
|
||||
}
|
||||
|
||||
auto type = Game::DB_GetXAssetNameType("localize");
|
||||
for (const auto& entry : assets)
|
||||
{
|
||||
builder->addRawAsset(type, entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,5 +11,6 @@ namespace Assets
|
||||
void save(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) override;
|
||||
|
||||
static void ParseLocalizedStringsFile(Components::ZoneBuilder::Zone* builder, const std::string& name, const std::string& filename);
|
||||
static void ParseLocalizedStringsJson(Components::ZoneBuilder::Zone* builder, Components::FileSystem::File& file);
|
||||
};
|
||||
}
|
||||
|
@ -13,6 +13,11 @@ namespace Components
|
||||
virtual bool exists() = 0;
|
||||
virtual std::string getName() = 0;
|
||||
virtual std::string& getBuffer() = 0;
|
||||
|
||||
virtual explicit operator bool()
|
||||
{
|
||||
return this->exists();
|
||||
}
|
||||
};
|
||||
|
||||
class File : public AbstractFile
|
||||
|
@ -158,12 +158,17 @@ namespace Components
|
||||
if (this->dataMap.getElementAt(i, 0) == "localize"s)
|
||||
{
|
||||
const auto filename = this->dataMap.getElementAt(i, 1);
|
||||
FileSystem::File file(std::format("localizedstrings/{}.str", filename));
|
||||
if (file.exists())
|
||||
if (FileSystem::File file = std::format("localizedstrings/{}.str", filename))
|
||||
{
|
||||
Assets::ILocalizeEntry::ParseLocalizedStringsFile(this, filename, file.getName());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (FileSystem::File file = std::format("localizedstrings/{}.json", filename))
|
||||
{
|
||||
Assets::ILocalizeEntry::ParseLocalizedStringsJson(this, file);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (this->dataMap.getColumns(i) > 2)
|
||||
|
@ -21,7 +21,7 @@ namespace Utils
|
||||
|
||||
char* Memory::DuplicateString(const std::string& string)
|
||||
{
|
||||
auto* newString = Memory::AllocateArray<char>(string.size() + 1);
|
||||
auto* newString = AllocateArray<char>(string.size() + 1);
|
||||
std::memcpy(newString, string.data(), string.size());
|
||||
return newString;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user