ZoneLoading: Extract all obj dumping relevant parts to ObjWriting component

This commit is contained in:
Jan
2019-12-25 14:07:24 +01:00
parent e8de3a3f39
commit 00b3322cb2
28 changed files with 143 additions and 37 deletions

View File

@ -0,0 +1,98 @@
#include "AssetDumperLocalizeEntry.h"
#include "Dumping/Localize/StringFileDumper.h"
using namespace T6;
std::string AssetDumperLocalizeEntry::GetNameOfLanguage(ZoneLanguage language)
{
switch(language)
{
case ZoneLanguage::LANGUAGE_NONE:
case ZoneLanguage::LANGUAGE_ENGLISH:
default:
return "english";
case ZoneLanguage::LANGUAGE_FRENCH:
return "french";
case ZoneLanguage::LANGUAGE_GERMAN:
return "german";
case ZoneLanguage::LANGUAGE_ITALIAN:
return "italian";
case ZoneLanguage::LANGUAGE_SPANISH:
return "spanish";
case ZoneLanguage::LANGUAGE_BRITISH:
return "british";
case ZoneLanguage::LANGUAGE_RUSSIAN:
return "russian";
case ZoneLanguage::LANGUAGE_POLISH:
return "polish";
case ZoneLanguage::LANGUAGE_KOREAN:
return "korean";
case ZoneLanguage::LANGUAGE_JAPANESE:
return "japanese";
case ZoneLanguage::LANGUAGE_CZECH:
return "czech";
case ZoneLanguage::LANGUAGE_FRENCH_CAN:
return "frenchcan";
case ZoneLanguage::LANGUAGE_AUSTRIAN:
return "austrian";
case ZoneLanguage::LANGUAGE_PORTUGUESE:
return "portuguese";
case ZoneLanguage::LANGUAGE_MEXICAN_SPANISH:
return "mexicanspanish";
case ZoneLanguage::LANGUAGE_FULL_JAPANESE:
return "fulljapanese";
}
}
void AssetDumperLocalizeEntry::DumpPool(Zone* zone, AssetPool<LocalizeEntry>* pool, const std::string& basePath)
{
if (pool->m_asset_lookup.size() == 0)
return;
const std::string language = GetNameOfLanguage(zone->m_language);
const std::string stringsPath = utils::Path::Combine(basePath, language + "/localizedstrings");
FileAPI::DirectoryCreate(stringsPath);
FileAPI::File stringFile = FileAPI::Open(utils::Path::Combine(stringsPath, zone->m_name + ".str"), FileAPI::Mode::MODE_WRITE);
if(stringFile.IsOpen())
{
StringFileDumper stringFileDumper(zone, &stringFile);
stringFileDumper.SetLanguageName(language);
// Magic string. Original string files do have this config file. The purpose of the config file is unknown though.
stringFileDumper.SetConfigFile(R"(C:\projects\cod\t6\bin\StringEd.cfg)");
stringFileDumper.SetNotes("");
for(auto localizeEntry : *pool)
{
stringFileDumper.WriteLocalizeEntry(localizeEntry->m_asset->name, localizeEntry->m_asset->value);
}
stringFileDumper.Finalize();
stringFile.Close();
}
else
{
printf("Could not create string file for dumping localized strings of zone '%s'\n", zone->m_name.c_str());
}
}

View File

@ -0,0 +1,12 @@
#pragma once
#include "Dumping/AbstractAssetDumper.h"
#include "Game/T6/T6.h"
class AssetDumperLocalizeEntry final : public IAssetDumper<T6::LocalizeEntry>
{
static std::string GetNameOfLanguage(ZoneLanguage language);
public:
void DumpPool(Zone* zone, AssetPool<T6::LocalizeEntry>* pool, const std::string& basePath) override;
};

View File

@ -0,0 +1,13 @@
#include "AssetDumperQdb.h"
using namespace T6;
std::string AssetDumperQdb::GetFileNameForAsset(Zone* zone, Qdb* asset)
{
return std::string(asset->name);
}
void AssetDumperQdb::DumpAsset(Zone* zone, Qdb* asset, FileAPI::File* out)
{
out->Write(asset->buffer, 1, asset->len);
}

View File

