mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 08:05:45 +00:00
Move unlinked gdt files to source_data and reference unlinked gdts in zone definition file
This commit is contained in:
parent
4f995751ce
commit
d9abf12b16
@ -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:
|
||||||
|
@ -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);
|
||||||
}
|
}
|
@ -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;
|
||||||
};
|
};
|
@ -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());
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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());
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user