Make AbstractAssetDumper use the XAssetInfo instead of the raw asset pointer to be able to access dependencies and scriptstrings

This commit is contained in:
Jan 2020-10-20 12:48:53 +02:00
parent ab217bb1a9
commit d942c5a625
27 changed files with 146 additions and 135 deletions

View File

@ -10,24 +10,22 @@ template<class T>
class AbstractAssetDumper : public IAssetDumper<T>
{
protected:
virtual bool ShouldDump(T* asset) = 0;
virtual std::string GetFileNameForAsset(Zone* zone, T* asset) = 0;
virtual void DumpAsset(Zone* zone, T* asset, FileAPI::File* out) = 0;
virtual bool ShouldDump(XAssetInfo<T>* asset) = 0;
virtual std::string GetFileNameForAsset(Zone* zone, XAssetInfo<T>* asset) = 0;
virtual void DumpAsset(Zone* zone, XAssetInfo<T>* asset, FileAPI::File* out) = 0;
public:
void DumpPool(Zone* zone, AssetPool<T>* pool, const std::string& basePath) override
{
for(auto assetInfo : *pool)
{
T* asset = assetInfo->Asset();
if(assetInfo->m_name[0] == ','
|| !ShouldDump(asset))
|| !ShouldDump(assetInfo))
{
continue;
}
std::string assetFilePath = utils::Path::Combine(basePath, GetFileNameForAsset(zone, asset));
std::string assetFilePath = utils::Path::Combine(basePath, GetFileNameForAsset(zone, assetInfo));
FileAPI::DirectoryCreate(utils::Path::GetDirectory(assetFilePath));
@ -35,7 +33,7 @@ public:
if(file.IsOpen())
{
DumpAsset(zone, asset, &file);
DumpAsset(zone, assetInfo, &file);
file.Close();
}

View File

@ -5,17 +5,18 @@
using namespace IW4;
bool AssetDumperAddonMapEnts::ShouldDump(AddonMapEnts* asset)
bool AssetDumperAddonMapEnts::ShouldDump(XAssetInfo<AddonMapEnts>* asset)
{
return true;
}
std::string AssetDumperAddonMapEnts::GetFileNameForAsset(Zone* zone, AddonMapEnts* asset)
std::string AssetDumperAddonMapEnts::GetFileNameForAsset(Zone* zone, XAssetInfo<AddonMapEnts>* asset)
{
return std::string(asset->name);
return asset->m_name;
}
void AssetDumperAddonMapEnts::DumpAsset(Zone* zone, AddonMapEnts* asset, FileAPI::File* out)
void AssetDumperAddonMapEnts::DumpAsset(Zone* zone, XAssetInfo<AddonMapEnts>* asset, FileAPI::File* out)
{
out->Write(asset->entityString, 1, std::max(asset->numEntityChars - 1, 0));
const auto* addonMapEnts = asset->Asset();
out->Write(addonMapEnts->entityString, 1, std::max(addonMapEnts->numEntityChars - 1, 0));
}

View File

@ -8,8 +8,8 @@ namespace IW4
class AssetDumperAddonMapEnts final : public AbstractAssetDumper<AddonMapEnts>
{
protected:
bool ShouldDump(AddonMapEnts* asset) override;
std::string GetFileNameForAsset(Zone* zone, AddonMapEnts* asset) override;
void DumpAsset(Zone* zone, AddonMapEnts* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<AddonMapEnts>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<AddonMapEnts>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<AddonMapEnts>* asset, FileAPI::File* out) override;
};
}

View File

@ -31,17 +31,19 @@ AssetDumperGfxImage::~AssetDumperGfxImage()
m_writer = nullptr;
}
bool AssetDumperGfxImage::ShouldDump(GfxImage* asset)
bool AssetDumperGfxImage::ShouldDump(XAssetInfo<GfxImage>* asset)
{
return asset->cardMemory.platform[0] > 0;
const auto* image = asset->Asset();
return image->cardMemory.platform[0] > 0;
}
std::string AssetDumperGfxImage::GetFileNameForAsset(Zone* zone, GfxImage* asset)
std::string AssetDumperGfxImage::GetFileNameForAsset(Zone* zone, XAssetInfo<GfxImage>* asset)
{
return "images/" + std::string(asset->name) + m_writer->GetFileExtension();
return "images/" + asset->m_name + m_writer->GetFileExtension();
}
void AssetDumperGfxImage::DumpAsset(Zone* zone, GfxImage* asset, FileAPI::File* out)
void AssetDumperGfxImage::DumpAsset(Zone* zone, XAssetInfo<GfxImage>* asset, FileAPI::File* out)
{
m_writer->DumpImage(out, asset->texture.texture);
const auto* image = asset->Asset();
m_writer->DumpImage(out, image->texture.texture);
}