@ -0,0 +1,11 @@
#pragma once
#include "Dumping/AbstractAssetDumper.h"
#include "Game/T6/T6.h"
class AssetDumperQdb final : public AbstractAssetDumper<T6::Qdb>
{
protected:
std::string GetFileNameForAsset(Zone* zone, T6::Qdb* asset) override;
void DumpAsset(Zone* zone, T6::Qdb* asset, FileAPI::File* out) override;
};

View File

@ -0,0 +1,13 @@
#include "AssetDumperRawFile.h"
using namespace T6;
std::string AssetDumperRawFile::GetFileNameForAsset(Zone* zone, RawFile* asset)
{
return std::string(asset->name);
}
void AssetDumperRawFile::DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* out)
{
out->Write(asset->buffer, 1, asset->len);
}

View File

@ -0,0 +1,11 @@
#pragma once
#include "Dumping/AbstractAssetDumper.h"
#include "Game/T6/T6.h"
class AssetDumperRawFile final : public AbstractAssetDumper<T6::RawFile>
{
protected:
std::string GetFileNameForAsset(Zone* zone, T6::RawFile* asset) override;
void DumpAsset(Zone* zone, T6::RawFile* asset, FileAPI::File* out) override;
};

View File

@ -0,0 +1,13 @@
#include "AssetDumperScriptParseTree.h"
using namespace T6;
std::string AssetDumperScriptParseTree::GetFileNameForAsset(Zone* zone, ScriptParseTree* asset)
{
return std::string(asset->name);
}
void AssetDumperScriptParseTree::DumpAsset(Zone* zone, ScriptParseTree* asset, FileAPI::File* out)
{
out->Write(asset->buffer, 1, asset->len);
}

View File

@ -0,0 +1,11 @@
#pragma once
#include "Dumping/AbstractAssetDumper.h"
#include "Game/T6/T6.h"
class AssetDumperScriptParseTree final : public AbstractAssetDumper<T6::ScriptParseTree>
{
protected:
std::string GetFileNameForAsset(Zone* zone, T6::ScriptParseTree* asset) override;
void DumpAsset(Zone* zone, T6::ScriptParseTree* asset, FileAPI::File* out) override;
};

View File

@ -0,0 +1,13 @@
#include "AssetDumperSlug.h"
using namespace T6;
std::string AssetDumperSlug::GetFileNameForAsset(Zone* zone, Slug* asset)
{
return std::string(asset->name);
}
void AssetDumperSlug::DumpAsset(Zone* zone, Slug* asset, FileAPI::File* out)
{
out->Write(asset->buffer, 1, asset->len);
}

View File

@ -0,0 +1,11 @@
#pragma once
#include "Dumping/AbstractAssetDumper.h"
#include "Game/T6/T6.h"
class AssetDumperSlug final : public AbstractAssetDumper<T6::Slug>
{
protected:
std::string GetFileNameForAsset(Zone* zone, T6::Slug* asset) override;
void DumpAsset(Zone* zone, T6::Slug* asset, FileAPI::File* out) override;
};

View File

@ -0,0 +1,37 @@
#include "AssetDumperStringTable.h"
using namespace T6;
std::string AssetDumperStringTable::GetFileNameForAsset(Zone* zone, StringTable* asset)
{
return std::string(asset->name);
}
void AssetDumperStringTable::DumpAsset(Zone* zone, StringTable* asset, FileAPI::File* out)
{
char separator[]{ ',' };
char newLine[]{ '\n' };
for(int row = 0; row < asset->rowCount; row++)
{
for(int column = 0; column < asset->columnCount; column++)
{
const auto cell = &asset->values[column + row * asset->columnCount];
if (column != 0)
{
out->Write(separator, 1, sizeof separator);
}
if(cell->string && *cell->string)
{
out->Write(cell->string, 1, strlen(cell->string));
}
}
if (row != asset->rowCount - 1)
{
out->Write(newLine, 1, sizeof newLine);
}
}
}

View File

@ -0,0 +1,11 @@
#pragma once
#include "Dumping/AbstractAssetDumper.h"
#include "Game/T6/T6.h"
class AssetDumperStringTable final : public AbstractAssetDumper<T6::StringTable>
{
protected:
std::string GetFileNameForAsset(Zone* zone, T6::StringTable* asset) override;
void DumpAsset(Zone* zone, T6::StringTable* asset, FileAPI::File* out) override;
};