diff --git a/src/ObjCommon/ZBarrier/ZBarrierCommon.cpp b/src/ObjCommon/ZBarrier/ZBarrierCommon.cpp new file mode 100644 index 00000000..354ccaba --- /dev/null +++ b/src/ObjCommon/ZBarrier/ZBarrierCommon.cpp @@ -0,0 +1,11 @@ +#include "ZBarrierCommon.h" + +#include + +namespace z_barrier +{ + std::string GetFileNameForAssetName(const std::string& assetName) + { + return std::format("zbarrier/{}", assetName); + } +} // namespace z_barrier diff --git a/src/ObjCommon/ZBarrier/ZBarrierCommon.h b/src/ObjCommon/ZBarrier/ZBarrierCommon.h new file mode 100644 index 00000000..e647286c --- /dev/null +++ b/src/ObjCommon/ZBarrier/ZBarrierCommon.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +namespace z_barrier +{ + std::string GetFileNameForAssetName(const std::string& assetName); +} diff --git a/src/ObjLoading/Game/T6/ZBarrier/RawLoaderZBarrierT6.cpp b/src/ObjLoading/Game/T6/ZBarrier/RawLoaderZBarrierT6.cpp index 0a7d56d0..0d51eca5 100644 --- a/src/ObjLoading/Game/T6/ZBarrier/RawLoaderZBarrierT6.cpp +++ b/src/ObjLoading/Game/T6/ZBarrier/RawLoaderZBarrierT6.cpp @@ -4,12 +4,14 @@ #include "Game/T6/T6.h" #include "InfoString/InfoString.h" #include "InfoStringLoaderZBarrierT6.h" +#include "ZBarrier/ZBarrierCommon.h" #include #include #include using namespace T6; +using namespace ::z_barrier; namespace { @@ -24,7 +26,7 @@ namespace AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override { - const auto fileName = std::format("zbarrier/{}", assetName); + const auto fileName = GetFileNameForAssetName(assetName); const auto file = m_search_path.Open(fileName); if (!file.IsOpen()) return AssetCreationResult::NoAction(); diff --git a/src/ObjWriting/Game/T6/ObjWriterT6.cpp b/src/ObjWriting/Game/T6/ObjWriterT6.cpp index 00317cd7..3a3f05a8 100644 --- a/src/ObjWriting/Game/T6/ObjWriterT6.cpp +++ b/src/ObjWriting/Game/T6/ObjWriterT6.cpp @@ -25,7 +25,7 @@ #include "Weapon/AssetDumperWeaponAttachment.h" #include "Weapon/AssetDumperWeaponAttachmentUnique.h" #include "Weapon/AssetDumperWeaponCamo.h" -#include "ZBarrier/AssetDumperZBarrier.h" +#include "ZBarrier/ZBarrierDumperT6.h" using namespace T6; @@ -93,7 +93,7 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const DUMP_ASSET_POOL(slug::Dumper, m_slug, ASSET_TYPE_SLUG) // DUMP_ASSET_POOL(AssetDumperFootstepTableDef, m_footstep_table, ASSET_TYPE_FOOTSTEP_TABLE) // DUMP_ASSET_POOL(AssetDumperFootstepFXTableDef, m_footstep_fx_table, ASSET_TYPE_FOOTSTEPFX_TABLE) - DUMP_ASSET_POOL(AssetDumperZBarrier, m_zbarrier, ASSET_TYPE_ZBARRIER) + DUMP_ASSET_POOL(z_barrier::Dumper, m_zbarrier, ASSET_TYPE_ZBARRIER) return true; diff --git a/src/ObjWriting/Game/T6/ZBarrier/AssetDumperZBarrier.cpp b/src/ObjWriting/Game/T6/ZBarrier/AssetDumperZBarrier.cpp deleted file mode 100644 index da165648..00000000 --- a/src/ObjWriting/Game/T6/ZBarrier/AssetDumperZBarrier.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "AssetDumperZBarrier.h" - -#include "Game/T6/InfoString/InfoStringFromStructConverter.h" -#include "Game/T6/ObjConstantsT6.h" -#include "Game/T6/ZBarrier/ZBarrierFields.h" - -#include -#include - -using namespace T6; - -namespace T6 -{ - class InfoStringFromZBarrierConverter final : public InfoStringFromStructConverter - { - protected: - void FillFromExtensionField(const cspField_t& field) override - { - assert(false); - } - - public: - InfoStringFromZBarrierConverter(const ZBarrierDef* structure, - const cspField_t* fields, - const size_t fieldCount, - std::function scriptStringValueCallback) - : InfoStringFromStructConverter(structure, fields, fieldCount, std::move(scriptStringValueCallback)) - { - } - }; -} // namespace T6 - -InfoString AssetDumperZBarrier::CreateInfoString(XAssetInfo* asset) -{ - InfoStringFromZBarrierConverter converter(asset->Asset(), - zbarrier_fields, - std::extent_v, - [asset](const scr_string_t scrStr) -> std::string - { - assert(scrStr < asset->m_zone->m_script_strings.Count()); - if (scrStr >= asset->m_zone->m_script_strings.Count()) - return ""; - - return asset->m_zone->m_script_strings[scrStr]; - }); - - return converter.Convert(); -} - -bool AssetDumperZBarrier::ShouldDump(XAssetInfo* asset) -{ - return true; -} - -void AssetDumperZBarrier::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) -{ - // Only dump raw when no gdt available - if (context.m_gdt) - { - const auto infoString = CreateInfoString(asset); - GdtEntry gdtEntry(asset->m_name, ObjConstants::GDF_FILENAME_ZBARRIER); - infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_ZBARRIER, gdtEntry); - context.m_gdt->WriteEntry(gdtEntry); - } - else - { - const auto assetFile = context.OpenAssetFile("zbarrier/" + asset->m_name); - - if (!assetFile) - return; - - auto& stream = *assetFile; - const auto infoString = CreateInfoString(asset); - const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_ZBARRIER); - stream.write(stringValue.c_str(), stringValue.size()); - } -} diff --git a/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp new file mode 100644 index 00000000..23710e54 --- /dev/null +++ b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.cpp @@ -0,0 +1,82 @@ +#include "ZBarrierDumperT6.h" + +#include "Game/T6/InfoString/InfoStringFromStructConverter.h" +#include "Game/T6/ObjConstantsT6.h" +#include "Game/T6/ZBarrier/ZBarrierFields.h" +#include "ZBarrier/ZBarrierCommon.h" + +#include +#include + +using namespace T6; +using namespace ::z_barrier; + +namespace +{ + class InfoStringFromZBarrierConverter final : public InfoStringFromStructConverter + { + protected: + void FillFromExtensionField(const cspField_t& field) override + { + assert(false); + } + + public: + InfoStringFromZBarrierConverter(const ZBarrierDef* structure, + const cspField_t* fields, + const size_t fieldCount, + std::function scriptStringValueCallback) + : InfoStringFromStructConverter(structure, fields, fieldCount, std::move(scriptStringValueCallback)) + { + } + }; + + InfoString CreateInfoString(XAssetInfo* asset) + { + InfoStringFromZBarrierConverter converter(asset->Asset(), + zbarrier_fields, + std::extent_v, + [asset](const scr_string_t scrStr) -> std::string + { + assert(scrStr < asset->m_zone->m_script_strings.Count()); + if (scrStr >= asset->m_zone->m_script_strings.Count()) + return ""; + + return asset->m_zone->m_script_strings[scrStr]; + }); + + return converter.Convert(); + } +} // namespace + +namespace T6::z_barrier +{ + bool Dumper::ShouldDump(XAssetInfo* asset) + { + return true; + } + + void Dumper::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) + { + // Only dump raw when no gdt available + if (context.m_gdt) + { + const auto infoString = CreateInfoString(asset); + GdtEntry gdtEntry(asset->m_name, ObjConstants::GDF_FILENAME_ZBARRIER); + infoString.ToGdtProperties(ObjConstants::INFO_STRING_PREFIX_ZBARRIER, gdtEntry); + context.m_gdt->WriteEntry(gdtEntry); + } + else + { + const auto assetFile = context.OpenAssetFile(GetFileNameForAssetName(asset->m_name)); + + if (!assetFile) + return; + + auto& stream = *assetFile; + const auto infoString = CreateInfoString(asset); + const auto stringValue = infoString.ToString(ObjConstants::INFO_STRING_PREFIX_ZBARRIER); + stream.write(stringValue.c_str(), stringValue.size()); + } + } +} // namespace T6::z_barrier diff --git a/src/ObjWriting/Game/T6/ZBarrier/AssetDumperZBarrier.h b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.h similarity index 62% rename from src/ObjWriting/Game/T6/ZBarrier/AssetDumperZBarrier.h rename to src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.h index 0a2ba56d..efde331b 100644 --- a/src/ObjWriting/Game/T6/ZBarrier/AssetDumperZBarrier.h +++ b/src/ObjWriting/Game/T6/ZBarrier/ZBarrierDumperT6.h @@ -4,14 +4,12 @@ #include "Game/T6/T6.h" #include "InfoString/InfoString.h" -namespace T6 +namespace T6::z_barrier { - class AssetDumperZBarrier final : public AbstractAssetDumper + class Dumper final : public AbstractAssetDumper { - static InfoString CreateInfoString(XAssetInfo* asset); - protected: bool ShouldDump(XAssetInfo* asset) override; void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; }; -} // namespace T6 +} // namespace T6::z_barrier