mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-07-05 02:31:55 +00:00
Restructure ZoneDefinitionWriting
This commit is contained in:
@ -1,70 +1,45 @@
|
||||
#include "ZoneDefWriterIW4.h"
|
||||
#include "Game/IW4/GameIW4.h"
|
||||
#include "Game/IW4/CommonIW4.h"
|
||||
#include "Game/IW4/GameAssetPoolIW4.h"
|
||||
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <cassert>
|
||||
|
||||
#include "Game/IW4/GameIW4.h"
|
||||
#include "Game/IW4/GameAssetPoolIW4.h"
|
||||
|
||||
using namespace IW4;
|
||||
|
||||
namespace IW4
|
||||
{
|
||||
class ZoneDefWriterInternal final : public AbstractZoneDefWriter
|
||||
{
|
||||
void WriteContent() const
|
||||
{
|
||||
const auto* pools = dynamic_cast<GameAssetPoolIW4*>(m_zone->m_pools.get());
|
||||
|
||||
assert(pools);
|
||||
if (!pools)
|
||||
return;
|
||||
|
||||
// Localized strings are all collected in one string file. So only add this to the zone file.
|
||||
if (!pools->m_localize->m_asset_lookup.empty())
|
||||
{
|
||||
WriteEntry(pools->GetAssetTypeName(ASSET_TYPE_LOCALIZE_ENTRY), m_zone->m_name);
|
||||
}
|
||||
|
||||
for (const auto& asset : *pools)
|
||||
{
|
||||
switch (asset->m_type)
|
||||
{
|
||||
case ASSET_TYPE_LOCALIZE_ENTRY:
|
||||
break;
|
||||
|
||||
default:
|
||||
WriteEntry(pools->GetAssetTypeName(asset->m_type), asset->m_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
ZoneDefWriterInternal(Zone* zone, std::ostream& stream)
|
||||
: AbstractZoneDefWriter(zone, stream)
|
||||
{
|
||||
}
|
||||
|
||||
void WriteZoneDef() override
|
||||
{
|
||||
WriteComment("Call Of Duty: Modern Warfare 2");
|
||||
WriteMetaData(META_DATA_KEY_GAME, "iw4");
|
||||
EmptyLine();
|
||||
|
||||
WriteContent();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
bool ZoneDefWriter::CanHandleZone(Zone* zone) const
|
||||
{
|
||||
return zone->m_game == &g_GameIW4;
|
||||
}
|
||||
|
||||
void ZoneDefWriter::WriteZoneDef(Zone* zone, std::ostream& stream) const
|
||||
void ZoneDefWriter::WriteMetaData(ZoneDefinitionOutputStream& stream, Zone* zone) const
|
||||
{
|
||||
ZoneDefWriterInternal writer(zone, stream);
|
||||
writer.WriteZoneDef();
|
||||
}
|
||||
|
||||
void ZoneDefWriter::WriteContent(ZoneDefinitionOutputStream& stream, Zone* zone) const
|
||||
{
|
||||
const auto* pools = dynamic_cast<GameAssetPoolIW4*>(zone->m_pools.get());
|
||||
|
||||
assert(pools);
|
||||
if (!pools)
|
||||
return;
|
||||
|
||||
// Localized strings are all collected in one string file. So only add this to the zone file.
|
||||
if (!pools->m_localize->m_asset_lookup.empty())
|
||||
{
|
||||
stream.WriteEntry(pools->GetAssetTypeName(ASSET_TYPE_LOCALIZE_ENTRY), zone->m_name);
|
||||
}
|
||||
|
||||
for (const auto& asset : *pools)
|
||||
{
|
||||
switch (asset->m_type)
|
||||
{
|
||||
case ASSET_TYPE_LOCALIZE_ENTRY:
|
||||
break;
|
||||
|
||||
default:
|
||||
stream.WriteEntry(pools->GetAssetTypeName(asset->m_type), asset->m_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,13 @@
|
||||
|
||||
namespace IW4
|
||||
{
|
||||
class ZoneDefWriter final : public IZoneDefWriter
|
||||
class ZoneDefWriter final : public AbstractZoneDefWriter
|
||||
{
|
||||
protected:
|
||||
void WriteMetaData(::ZoneDefinitionOutputStream& stream, ::Zone* zone) const override;
|
||||
void WriteContent(::ZoneDefinitionOutputStream& stream, ::Zone* zone) const override;
|
||||
|
||||
public:
|
||||
bool CanHandleZone(Zone* zone) const override;
|
||||
void WriteZoneDef(Zone* zone, std::ostream& stream) const override;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user