diff --git a/src/Common/Game/IGame.cpp b/src/Common/Game/IGame.cpp index ad8827db..46ff44f2 100644 --- a/src/Common/Game/IGame.cpp +++ b/src/Common/Game/IGame.cpp @@ -5,6 +5,7 @@ #include "IW5/GameIW5.h" #include "T5/GameT5.h" #include "T6/GameT6.h" +#include "Utils/StringUtils.h" #include @@ -24,3 +25,71 @@ IGame* IGame::GetGameById(GameId gameId) return result; } + +AbstractGame::AbstractGame(const char* const* assetTypeNames, + const asset_type_t assetTypeCount, + const char* const* subAssetTypeNames, + const asset_type_t subAssetTypeCount) + : m_asset_type_names(assetTypeNames), + m_asset_type_count(assetTypeCount), + m_sub_asset_type_names(subAssetTypeNames), + m_sub_asset_type_count(subAssetTypeCount) +{ + for (asset_type_t assetType = 0; assetType < assetTypeCount; ++assetType) + { + assert(assetTypeNames[assetType] != nullptr); + AddAssetTypeNameAlias(assetType, assetTypeNames[assetType]); + } +} + +const std::vector& AbstractGame::GetLanguagePrefixes() const +{ + static std::vector prefixes; + return prefixes; +} + +asset_type_t AbstractGame::GetAssetTypeCount() const +{ + return m_asset_type_count; +} + +std::optional AbstractGame::GetAssetTypeName(const asset_type_t assetType) const +{ + if (assetType < m_asset_type_count) + return m_asset_type_names[assetType]; + + return std::nullopt; +} + +std::optional AbstractGame::FindAssetTypeByName(const std::string& potentialAssetTypeName) const +{ + std::string lowerCaseName = potentialAssetTypeName; + utils::MakeStringLowerCase(lowerCaseName); + + const auto existingAssetType = m_asset_type_name_lookup.find(lowerCaseName); + if (existingAssetType != m_asset_type_name_lookup.end()) + return existingAssetType->second; + + return std::nullopt; +} + +asset_type_t AbstractGame::GetSubAssetTypeCount() const +{ + return m_sub_asset_type_count; +} + +std::optional AbstractGame::GetSubAssetTypeName(const asset_type_t subAssetType) const +{ + if (subAssetType < m_sub_asset_type_count) + return m_sub_asset_type_names[subAssetType]; + + return std::nullopt; +} + +void AbstractGame::AddAssetTypeNameAlias(const asset_type_t assetType, const std::string& assetTypeName) +{ + std::string lowerCaseName = assetTypeName; + utils::MakeStringLowerCase(lowerCaseName); + + m_asset_type_name_lookup.emplace(lowerCaseName, assetType); +} diff --git a/src/Common/Game/IGame.h b/src/Common/Game/IGame.h index f938efa2..4d2b08ba 100644 --- a/src/Common/Game/IGame.h +++ b/src/Common/Game/IGame.h @@ -1,11 +1,13 @@ #pragma once #include "GameLanguage.h" +#include "IAsset.h" #include "Zone/ZoneTypes.h" #include #include #include +#include #include enum class GameId : std::uint8_t @@ -68,9 +70,42 @@ public: [[nodiscard]] virtual asset_type_t GetAssetTypeCount() const = 0; [[nodiscard]] virtual std::optional GetAssetTypeName(asset_type_t assetType) const = 0; + [[nodiscard]] virtual std::optional FindAssetTypeByName(const std::string& potentialAssetTypeName) const = 0; [[nodiscard]] virtual asset_type_t GetSubAssetTypeCount() const = 0; [[nodiscard]] virtual std::optional GetSubAssetTypeName(asset_type_t subAssetType) const = 0; static IGame* GetGameById(GameId gameId); }; + +class AbstractGame : public IGame +{ +public: + AbstractGame(const char* const* assetTypeNames, asset_type_t assetTypeCount, const char* const* subAssetTypeNames, asset_type_t subAssetTypeCount); + + [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; + + [[nodiscard]] asset_type_t GetAssetTypeCount() const override; + [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; + [[nodiscard]] std::optional FindAssetTypeByName(const std::string& potentialAssetTypeName) const override; + + [[nodiscard]] asset_type_t GetSubAssetTypeCount() const override; + [[nodiscard]] std::optional GetSubAssetTypeName(asset_type_t subAssetType) const override; + +protected: + template void AddAssetTypeNameAlias(const std::string& assetTypeName) + { + AddAssetTypeNameAlias(Asset_t::EnumEntry, assetTypeName); + } + +private: + void AddAssetTypeNameAlias(asset_type_t assetType, const std::string& assetTypeName); + + const char* const* m_asset_type_names; + asset_type_t m_asset_type_count; + + const char* const* m_sub_asset_type_names; + asset_type_t m_sub_asset_type_count; + + std::unordered_map m_asset_type_name_lookup; +}; diff --git a/src/Common/Game/IW3/GameIW3.cpp b/src/Common/Game/IW3/GameIW3.cpp index b14dda08..527f86ea 100644 --- a/src/Common/Game/IW3/GameIW3.cpp +++ b/src/Common/Game/IW3/GameIW3.cpp @@ -27,6 +27,13 @@ namespace namespace IW3 { + Game::Game() + : AbstractGame(ASSET_TYPE_NAMES, std::extent_v, SUB_ASSET_TYPE_NAMES, std::extent_v) + { + AddAssetTypeNameAlias("techset"); + AddAssetTypeNameAlias("gfxlightdef"); + } + GameId Game::GetId() const { return GameId::IW3; @@ -43,36 +50,4 @@ namespace IW3 static std::string shortName = "IW3"; return shortName; } - - const std::vector& Game::GetLanguagePrefixes() const - { - static std::vector prefixes; - return prefixes; - } - - asset_type_t Game::GetAssetTypeCount() const - { - return ASSET_TYPE_COUNT; - } - - std::optional Game::GetAssetTypeName(const asset_type_t assetType) const - { - if (assetType < std::extent_v) - return ASSET_TYPE_NAMES[assetType]; - - return std::nullopt; - } - - asset_type_t Game::GetSubAssetTypeCount() const - { - return SUB_ASSET_TYPE_COUNT; - } - - std::optional Game::GetSubAssetTypeName(const asset_type_t subAssetType) const - { - if (subAssetType < std::extent_v) - return SUB_ASSET_TYPE_NAMES[subAssetType]; - - return std::nullopt; - } } // namespace IW3 diff --git a/src/Common/Game/IW3/GameIW3.h b/src/Common/Game/IW3/GameIW3.h index 5e7cd5a3..0c238743 100644 --- a/src/Common/Game/IW3/GameIW3.h +++ b/src/Common/Game/IW3/GameIW3.h @@ -4,17 +4,13 @@ namespace IW3 { - class Game final : public IGame + class Game final : public AbstractGame { public: + Game(); + [[nodiscard]] GameId GetId() const override; [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; - [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; - - [[nodiscard]] asset_type_t GetAssetTypeCount() const override; - [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; - [[nodiscard]] asset_type_t GetSubAssetTypeCount() const override; - [[nodiscard]] std::optional GetSubAssetTypeName(asset_type_t subAssetType) const override; }; } // namespace IW3 diff --git a/src/Common/Game/IW4/GameIW4.cpp b/src/Common/Game/IW4/GameIW4.cpp index 88a05a2e..0b562457 100644 --- a/src/Common/Game/IW4/GameIW4.cpp +++ b/src/Common/Game/IW4/GameIW4.cpp @@ -29,6 +29,13 @@ namespace namespace IW4 { + Game::Game() + : AbstractGame(ASSET_TYPE_NAMES, std::extent_v, SUB_ASSET_TYPE_NAMES, std::extent_v) + { + AddAssetTypeNameAlias("techset"); + AddAssetTypeNameAlias("gfxlightdef"); + } + GameId Game::GetId() const { return GameId::IW4; @@ -45,36 +52,4 @@ namespace IW4 static std::string shortName = "IW4"; return shortName; } - - const std::vector& Game::GetLanguagePrefixes() const - { - static std::vector prefixes; - return prefixes; - } - - asset_type_t Game::GetAssetTypeCount() const - { - return ASSET_TYPE_COUNT; - } - - std::optional Game::GetAssetTypeName(const asset_type_t assetType) const - { - if (assetType < std::extent_v) - return ASSET_TYPE_NAMES[assetType]; - - return std::nullopt; - } - - asset_type_t Game::GetSubAssetTypeCount() const - { - return SUB_ASSET_TYPE_COUNT; - } - - std::optional Game::GetSubAssetTypeName(const asset_type_t subAssetType) const - { - if (subAssetType < std::extent_v) - return SUB_ASSET_TYPE_NAMES[subAssetType]; - - return std::nullopt; - } } // namespace IW4 diff --git a/src/Common/Game/IW4/GameIW4.h b/src/Common/Game/IW4/GameIW4.h index 5a2a269c..ae94a3be 100644 --- a/src/Common/Game/IW4/GameIW4.h +++ b/src/Common/Game/IW4/GameIW4.h @@ -1,19 +1,16 @@ #pragma once + #include "Game/IGame.h" namespace IW4 { - class Game final : public IGame + class Game final : public AbstractGame { public: + Game(); + [[nodiscard]] GameId GetId() const override; [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; - [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; - - [[nodiscard]] asset_type_t GetAssetTypeCount() const override; - [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; - [[nodiscard]] asset_type_t GetSubAssetTypeCount() const override; - [[nodiscard]] std::optional GetSubAssetTypeName(asset_type_t subAssetType) const override; }; } // namespace IW4 diff --git a/src/Common/Game/IW5/GameIW5.cpp b/src/Common/Game/IW5/GameIW5.cpp index 2a02dbb1..8b76c24c 100644 --- a/src/Common/Game/IW5/GameIW5.cpp +++ b/src/Common/Game/IW5/GameIW5.cpp @@ -66,6 +66,13 @@ namespace namespace IW5 { + Game::Game() + : AbstractGame(ASSET_TYPE_NAMES, std::extent_v, SUB_ASSET_TYPE_NAMES, std::extent_v) + { + AddAssetTypeNameAlias("techset"); + AddAssetTypeNameAlias("gfxlightdef"); + } + GameId Game::GetId() const { return GameId::IW5; @@ -82,36 +89,4 @@ namespace IW5 static std::string shortName = "IW5"; return shortName; } - - const std::vector& Game::GetLanguagePrefixes() const - { - static std::vector prefixes; - return prefixes; - } - - asset_type_t Game::GetAssetTypeCount() const - { - return ASSET_TYPE_COUNT; - } - - std::optional Game::GetAssetTypeName(const asset_type_t assetType) const - { - if (assetType < std::extent_v) - return ASSET_TYPE_NAMES[assetType]; - - return std::nullopt; - } - - asset_type_t Game::GetSubAssetTypeCount() const - { - return SUB_ASSET_TYPE_COUNT; - } - - std::optional Game::GetSubAssetTypeName(const asset_type_t subAssetType) const - { - if (subAssetType < std::extent_v) - return SUB_ASSET_TYPE_NAMES[subAssetType]; - - return std::nullopt; - } } // namespace IW5 diff --git a/src/Common/Game/IW5/GameIW5.h b/src/Common/Game/IW5/GameIW5.h index b6f67c04..73c9d765 100644 --- a/src/Common/Game/IW5/GameIW5.h +++ b/src/Common/Game/IW5/GameIW5.h @@ -1,19 +1,16 @@ #pragma once + #include "Game/IGame.h" namespace IW5 { - class Game final : public IGame + class Game final : public AbstractGame { public: + Game(); + [[nodiscard]] GameId GetId() const override; [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; - [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; - - [[nodiscard]] asset_type_t GetAssetTypeCount() const override; - [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; - [[nodiscard]] asset_type_t GetSubAssetTypeCount() const override; - [[nodiscard]] std::optional GetSubAssetTypeName(asset_type_t subAssetType) const override; }; } // namespace IW5 diff --git a/src/Common/Game/T5/GameT5.cpp b/src/Common/Game/T5/GameT5.cpp index c54e40a4..70c424cf 100644 --- a/src/Common/Game/T5/GameT5.cpp +++ b/src/Common/Game/T5/GameT5.cpp @@ -11,7 +11,7 @@ namespace constexpr const char* ASSET_TYPE_NAMES[]{ "xmodelpieces", "physpreset", "physconstraints", "destructibledef", "xanim", "xmodel", "material", "techniqueset", "image", "soundbank", "soundpatch", "clipmap_unused", "clipmap", "comworld", - "gameworldsp", "gameworldmp", "mapents", "gfxworld", "gfxlightdef", "uimap", "font", + "gameworldsp", "gameworldmp", "mapents", "gfxworld", "lightdef", "uimap", "font", "menulist", "menu", "localize", "weapon", "weapondef", "weaponvariant", "snddriverglobals", "fx", "fximpacttable", "aitype", "mptype", "mpbody", "mphead", "character", "xmodelalias", "rawfile", "stringtable", "packindex", "xglobals", "ddl", "glasses", @@ -30,6 +30,13 @@ namespace namespace T5 { + Game::Game() + : AbstractGame(ASSET_TYPE_NAMES, std::extent_v, SUB_ASSET_TYPE_NAMES, std::extent_v) + { + AddAssetTypeNameAlias("techset"); + AddAssetTypeNameAlias("gfxlightdef"); + } + GameId Game::GetId() const { return GameId::T5; @@ -67,30 +74,4 @@ namespace T5 return prefixes; } - - asset_type_t Game::GetAssetTypeCount() const - { - return ASSET_TYPE_COUNT; - } - - std::optional Game::GetAssetTypeName(const asset_type_t assetType) const - { - if (assetType < std::extent_v) - return ASSET_TYPE_NAMES[assetType]; - - return std::nullopt; - } - - asset_type_t Game::GetSubAssetTypeCount() const - { - return SUB_ASSET_TYPE_COUNT; - } - - std::optional Game::GetSubAssetTypeName(const asset_type_t subAssetType) const - { - if (subAssetType < std::extent_v) - return SUB_ASSET_TYPE_NAMES[subAssetType]; - - return std::nullopt; - } } // namespace T5 diff --git a/src/Common/Game/T5/GameT5.h b/src/Common/Game/T5/GameT5.h index 0a86bc70..80aff27c 100644 --- a/src/Common/Game/T5/GameT5.h +++ b/src/Common/Game/T5/GameT5.h @@ -1,19 +1,17 @@ #pragma once + #include "Game/IGame.h" namespace T5 { - class Game final : public IGame + class Game final : public AbstractGame { public: + Game(); + [[nodiscard]] GameId GetId() const override; [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; - - [[nodiscard]] asset_type_t GetAssetTypeCount() const override; - [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; - [[nodiscard]] asset_type_t GetSubAssetTypeCount() const override; - [[nodiscard]] std::optional GetSubAssetTypeName(asset_type_t subAssetType) const override; }; } // namespace T5 diff --git a/src/Common/Game/T6/GameT6.cpp b/src/Common/Game/T6/GameT6.cpp index 1a4b6435..e854a3ae 100644 --- a/src/Common/Game/T6/GameT6.cpp +++ b/src/Common/Game/T6/GameT6.cpp @@ -27,7 +27,7 @@ namespace "gameworldmp", "mapents", "gfxworld", - "gfxlightdef", + "lightdef", "uimap", "font", "fonticon", @@ -83,6 +83,13 @@ namespace namespace T6 { + Game::Game() + : AbstractGame(ASSET_TYPE_NAMES, std::extent_v, SUB_ASSET_TYPE_NAMES, std::extent_v) + { + AddAssetTypeNameAlias("techset"); + AddAssetTypeNameAlias("gfxlightdef"); + } + GameId Game::GetId() const { return GameId::T6; @@ -123,30 +130,4 @@ namespace T6 return prefixes; } - - asset_type_t Game::GetAssetTypeCount() const - { - return ASSET_TYPE_COUNT; - } - - std::optional Game::GetAssetTypeName(const asset_type_t assetType) const - { - if (assetType < std::extent_v) - return ASSET_TYPE_NAMES[assetType]; - - return std::nullopt; - } - - asset_type_t Game::GetSubAssetTypeCount() const - { - return SUB_ASSET_TYPE_COUNT; - } - - std::optional Game::GetSubAssetTypeName(const asset_type_t subAssetType) const - { - if (subAssetType < std::extent_v) - return SUB_ASSET_TYPE_NAMES[subAssetType]; - - return std::nullopt; - } } // namespace T6 diff --git a/src/Common/Game/T6/GameT6.h b/src/Common/Game/T6/GameT6.h index b8debcbf..2bcc9447 100644 --- a/src/Common/Game/T6/GameT6.h +++ b/src/Common/Game/T6/GameT6.h @@ -1,19 +1,17 @@ #pragma once + #include "Game/IGame.h" namespace T6 { - class Game final : public IGame + class Game final : public AbstractGame { public: + Game(); + [[nodiscard]] GameId GetId() const override; [[nodiscard]] const std::string& GetFullName() const override; [[nodiscard]] const std::string& GetShortName() const override; [[nodiscard]] const std::vector& GetLanguagePrefixes() const override; - - [[nodiscard]] asset_type_t GetAssetTypeCount() const override; - [[nodiscard]] std::optional GetAssetTypeName(asset_type_t assetType) const override; - [[nodiscard]] asset_type_t GetSubAssetTypeCount() const override; - [[nodiscard]] std::optional GetSubAssetTypeName(asset_type_t subAssetType) const override; }; } // namespace T6 diff --git a/src/Common/Zone/ZoneTypes.h b/src/Common/Zone/ZoneTypes.h index 46bf92ca..380ff1a1 100644 --- a/src/Common/Zone/ZoneTypes.h +++ b/src/Common/Zone/ZoneTypes.h @@ -1,4 +1,5 @@ #pragma once + #include #include diff --git a/src/Unlinking/Unlinker.cpp b/src/Unlinking/Unlinker.cpp index ecdd404d..79cc38ca 100644 --- a/src/Unlinking/Unlinker.cpp +++ b/src/Unlinking/Unlinker.cpp @@ -9,7 +9,6 @@ #include "UnlinkerArgs.h" #include "UnlinkerPaths.h" #include "Utils/Logging/Log.h" -#include "Zone/AssetNameResolver.h" #include "Zone/Definition/ZoneDefWriter.h" #include "ZoneLoading.h" @@ -105,11 +104,10 @@ namespace ObjWriting::Configuration.AssetTypesToHandleBitfield = std::vector(assetTypeCount, initialValue); std::vector handledSpecifiedAssets(m_args.m_specified_asset_types.size()); - const AssetNameResolver assetNameResolver(gameId); auto anySpecifiedValueInvalid = false; for (const auto& specifiedValue : m_args.m_specified_asset_types) { - const auto maybeAssetType = assetNameResolver.GetAssetTypeByName(specifiedValue); + const auto maybeAssetType = game->FindAssetTypeByName(specifiedValue); if (!maybeAssetType) { con::error("Unknown asset type \"{}\"", specifiedValue); diff --git a/src/ZoneCommon/Zone/AssetList/AssetListReader.cpp b/src/ZoneCommon/Zone/AssetList/AssetListReader.cpp index 67b13018..7c668ba7 100644 --- a/src/ZoneCommon/Zone/AssetList/AssetListReader.cpp +++ b/src/ZoneCommon/Zone/AssetList/AssetListReader.cpp @@ -3,7 +3,6 @@ #include "Csv/CsvStream.h" #include "Game/IGame.h" #include "Utils/Logging/Log.h" -#include "Zone/AssetNameResolver.h" #include @@ -12,9 +11,9 @@ namespace class AssetListInputStream { public: - AssetListInputStream(std::istream& stream, const GameId game) + AssetListInputStream(std::istream& stream, const GameId gameId) : m_stream(stream), - m_asset_name_resolver(game) + m_game(*IGame::GetGameById(gameId)) { } @@ -33,7 +32,7 @@ namespace continue; const auto& typeName = row[0]; - const auto maybeType = m_asset_name_resolver.GetAssetTypeByName(typeName); + const auto maybeType = m_game.FindAssetTypeByName(typeName); if (!maybeType) { con::error("Unknown asset type name \"{}\"", typeName); @@ -60,7 +59,7 @@ namespace private: CsvInputStream m_stream; - AssetNameResolver m_asset_name_resolver; + IGame& m_game; }; } // namespace diff --git a/src/ZoneCommon/Zone/AssetNameResolver.cpp b/src/ZoneCommon/Zone/AssetNameResolver.cpp deleted file mode 100644 index 375705d3..00000000 --- a/src/ZoneCommon/Zone/AssetNameResolver.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "AssetNameResolver.h" - -#include "Utils/StringUtils.h" - -#include - -AssetNameResolver::AssetNameResolver(const GameId gameId) -{ - const auto* game = IGame::GetGameById(gameId); - const auto assetTypeCount = game->GetAssetTypeCount(); - - for (asset_type_t assetType = 0; assetType < assetTypeCount; assetType++) - { - auto maybeAssetTypeName = game->GetAssetTypeName(assetType); - assert(maybeAssetTypeName); - if (!maybeAssetTypeName) - continue; - - std::string lowerCaseName(*maybeAssetTypeName); - utils::MakeStringLowerCase(lowerCaseName); - m_asset_types_by_name.emplace(lowerCaseName, assetType); - } -} - -std::optional AssetNameResolver::GetAssetTypeByName(const std::string& assetTypeName) const -{ - std::string lowerCaseName = assetTypeName; - utils::MakeStringLowerCase(lowerCaseName); - - const auto existingAssetType = m_asset_types_by_name.find(assetTypeName); - if (existingAssetType != m_asset_types_by_name.end()) - return existingAssetType->second; - - return std::nullopt; -} diff --git a/src/ZoneCommon/Zone/AssetNameResolver.h b/src/ZoneCommon/Zone/AssetNameResolver.h deleted file mode 100644 index c05cac23..00000000 --- a/src/ZoneCommon/Zone/AssetNameResolver.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include "Game/IGame.h" -#include "Zone/ZoneTypes.h" - -#include -#include -#include - -class AssetNameResolver -{ -public: - AssetNameResolver() = default; - explicit AssetNameResolver(GameId gameId); - - [[nodiscard]] std::optional GetAssetTypeByName(const std::string& assetTypeName) const; - -private: - std::unordered_map m_asset_types_by_name; -}; diff --git a/src/ZoneCommon/Zone/Definition/Parsing/Sequence/SequenceZoneDefinitionEntry.cpp b/src/ZoneCommon/Zone/Definition/Parsing/Sequence/SequenceZoneDefinitionEntry.cpp index f7504622..03692904 100644 --- a/src/ZoneCommon/Zone/Definition/Parsing/Sequence/SequenceZoneDefinitionEntry.cpp +++ b/src/ZoneCommon/Zone/Definition/Parsing/Sequence/SequenceZoneDefinitionEntry.cpp @@ -23,7 +23,12 @@ void SequenceZoneDefinitionEntry::ProcessMatch(ZoneDefinitionParserState* state, { const auto& typeNameToken = result.NextCapture(CAPTURE_TYPE_NAME); - const auto maybeAssetType = state->m_asset_name_resolver.GetAssetTypeByName(typeNameToken.FieldValue()); + const auto maybeAssetType = state->m_game.and_then( + [&typeNameToken](const IGame* game) + { + return game->FindAssetTypeByName(typeNameToken.FieldValue()); + }); + if (!maybeAssetType) throw ParsingException(typeNameToken.GetPos(), "Unknown asset type"); diff --git a/src/ZoneCommon/Zone/Definition/Parsing/ZoneDefinitionParserState.cpp b/src/ZoneCommon/Zone/Definition/Parsing/ZoneDefinitionParserState.cpp index aebaa182..c3e37460 100644 --- a/src/ZoneCommon/Zone/Definition/Parsing/ZoneDefinitionParserState.cpp +++ b/src/ZoneCommon/Zone/Definition/Parsing/ZoneDefinitionParserState.cpp @@ -12,10 +12,10 @@ ZoneDefinitionParserState::ZoneDefinitionParserState(std::string targetName, ISe m_definition->m_name = std::move(targetName); } -void ZoneDefinitionParserState::SetGame(const GameId game) +void ZoneDefinitionParserState::SetGame(const GameId gameId) { - m_definition->m_game = game; - m_asset_name_resolver = AssetNameResolver(game); + m_definition->m_game = gameId; + m_game = IGame::GetGameById(gameId); } namespace diff --git a/src/ZoneCommon/Zone/Definition/Parsing/ZoneDefinitionParserState.h b/src/ZoneCommon/Zone/Definition/Parsing/ZoneDefinitionParserState.h index aa872c22..3b938dd8 100644 --- a/src/ZoneCommon/Zone/Definition/Parsing/ZoneDefinitionParserState.h +++ b/src/ZoneCommon/Zone/Definition/Parsing/ZoneDefinitionParserState.h @@ -2,7 +2,6 @@ #include "Parsing/IParserLineStream.h" #include "SearchPath/ISearchPath.h" -#include "Zone/AssetNameResolver.h" #include "Zone/Definition/ZoneDefinition.h" #include @@ -15,7 +14,7 @@ class ZoneDefinitionParserState public: ZoneDefinitionParserState(std::string targetName, ISearchPath& searchPath, IParserLineStream& underlyingStream); - void SetGame(GameId game); + void SetGame(GameId gameId); void StartIPak(std::string ipakName); void StartIwd(std::string iwdName); @@ -26,7 +25,7 @@ public: IParserLineStream& m_underlying_stream; std::unordered_set m_inclusions; - AssetNameResolver m_asset_name_resolver; + std::optional m_game; std::optional m_current_ipak; std::optional m_current_iwd;