View File

@ -6,18 +6,18 @@
namespace IW4
{
class AssetDumperGfxImage final : public AbstractAssetDumper<IW4::GfxImage>
class AssetDumperGfxImage final : public AbstractAssetDumper<GfxImage>
{
IImageWriter* m_writer;
protected:
bool ShouldDump(IW4::GfxImage* asset) override;
std::string GetFileNameForAsset(Zone* zone, IW4::GfxImage* asset) override;
void DumpAsset(Zone* zone, IW4::GfxImage* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<GfxImage>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<GfxImage>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<GfxImage>* asset, FileAPI::File* out) override;
public:
AssetDumperGfxImage();
~AssetDumperGfxImage();
~AssetDumperGfxImage() override;
AssetDumperGfxImage(const AssetDumperGfxImage& other) = delete;
AssetDumperGfxImage(AssetDumperGfxImage&& other) noexcept = delete;

View File

@ -4,17 +4,17 @@
using namespace IW4;
bool AssetDumperLoadedSound::ShouldDump(LoadedSound* asset)
bool AssetDumperLoadedSound::ShouldDump(XAssetInfo<LoadedSound>* asset)
{
return true;
}
std::string AssetDumperLoadedSound::GetFileNameForAsset(Zone* zone, LoadedSound* asset)
std::string AssetDumperLoadedSound::GetFileNameForAsset(Zone* zone, XAssetInfo<LoadedSound>* asset)
{
return "sound/" + std::string(asset->name);
return "sound/" + asset->m_name;
}
void AssetDumperLoadedSound::DumpWavPcm(Zone* zone, LoadedSound* asset, FileAPI::File* out)
void AssetDumperLoadedSound::DumpWavPcm(Zone* zone, const LoadedSound* asset, FileAPI::File* out)
{
const uint32_t riffMasterChunkSize = sizeof WAV_CHUNK_ID_RIFF
+ sizeof uint32_t
@ -55,16 +55,17 @@ void AssetDumperLoadedSound::DumpWavPcm(Zone* zone, LoadedSound* asset, FileAPI:
out->Write(asset->sound.data, 1, asset->sound.info.data_len);
}
void AssetDumperLoadedSound::DumpAsset(Zone* zone, LoadedSound* asset, FileAPI::File* out)
void AssetDumperLoadedSound::DumpAsset(Zone* zone, XAssetInfo<LoadedSound>* asset, FileAPI::File* out)
{
switch (static_cast<WavFormat>(asset->sound.info.format))
const auto* loadedSound = asset->Asset();
switch (static_cast<WavFormat>(loadedSound->sound.info.format))
{
case WavFormat::PCM:
DumpWavPcm(zone, asset, out);
DumpWavPcm(zone, loadedSound, out);
break;
default:
printf("Unknown format %i for loaded sound: %s\n", asset->sound.info.format, asset->name);
printf("Unknown format %i for loaded sound: %s\n", loadedSound->sound.info.format, loadedSound->name);
break;
}
}

View File

@ -7,10 +7,10 @@ namespace IW4
{
class AssetDumperLoadedSound final : public AbstractAssetDumper<LoadedSound>
{
static void DumpWavPcm(Zone* zone, LoadedSound* asset, FileAPI::File* out);
static void DumpWavPcm(Zone* zone, const LoadedSound* asset, FileAPI::File* out);
protected:
bool ShouldDump(LoadedSound* asset) override;
std::string GetFileNameForAsset(Zone* zone, LoadedSound* asset) override;
void DumpAsset(Zone* zone, LoadedSound* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<LoadedSound>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<LoadedSound>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<LoadedSound>* asset, FileAPI::File* out) override;
};
}

View File

@ -5,9 +5,9 @@
namespace IW4
{
class AssetDumperLocalizeEntry final : public IAssetDumper<IW4::LocalizeEntry>
class AssetDumperLocalizeEntry final : public IAssetDumper<LocalizeEntry>
{
public:
void DumpPool(Zone* zone, AssetPool<IW4::LocalizeEntry>* pool, const std::string& basePath) override;
void DumpPool(Zone* zone, AssetPool<LocalizeEntry>* pool, const std::string& basePath) override;
};
}

View File

@ -4,19 +4,20 @@
using namespace IW4;
bool AssetDumperRawFile::ShouldDump(RawFile* asset)
bool AssetDumperRawFile::ShouldDump(XAssetInfo<RawFile>* asset)
{
return true;
}
std::string AssetDumperRawFile::GetFileNameForAsset(Zone* zone, RawFile* asset)
std::string AssetDumperRawFile::GetFileNameForAsset(Zone* zone, XAssetInfo<RawFile>* asset)
{
return std::string(asset->name);
return asset->m_name;
}
void AssetDumperRawFile::DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* out)
void AssetDumperRawFile::DumpAsset(Zone* zone, XAssetInfo<RawFile>* asset, FileAPI::File* out)
{
if (asset->compressedLen > 0)
const auto* rawFile = asset->Asset();
if (rawFile->compressedLen > 0)
{
z_stream_s zs{};
@ -33,12 +34,12 @@ void AssetDumperRawFile::DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* ou
throw std::exception("Initializing inflate failed");
}
zs.next_in = reinterpret_cast<const Bytef*>(asset->data.compressedBuffer);
zs.avail_in = asset->compressedLen;
zs.next_in = reinterpret_cast<const Bytef*>(rawFile->data.compressedBuffer);
zs.avail_in = rawFile->compressedLen;
Bytef buffer[0x1000];
while(zs.avail_in > 0)
while (zs.avail_in > 0)
{
zs.next_out = buffer;
zs.avail_out = sizeof buffer;
@ -46,7 +47,7 @@ void AssetDumperRawFile::DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* ou
if (ret < 0)
{
printf("Inflate failed for dumping rawfile '%s'\n", asset->name);
printf("Inflate failed for dumping rawfile '%s'\n", rawFile->name);
inflateEnd(&zs);
return;
}
@ -56,8 +57,8 @@ void AssetDumperRawFile::DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* ou
inflateEnd(&zs);
}
else if (asset->len > 0)
else if (rawFile->len > 0)
{
out->Write(asset->data.buffer, 1, asset->len);
out->Write(rawFile->data.buffer, 1, rawFile->len);
}
}

View File

@ -8,8 +8,8 @@ namespace IW4
class AssetDumperRawFile final : public AbstractAssetDumper<RawFile>
{
protected:
bool ShouldDump(RawFile* asset) override;
std::string GetFileNameForAsset(Zone* zone, RawFile* asset) override;
void DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<RawFile>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<RawFile>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<RawFile>* asset, FileAPI::File* out) override;
};
}

