Move unlinked gdt files to source_data and reference unlinked gdts in zone definition file

This commit is contained in:
Jan 2021-03-28 10:20:24 +02:00
parent 4f995751ce
commit d9abf12b16
8 changed files with 34 additions and 22 deletions

View File

@ -17,7 +17,7 @@ public:
static constexpr const char* DEFAULT_BASE_FOLDER_MOD_TOOLS = ".."; static constexpr const char* DEFAULT_BASE_FOLDER_MOD_TOOLS = "..";
static constexpr const char* DEFAULT_OUTPUT_FOLDER = "?base?/zone_out/?zone?"; static constexpr const char* DEFAULT_OUTPUT_FOLDER = "?base?/zone_out/?zone?";
static constexpr const char* DEFAULT_ASSET_SEARCH_PATH = "?base?/raw;?base?/zone_raw/?zone?"; static constexpr const char* DEFAULT_ASSET_SEARCH_PATH = "?base?/raw;?base?/zone_raw/?zone?";
static constexpr const char* DEFAULT_GDT_SEARCH_PATH = "?base?/source_data"; static constexpr const char* DEFAULT_GDT_SEARCH_PATH = "?base?/source_data;?base?/zone_raw/?zone?/source_data";
static constexpr const char* DEFAULT_SOURCE_SEARCH_PATH = "?base?/zone_source;?base?/zone_raw/?zone?/zone_source"; static constexpr const char* DEFAULT_SOURCE_SEARCH_PATH = "?base?/zone_source;?base?/zone_raw/?zone?/zone_source";
private: private:

View File

@ -1,6 +1,6 @@
#include "ZoneDefWriter.h" #include "ZoneDefWriter.h"
void AbstractZoneDefWriter::WriteZoneDef(std::ostream& stream, Zone* zone) const void AbstractZoneDefWriter::WriteZoneDef(std::ostream& stream, const UnlinkerArgs* args, Zone* zone) const
{ {
ZoneDefinitionOutputStream out(stream); ZoneDefinitionOutputStream out(stream);
@ -8,6 +8,13 @@ void AbstractZoneDefWriter::WriteZoneDef(std::ostream& stream, Zone* zone) const
out.WriteMetaData(META_DATA_KEY_GAME, zone->m_game->GetShortName()); out.WriteMetaData(META_DATA_KEY_GAME, zone->m_game->GetShortName());
out.EmptyLine(); out.EmptyLine();
WriteMetaData(out, zone); if(args->m_use_gdt)
WriteContent(out, zone); {
out.WriteComment("Load asset gdt files");
out.WriteMetaData(META_DATA_KEY_GDT, zone->m_name);
out.EmptyLine();
}
WriteMetaData(out, args, zone);
WriteContent(out, args, zone);
} }

View File

