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

View File

@ -5,17 +5,18 @@
using namespace IW4; using namespace IW4;
bool AssetDumperAddonMapEnts::ShouldDump(AddonMapEnts* asset) bool AssetDumperAddonMapEnts::ShouldDump(XAssetInfo<AddonMapEnts>* asset)
{ {
return true; 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> class AssetDumperAddonMapEnts final : public AbstractAssetDumper<AddonMapEnts>
{ {
protected: protected:
bool ShouldDump(AddonMapEnts* asset) override; bool ShouldDump(XAssetInfo<AddonMapEnts>* asset) override;
std::string GetFileNameForAsset(Zone* zone, AddonMapEnts* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo<AddonMapEnts>* asset) override;
void DumpAsset(Zone* zone, AddonMapEnts* asset, FileAPI::File* out) override; void DumpAsset(Zone* zone, XAssetInfo<AddonMapEnts>* asset, FileAPI::File* out) override;
}; };
} }

View File

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

View File

@ -4,17 +4,17 @@
using namespace IW4; using namespace IW4;
bool AssetDumperLoadedSound::ShouldDump(LoadedSound* asset) bool AssetDumperLoadedSound::ShouldDump(XAssetInfo<LoadedSound>* asset)
{ {
return true; 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 const uint32_t riffMasterChunkSize = sizeof WAV_CHUNK_ID_RIFF
+ sizeof uint32_t + 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); 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: case WavFormat::PCM:
DumpWavPcm(zone, asset, out); DumpWavPcm(zone, loadedSound, out);
break; break;
default: 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; break;
} }
} }

View File

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

View File

@ -5,9 +5,9 @@
namespace IW4 namespace IW4
{ {
class AssetDumperLocalizeEntry final : public IAssetDumper<IW4::LocalizeEntry> class AssetDumperLocalizeEntry final : public IAssetDumper<LocalizeEntry>
{ {
public: 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; using namespace IW4;
bool AssetDumperRawFile::ShouldDump(RawFile* asset) bool AssetDumperRawFile::ShouldDump(XAssetInfo<RawFile>* asset)
{ {
return true; 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{}; z_stream_s zs{};
@ -33,8 +34,8 @@ void AssetDumperRawFile::DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* ou
throw std::exception("Initializing inflate failed"); throw std::exception("Initializing inflate failed");
} }
zs.next_in = reinterpret_cast<const Bytef*>(asset->data.compressedBuffer); zs.next_in = reinterpret_cast<const Bytef*>(rawFile->data.compressedBuffer);
zs.avail_in = asset->compressedLen; zs.avail_in = rawFile->compressedLen;
Bytef buffer[0x1000]; Bytef buffer[0x1000];
@ -46,7 +47,7 @@ void AssetDumperRawFile::DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* ou
if (ret < 0) 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); inflateEnd(&zs);
return; return;
} }
@ -56,8 +57,8 @@ void AssetDumperRawFile::DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* ou
inflateEnd(&zs); 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> class AssetDumperRawFile final : public AbstractAssetDumper<RawFile>
{ {
protected: protected:
bool ShouldDump(RawFile* asset) override; bool ShouldDump(XAssetInfo<RawFile>* asset) override;
std::string GetFileNameForAsset(Zone* zone, RawFile* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo<RawFile>* asset) override;
void DumpAsset(Zone* zone, RawFile* asset, FileAPI::File* out) override; void DumpAsset(Zone* zone, XAssetInfo<RawFile>* asset, FileAPI::File* out) override;
}; };
} }

View File

@ -4,25 +4,26 @@
using namespace IW4; using namespace IW4;
bool AssetDumperStringTable::ShouldDump(StringTable* asset) bool AssetDumperStringTable::ShouldDump(XAssetInfo<StringTable>* asset)
{ {
return true; 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); 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); csv.WriteColumn(cell->string);
} }

View File