View File

@ -4,25 +4,26 @@
using namespace IW4;
bool AssetDumperStringTable::ShouldDump(StringTable* asset)
bool AssetDumperStringTable::ShouldDump(XAssetInfo<StringTable>* asset)
{
return true;
}
std::string AssetDumperStringTable::GetFileNameForAsset(Zone* zone, StringTable* asset)
std::string AssetDumperStringTable::GetFileNameForAsset(Zone* zone, XAssetInfo<StringTable>* asset)
{
return std::string(asset->name);
return asset->m_name;
}
void AssetDumperStringTable::DumpAsset(Zone* zone, StringTable* asset, FileAPI::File* out)
void AssetDumperStringTable::DumpAsset(Zone* zone, XAssetInfo<StringTable>* asset, FileAPI::File* out)
{
const auto* stringTable = asset->Asset();
CsvWriter csv(out);
for (int row = 0; row < asset->rowCount; row++)
for (int row = 0; row < stringTable->rowCount; row++)
{
for (int column = 0; column < asset->columnCount; column++)
for (int column = 0; column < stringTable->columnCount; column++)
{
const auto* cell = &asset->values[column + row * asset->columnCount];
const auto* cell = &stringTable->values[column + row * stringTable->columnCount];
csv.WriteColumn(cell->string);
}

View File

@ -5,11 +5,11 @@
namespace IW4
{
class AssetDumperStringTable final : public AbstractAssetDumper<IW4::StringTable>
class AssetDumperStringTable final : public AbstractAssetDumper<StringTable>
{
protected:
bool ShouldDump(IW4::StringTable* asset) override;
std::string GetFileNameForAsset(Zone* zone, IW4::StringTable* asset) override;
void DumpAsset(Zone* zone, IW4::StringTable* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<StringTable>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<StringTable>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<StringTable>* asset, FileAPI::File* out) override;
};
}

View File

@ -255,18 +255,18 @@ public:
}
};
bool AssetDumperFontIcon::ShouldDump(FontIcon* asset)
bool AssetDumperFontIcon::ShouldDump(XAssetInfo<FontIcon>* asset)
{
return true;
}
std::string AssetDumperFontIcon::GetFileNameForAsset(Zone* zone, FontIcon* asset)
std::string AssetDumperFontIcon::GetFileNameForAsset(Zone* zone, XAssetInfo<FontIcon>* asset)
{
return std::string(asset->name);
return asset->m_name;
}
void AssetDumperFontIcon::DumpAsset(Zone* zone, FontIcon* asset, FileAPI::File* out)
void AssetDumperFontIcon::DumpAsset(Zone* zone, XAssetInfo<FontIcon>* asset, FileAPI::File* out)
{
AssetDumperFontIconInternal dumper(out);
dumper.DumpFontIcon(asset);
dumper.DumpFontIcon(asset->Asset());
}