@ -1,5 +1,6 @@
#pragma once #pragma once
#include "UnlinkerArgs.h"
#include "Zone/Zone.h" #include "Zone/Zone.h"
#include "Zone/Definition/ZoneDefinitionStream.h" #include "Zone/Definition/ZoneDefinitionStream.h"
@ -14,17 +15,18 @@ public:
IZoneDefWriter& operator=(IZoneDefWriter&& other) noexcept = default; IZoneDefWriter& operator=(IZoneDefWriter&& other) noexcept = default;
virtual bool CanHandleZone(Zone* zone) const = 0; virtual bool CanHandleZone(Zone* zone) const = 0;
virtual void WriteZoneDef(std::ostream& stream, Zone* zone) const = 0; virtual void WriteZoneDef(std::ostream& stream, const UnlinkerArgs* args, Zone* zone) const = 0;
}; };
class AbstractZoneDefWriter : public IZoneDefWriter class AbstractZoneDefWriter : public IZoneDefWriter
{ {
protected: protected:
static constexpr const char* META_DATA_KEY_GAME = "game"; static constexpr const char* META_DATA_KEY_GAME = "game";
static constexpr const char* META_DATA_KEY_GDT = "gdt";
virtual void WriteMetaData(ZoneDefinitionOutputStream& stream, Zone* zone) const = 0; virtual void WriteMetaData(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const = 0;
virtual void WriteContent(ZoneDefinitionOutputStream& stream, Zone* zone) const = 0; virtual void WriteContent(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const = 0;
public: public:
void WriteZoneDef(std::ostream& stream, Zone* zone) const override; void WriteZoneDef(std::ostream& stream, const UnlinkerArgs* args, Zone* zone) const override;
}; };

View File

@ -12,11 +12,11 @@ bool ZoneDefWriter::CanHandleZone(Zone* zone) const
return zone->m_game == &g_GameIW4; return zone->m_game == &g_GameIW4;
} }
void ZoneDefWriter::WriteMetaData(ZoneDefinitionOutputStream& stream, Zone* zone) const void ZoneDefWriter::WriteMetaData(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const
{ {
} }
void ZoneDefWriter::WriteContent(ZoneDefinitionOutputStream& stream, Zone* zone) const void ZoneDefWriter::WriteContent(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const
{ {
const auto* pools = dynamic_cast<GameAssetPoolIW4*>(zone->m_pools.get()); const auto* pools = dynamic_cast<GameAssetPoolIW4*>(zone->m_pools.get());

View File

@ -7,8 +7,8 @@ namespace IW4
class ZoneDefWriter final : public AbstractZoneDefWriter class ZoneDefWriter final : public AbstractZoneDefWriter
{ {
protected: protected:
void WriteMetaData(::ZoneDefinitionOutputStream& stream, ::Zone* zone) const override; void WriteMetaData(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const override;
void WriteContent(::ZoneDefinitionOutputStream& stream, ::Zone* zone) const override; void WriteContent(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const override;
public: public:
bool CanHandleZone(Zone* zone) const override; bool CanHandleZone(Zone* zone) const override;

View File

@ -54,10 +54,9 @@ void ZoneDefWriter::WriteKeyValuePair(ZoneDefinitionOutputStream& stream, KeyVal
stream.WriteMetaData(str.str(), kvp->value); stream.WriteMetaData(str.str(), kvp->value);
} }
void ZoneDefWriter::WriteMetaData(ZoneDefinitionOutputStream& stream, Zone* zone) const void ZoneDefWriter::WriteMetaData(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const
{ {
auto* assetPoolT6 = dynamic_cast<GameAssetPoolT6*>(zone->m_pools.get()); auto* assetPoolT6 = dynamic_cast<GameAssetPoolT6*>(zone->m_pools.get());
if (assetPoolT6 && !assetPoolT6->m_key_value_pairs->m_asset_lookup.empty()) if (assetPoolT6 && !assetPoolT6->m_key_value_pairs->m_asset_lookup.empty())
{ {
for (const auto* kvpAsset : *assetPoolT6->m_key_value_pairs) for (const auto* kvpAsset : *assetPoolT6->m_key_value_pairs)
@ -73,7 +72,7 @@ void ZoneDefWriter::WriteMetaData(ZoneDefinitionOutputStream& stream, Zone* zone
} }
} }
void ZoneDefWriter::WriteContent(ZoneDefinitionOutputStream& stream, Zone* zone) const void ZoneDefWriter::WriteContent(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const
{ {
const auto* pools = dynamic_cast<GameAssetPoolT6*>(zone->m_pools.get()); const auto* pools = dynamic_cast<GameAssetPoolT6*>(zone->m_pools.get());

View File

@ -10,8 +10,8 @@ namespace T6
static void WriteKeyValuePair(ZoneDefinitionOutputStream& stream, KeyValuePair* kvp); static void WriteKeyValuePair(ZoneDefinitionOutputStream& stream, KeyValuePair* kvp);
protected: protected:
void WriteMetaData(ZoneDefinitionOutputStream& stream, Zone* zone) const override; void WriteMetaData(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const override;
void WriteContent(ZoneDefinitionOutputStream& stream, Zone* zone) const override; void WriteContent(ZoneDefinitionOutputStream& stream, const UnlinkerArgs* args, Zone* zone) const override;
public: public:
bool CanHandleZone(Zone* zone) const override; bool CanHandleZone(Zone* zone) const override;

View File

@ -152,7 +152,7 @@ class Unlinker::Impl
return true; return true;
} }
static bool WriteZoneDefinitionFile(Zone* zone, const fs::path& zoneDefinitionFileFolder) bool WriteZoneDefinitionFile(Zone* zone, const fs::path& zoneDefinitionFileFolder) const
{ {
auto zoneDefinitionFilePath(zoneDefinitionFileFolder); auto zoneDefinitionFilePath(zoneDefinitionFileFolder);
zoneDefinitionFilePath.append(zone->m_name); zoneDefinitionFilePath.append(zone->m_name);
@ -170,7 +170,7 @@ class Unlinker::Impl
{ {
if (zoneDefWriter->CanHandleZone(zone)) if (zoneDefWriter->CanHandleZone(zone))
{ {
zoneDefWriter->WriteZoneDef(zoneDefinitionFile, zone); zoneDefWriter->WriteZoneDef(zoneDefinitionFile, &m_args, zone);
result = true; result = true;
break; break;
} }
@ -185,9 +185,13 @@ class Unlinker::Impl
return result; return result;
} }
static bool OpenGdtFile(Zone* zone, const fs::path& zoneDefinitionFileFolder, std::ofstream& stream) static bool OpenGdtFile(Zone* zone, const fs::path& outputFolder, std::ofstream& stream)
{ {
auto gdtFilePath(zoneDefinitionFileFolder); auto gdtFilePath(outputFolder);
gdtFilePath.append("source_data");
fs::create_directories(gdtFilePath);
gdtFilePath.append(zone->m_name); gdtFilePath.append(zone->m_name);
gdtFilePath.replace_extension(".gdt"); gdtFilePath.replace_extension(".gdt");
@ -232,7 +236,7 @@ class Unlinker::Impl
if (m_args.m_use_gdt) if (m_args.m_use_gdt)
{ {
if (!OpenGdtFile(zone, zoneDefinitionFileFolder, gdtStream)) if (!OpenGdtFile(zone, outputFolderPath, gdtStream))
return false; return false;
auto gdt = std::make_unique<GdtOutputStream>(gdtStream); auto gdt = std::make_unique<GdtOutputStream>(gdtStream);
gdt->BeginStream(); gdt->BeginStream();