@ -5,11 +5,11 @@
namespace IW4 namespace IW4
{ {
class AssetDumperStringTable final : public AbstractAssetDumper<IW4::StringTable> class AssetDumperStringTable final : public AbstractAssetDumper<StringTable>
{ {
protected: protected:
bool ShouldDump(IW4::StringTable* asset) override; bool ShouldDump(XAssetInfo<StringTable>* asset) override;
std::string GetFileNameForAsset(Zone* zone, IW4::StringTable* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo<StringTable>* asset) override;
void DumpAsset(Zone* zone, IW4::StringTable* asset, FileAPI::File* out) 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; 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); AssetDumperFontIconInternal dumper(out);
dumper.DumpFontIcon(asset); dumper.DumpFontIcon(asset->Asset());
} }

View File

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

View File

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

View File

@ -5,9 +5,9 @@
namespace T6 namespace T6
{ {
class AssetDumperLocalizeEntry final : public IAssetDumper<T6::LocalizeEntry> class AssetDumperLocalizeEntry final : public IAssetDumper<LocalizeEntry>
{ {
public: 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; using namespace T6;
bool AssetDumperQdb::ShouldDump(Qdb* asset) bool AssetDumperQdb::ShouldDump(XAssetInfo<Qdb>* asset)
{ {
return true; 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 namespace T6
{ {
class AssetDumperQdb final : public AbstractAssetDumper<T6::Qdb> class AssetDumperQdb final : public AbstractAssetDumper<Qdb>
{ {
protected: protected:
bool ShouldDump(T6::Qdb* asset) override; bool ShouldDump(XAssetInfo<Qdb>* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::Qdb* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo<Qdb>* asset) override;
void DumpAsset(Zone* zone, T6::Qdb* asset, FileAPI::File* out) override; void DumpAsset(Zone* zone, XAssetInfo<Qdb>* asset, FileAPI::File* out) override;
}; };
} }

View File

@ -2,17 +2,18 @@
using namespace T6; using namespace T6;
bool AssetDumperRawFile::ShouldDump(RawFile* asset) bool AssetDumperRawFile::ShouldDump(XAssetInfo<RawFile>* asset)
{ {
return true; 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 namespace T6
{ {
class AssetDumperRawFile final : public AbstractAssetDumper<T6::RawFile> class AssetDumperRawFile final : public AbstractAssetDumper<RawFile>
{ {
protected: protected:
bool ShouldDump(T6::RawFile* asset) override; bool ShouldDump(XAssetInfo<RawFile>* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::RawFile* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo<RawFile>* asset) override;
void DumpAsset(Zone* zone, T6::RawFile* asset, FileAPI::File* out) override; void DumpAsset(Zone* zone, XAssetInfo<RawFile>* asset, FileAPI::File* out) override;
}; };
} }

View File

@ -2,17 +2,18 @@
using namespace T6; using namespace T6;
bool AssetDumperScriptParseTree::ShouldDump(ScriptParseTree* asset) bool AssetDumperScriptParseTree::ShouldDump(XAssetInfo<ScriptParseTree>* asset)
{ {
return true; 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 namespace T6
{ {
class AssetDumperScriptParseTree final : public AbstractAssetDumper<T6::ScriptParseTree> class AssetDumperScriptParseTree final : public AbstractAssetDumper<ScriptParseTree>
{ {
protected: protected:
bool ShouldDump(T6::ScriptParseTree* asset) override; bool ShouldDump(XAssetInfo<ScriptParseTree>* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::ScriptParseTree* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo<ScriptParseTree>* asset) override;
void DumpAsset(Zone* zone, T6::ScriptParseTree* asset, FileAPI::File* out) override; void DumpAsset(Zone* zone, XAssetInfo<ScriptParseTree>* asset, FileAPI::File* out) override;
}; };
} }

View File

@ -2,17 +2,18 @@
using namespace T6; using namespace T6;
bool AssetDumperSlug::ShouldDump(Slug* asset) bool AssetDumperSlug::ShouldDump(XAssetInfo<Slug>* asset)
{ {
return true; 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 namespace T6
{ {
class AssetDumperSlug final : public AbstractAssetDumper<T6::Slug> class AssetDumperSlug final : public AbstractAssetDumper<Slug>
{ {
protected: protected:
bool ShouldDump(T6::Slug* asset) override; bool ShouldDump(XAssetInfo<Slug>* asset) override;
std::string GetFileNameForAsset(Zone* zone, T6::Slug* asset) override; std::string GetFileNameForAsset(Zone* zone, XAssetInfo<Slug>* asset) override;
void DumpAsset(Zone* zone, T6::Slug* asset, FileAPI::File* out) override; void DumpAsset(Zone* zone, XAssetInfo<Slug>* asset, FileAPI::File* out) override;
}; };
} }

View File

@ -4,25 +4,26 @@
using namespace T6; using namespace T6;
bool AssetDumperStringTable::ShouldDump(StringTable* asset) bool AssetDumperStringTable::ShouldDump(XAssetInfo<StringTable>* asset)
{ {
return true; 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); 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); csv.WriteColumn(cell->string);
} }

View File

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