View File

@ -5,11 +5,11 @@
namespace T6
{
class AssetDumperFontIcon final : public AbstractAssetDumper<T6::FontIcon>
class AssetDumperFontIcon final : public AbstractAssetDumper<FontIcon>
{
protected:
bool ShouldDump(T6::FontIcon* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::FontIcon* asset) override;
void DumpAsset(Zone* zone, T6::FontIcon* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<FontIcon>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<FontIcon>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<FontIcon>* asset, FileAPI::File* out) override;
};
}

View File

@ -31,17 +31,19 @@ AssetDumperGfxImage::~AssetDumperGfxImage()
m_writer = nullptr;
}
bool AssetDumperGfxImage::ShouldDump(GfxImage* asset)
bool AssetDumperGfxImage::ShouldDump(XAssetInfo<GfxImage>* asset)
{
return asset->loadedSize > 0;
const auto* image = asset->Asset();
return image->loadedSize > 0;
}
std::string AssetDumperGfxImage::GetFileNameForAsset(Zone* zone, GfxImage* asset)
std::string AssetDumperGfxImage::GetFileNameForAsset(Zone* zone, XAssetInfo<GfxImage>* asset)
{
return "images/" + std::string(asset->name) + m_writer->GetFileExtension();
return "images/" + asset->m_name + m_writer->GetFileExtension();
}
void AssetDumperGfxImage::DumpAsset(Zone* zone, GfxImage* asset, FileAPI::File* out)
void AssetDumperGfxImage::DumpAsset(Zone* zone, XAssetInfo<GfxImage>* asset, FileAPI::File* out)
{
m_writer->DumpImage(out, asset->texture.texture);
const auto* image = asset->Asset();
m_writer->DumpImage(out, image->texture.texture);
}

View File

@ -6,18 +6,18 @@
namespace T6
{
class AssetDumperGfxImage final : public AbstractAssetDumper<T6::GfxImage>
class AssetDumperGfxImage final : public AbstractAssetDumper<GfxImage>
{
IImageWriter* m_writer;
protected:
bool ShouldDump(T6::GfxImage* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::GfxImage* asset) override;
void DumpAsset(Zone* zone, T6::GfxImage* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<GfxImage>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<GfxImage>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<GfxImage>* asset, FileAPI::File* out) override;
public:
AssetDumperGfxImage();
~AssetDumperGfxImage();
~AssetDumperGfxImage() override;
AssetDumperGfxImage(const AssetDumperGfxImage& other) = delete;
AssetDumperGfxImage(AssetDumperGfxImage&& other) noexcept = delete;

View File

@ -5,9 +5,9 @@
namespace T6
{
class AssetDumperLocalizeEntry final : public IAssetDumper<T6::LocalizeEntry>
class AssetDumperLocalizeEntry final : public IAssetDumper<LocalizeEntry>
{
public:
void DumpPool(Zone* zone, AssetPool<T6::LocalizeEntry>* pool, const std::string& basePath) override;
void DumpPool(Zone* zone, AssetPool<LocalizeEntry>* pool, const std::string& basePath) override;
};
}

View File

@ -2,17 +2,18 @@
using namespace T6;
bool AssetDumperQdb::ShouldDump(Qdb* asset)
bool AssetDumperQdb::ShouldDump(XAssetInfo<Qdb>* asset)
{
return true;
}
std::string AssetDumperQdb::GetFileNameForAsset(Zone* zone, Qdb* asset)
std::string AssetDumperQdb::GetFileNameForAsset(Zone* zone, XAssetInfo<Qdb>* asset)
{
return std::string(asset->name);
return asset->m_name;
}
void AssetDumperQdb::DumpAsset(Zone* zone, Qdb* asset, FileAPI::File* out)
void AssetDumperQdb::DumpAsset(Zone* zone, XAssetInfo<Qdb>* asset, FileAPI::File* out)
{
out->Write(asset->buffer, 1, asset->len);
const auto* qdb = asset->Asset();
out->Write(qdb->buffer, 1, qdb->len);
}

View File

@ -5,11 +5,11 @@
namespace T6
{
class AssetDumperQdb final : public AbstractAssetDumper<T6::Qdb>
class AssetDumperQdb final : public AbstractAssetDumper<Qdb>
{
protected:
bool ShouldDump(T6::Qdb* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::Qdb* asset) override;
void DumpAsset(Zone* zone, T6::Qdb* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<Qdb>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<Qdb>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<Qdb>* asset, FileAPI::File* out) override;
};
}

View File

@ -2,17 +2,18 @@
using namespace T6;
bool AssetDumperRawFile::ShouldDump(RawFile* asset)
bool AssetDumperRawFile::ShouldDump(XAssetInfo<RawFile>* asset)
{
return true;
}
std::string AssetDumperRawFile::GetFileNameForAsset(Zone* zone, RawFile* asset)
std::string AssetDumperRawFile::GetFileNameForAsset(Zone* zone, XAssetInfo<RawFile>* asset)
{
return std::string(asset->name);
return asset->m_name;
}
void AssetDumperRawFile::DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* out)
void AssetDumperRawFile::DumpAsset(Zone* zone, XAssetInfo<RawFile>* asset, FileAPI::File* out)
{
out->Write(asset->buffer, 1, asset->len);
const auto* rawFile = asset->Asset();
out->Write(rawFile->buffer, 1, rawFile->len);
}

View File

@ -5,11 +5,11 @@
namespace T6
{
class AssetDumperRawFile final : public AbstractAssetDumper<T6::RawFile>
class AssetDumperRawFile final : public AbstractAssetDumper<RawFile>
{
protected:
bool ShouldDump(T6::RawFile* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::RawFile* asset) override;
void DumpAsset(Zone* zone, T6::RawFile* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<RawFile>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<RawFile>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<RawFile>* asset, FileAPI::File* out) override;
};
}

View File

@ -2,17 +2,18 @@
using namespace T6;
bool AssetDumperScriptParseTree::ShouldDump(ScriptParseTree* asset)
bool AssetDumperScriptParseTree::ShouldDump(XAssetInfo<ScriptParseTree>* asset)
{
return true;
}
std::string AssetDumperScriptParseTree::GetFileNameForAsset(Zone* zone, ScriptParseTree* asset)
std::string AssetDumperScriptParseTree::GetFileNameForAsset(Zone* zone, XAssetInfo<ScriptParseTree>* asset)
{
return std::string(asset->name);
return asset->m_name;
}
void AssetDumperScriptParseTree::DumpAsset(Zone* zone, ScriptParseTree* asset, FileAPI::File* out)
void AssetDumperScriptParseTree::DumpAsset(Zone* zone, XAssetInfo<ScriptParseTree>* asset, FileAPI::File* out)
{
out->Write(asset->buffer, 1, asset->len);
const auto* scriptParseTree = asset->Asset();
out->Write(scriptParseTree->buffer, 1, scriptParseTree->len);
}

View File

@ -5,11 +5,11 @@
namespace T6
{
class AssetDumperScriptParseTree final : public AbstractAssetDumper<T6::ScriptParseTree>
class AssetDumperScriptParseTree final : public AbstractAssetDumper<ScriptParseTree>
{
protected:
bool ShouldDump(T6::ScriptParseTree* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::ScriptParseTree* asset) override;
void DumpAsset(Zone* zone, T6::ScriptParseTree* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<ScriptParseTree>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<ScriptParseTree>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<ScriptParseTree>* asset, FileAPI::File* out) override;
};
}

View File

@ -2,17 +2,18 @@
using namespace T6;
bool AssetDumperSlug::ShouldDump(Slug* asset)
bool AssetDumperSlug::ShouldDump(XAssetInfo<Slug>* asset)
{
return true;
}
std::string AssetDumperSlug::GetFileNameForAsset(Zone* zone, Slug* asset)
std::string AssetDumperSlug::GetFileNameForAsset(Zone* zone, XAssetInfo<Slug>* asset)
{
return std::string(asset->name);
return asset->m_name;
}
void AssetDumperSlug::DumpAsset(Zone* zone, Slug* asset, FileAPI::File* out)
void AssetDumperSlug::DumpAsset(Zone* zone, XAssetInfo<Slug>* asset, FileAPI::File* out)
{
out->Write(asset->buffer, 1, asset->len);
const auto* slug = asset->Asset();
out->Write(slug->buffer, 1, slug->len);
}

View File

@ -5,11 +5,11 @@
namespace T6
{
class AssetDumperSlug final : public AbstractAssetDumper<T6::Slug>
class AssetDumperSlug final : public AbstractAssetDumper<Slug>
{
protected:
bool ShouldDump(T6::Slug* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::Slug* asset) override;
void DumpAsset(Zone* zone, T6::Slug* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<Slug>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<Slug>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<Slug>* asset, FileAPI::File* out) override;
};
}

View File

@ -4,25 +4,26 @@
using namespace T6;
bool AssetDumperStringTable::ShouldDump(StringTable* asset)
bool AssetDumperStringTable::ShouldDump(XAssetInfo<StringTable>* asset)
{
return true;
}
std::string AssetDumperStringTable::GetFileNameForAsset(Zone* zone, StringTable* asset)
std::string AssetDumperStringTable::GetFileNameForAsset(Zone* zone, XAssetInfo<StringTable>* asset)
{
return std::string(asset->name);
return asset->m_name;
}
void AssetDumperStringTable::DumpAsset(Zone* zone, StringTable* asset, FileAPI::File* out)
void AssetDumperStringTable::DumpAsset(Zone* zone, XAssetInfo<StringTable>* asset, FileAPI::File* out)
{
const auto* stringTable = asset->Asset();
CsvWriter csv(out);
for(int row = 0; row < asset->rowCount; row++)
for(int row = 0; row < stringTable->rowCount; row++)
{
for(int column = 0; column < asset->columnCount; column++)
for(int column = 0; column < stringTable->columnCount; column++)
{
const auto cell = &asset->values[column + row * asset->columnCount];
const auto* cell = &stringTable->values[column + row * stringTable->columnCount];
csv.WriteColumn(cell->string);
}

View File

@ -5,11 +5,11 @@
namespace T6
{
class AssetDumperStringTable final : public AbstractAssetDumper<T6::StringTable>
class AssetDumperStringTable final : public AbstractAssetDumper<StringTable>
{
protected:
bool ShouldDump(T6::StringTable* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::StringTable* asset) override;
void DumpAsset(Zone* zone, T6::StringTable* asset, FileAPI::File* out) override;
bool ShouldDump(XAssetInfo<StringTable>* asset) override;
std::string GetFileNameForAsset(Zone* zone, XAssetInfo<StringTable>* asset) override;
void DumpAsset(Zone* zone, XAssetInfo<StringTable>* asset, FileAPI::File* out) override;
};
}