mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-10-23 20:18:10 +00:00
chore: add game variants to IGame
This commit is contained in:
16 files changed
+189
No files matched your search
@@ -11,6 +11,40 @@
|
||||
|
||||
#include <cassert>
|
||||
|
||||
GameVariant::GameVariant(const GameVariantId id, std::string name, const GameEndianness endianness, const GameWordSize wordSize, const GamePlatform platform)
|
||||
: m_id(id),
|
||||
m_name(std::move(name)),
|
||||
m_endianness(endianness),
|
||||
m_word_size(wordSize),
|
||||
m_platform(platform)
|
||||
{
|
||||
}
|
||||
|
||||
GameVariantId GameVariant::GetId() const
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
|
||||
const std::string& GameVariant::GetName() const
|
||||
{
|
||||
return m_name;
|
||||
}
|
||||
|
||||
GameEndianness GameVariant::GetEndianness() const
|
||||
{
|
||||
return m_endianness;
|
||||
}
|
||||
|
||||
GameWordSize GameVariant::GetWordSize() const
|
||||
{
|
||||
return m_word_size;
|
||||
}
|
||||
|
||||
GamePlatform GameVariant::GetPlatform() const
|
||||
{
|
||||
return m_platform;
|
||||
}
|
||||
|
||||
IGame* IGame::GetGameById(GameId gameId)
|
||||
{
|
||||
static IGame* games[]{
|
||||
@@ -53,6 +87,15 @@ const std::vector<GameLanguagePrefix>& AbstractGame::GetLanguagePrefixes() const
|
||||
return prefixes;
|
||||
}
|
||||
|
||||
const IGameVariant* AbstractGame::GetVariantById(const GameVariantId id) const
|
||||
{
|
||||
const auto& variants = GetVariants();
|
||||
|
||||
assert(id < variants.size());
|
||||
|
||||
return variants[id];
|
||||
}
|
||||
|
||||
asset_type_t AbstractGame::GetAssetTypeCount() const
|
||||
{
|
||||
return m_asset_type_count;
|
||||
|
||||
@@ -23,6 +23,8 @@ enum class GameId : std::uint8_t
|
||||
COUNT
|
||||
};
|
||||
|
||||
typedef std::uint8_t GameVariantId;
|
||||
|
||||
// The full uppercase names are macros in the standard lib
|
||||
// So unfortunately not usable as values in the enum
|
||||
enum class GameEndianness : std::uint8_t
|
||||
@@ -58,6 +60,42 @@ static constexpr const char* GameId_Names[]{
|
||||
};
|
||||
static_assert(std::extent_v<decltype(GameId_Names)> == static_cast<unsigned>(GameId::COUNT));
|
||||
|
||||
class IGameVariant
|
||||
{
|
||||
public:
|
||||
IGameVariant() = default;
|
||||
virtual ~IGameVariant() = default;
|
||||
IGameVariant(const IGameVariant& other) = default;
|
||||
IGameVariant(IGameVariant&& other) noexcept = default;
|
||||
IGameVariant& operator=(const IGameVariant& other) = default;
|
||||
IGameVariant& operator=(IGameVariant&& other) noexcept = default;
|
||||
|
||||
[[nodiscard]] virtual GameVariantId GetId() const = 0;
|
||||
[[nodiscard]] virtual const std::string& GetName() const = 0;
|
||||
[[nodiscard]] virtual GameEndianness GetEndianness() const = 0;
|
||||
[[nodiscard]] virtual GameWordSize GetWordSize() const = 0;
|
||||
[[nodiscard]] virtual GamePlatform GetPlatform() const = 0;
|
||||
};
|
||||
|
||||
class GameVariant : public IGameVariant
|
||||
{
|
||||
public:
|
||||
GameVariant(GameVariantId id, std::string name, GameEndianness endianness, GameWordSize wordSize, GamePlatform platform);
|
||||
|
||||
[[nodiscard]] GameVariantId GetId() const override;
|
||||
[[nodiscard]] const std::string& GetName() const override;
|
||||
[[nodiscard]] GameEndianness GetEndianness() const override;
|
||||
[[nodiscard]] GameWordSize GetWordSize() const override;
|
||||
[[nodiscard]] GamePlatform GetPlatform() const override;
|
||||
|
||||
private:
|
||||
GameVariantId m_id;
|
||||
std::string m_name;
|
||||
GameEndianness m_endianness;
|
||||
GameWordSize m_word_size;
|
||||
GamePlatform m_platform;
|
||||
};
|
||||
|
||||
class IGame
|
||||
{
|
||||
public:
|
||||
@@ -73,6 +111,9 @@ public:
|
||||
[[nodiscard]] virtual const std::string& GetShortName() const = 0;
|
||||
[[nodiscard]] virtual const std::vector<GameLanguagePrefix>& GetLanguagePrefixes() const = 0;
|
||||
|
||||
[[nodiscard]] virtual const IGameVariant* GetVariantById(GameVariantId id) const = 0;
|
||||
[[nodiscard]] virtual const std::vector<IGameVariant*>& GetVariants() const = 0;
|
||||
|
||||
[[nodiscard]] virtual asset_type_t GetAssetTypeCount() const = 0;
|
||||
[[nodiscard]] virtual std::optional<const char*> GetAssetTypeName(asset_type_t assetType) const = 0;
|
||||
[[nodiscard]] virtual std::optional<asset_type_t> FindAssetTypeByName(const std::string& potentialAssetTypeName) const = 0;
|
||||
@@ -90,6 +131,8 @@ public:
|
||||
|
||||
[[nodiscard]] const std::vector<GameLanguagePrefix>& GetLanguagePrefixes() const override;
|
||||
|
||||
[[nodiscard]] const IGameVariant* GetVariantById(GameVariantId id) const override;
|
||||
|
||||
[[nodiscard]] asset_type_t GetAssetTypeCount() const override;
|
||||
[[nodiscard]] std::optional<const char*> GetAssetTypeName(asset_type_t assetType) const override;
|
||||
[[nodiscard]] std::optional<asset_type_t> FindAssetTypeByName(const std::string& potentialAssetTypeName) const override;
|
||||
|
||||
@@ -51,4 +51,12 @@ namespace IW3
|
||||
static std::string shortName = "IW3";
|
||||
return shortName;
|
||||
}
|
||||
|
||||
const std::vector<IGameVariant*>& Game::GetVariants() const
|
||||
{
|
||||
static std::vector<IGameVariant*> variants = {
|
||||
new GameVariant(std::to_underlying(VariantId::PC), "pc", GameEndianness::LE, GameWordSize::ARCH_32, GamePlatform::PC),
|
||||
};
|
||||
return variants;
|
||||
}
|
||||
} // namespace IW3
|
||||
@@ -4,6 +4,11 @@
|
||||
|
||||
namespace IW3
|
||||
{
|
||||
enum class VariantId : std::uint8_t
|
||||
{
|
||||
PC,
|
||||
};
|
||||
|
||||
class Game final : public AbstractGame
|
||||
{
|
||||
public:
|
||||
@@ -12,5 +17,6 @@ namespace IW3
|
||||
[[nodiscard]] GameId GetId() const override;
|
||||
[[nodiscard]] const std::string& GetFullName() const override;
|
||||
[[nodiscard]] const std::string& GetShortName() const override;
|
||||
[[nodiscard]] const std::vector<IGameVariant*>& GetVariants() const override;
|
||||
};
|
||||
} // namespace IW3
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "IW4.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <utility>
|
||||
|
||||
using namespace IW4;
|
||||
|
||||
@@ -53,4 +54,13 @@ namespace IW4
|
||||
static std::string shortName = "IW4";
|
||||
return shortName;
|
||||
}
|
||||
|
||||
const std::vector<IGameVariant*>& Game::GetVariants() const
|
||||
{
|
||||
static std::vector<IGameVariant*> variants = {
|
||||
new GameVariant(std::to_underlying(VariantId::PC32), "pc32", GameEndianness::LE, GameWordSize::ARCH_32, GamePlatform::PC),
|
||||
new GameVariant(std::to_underlying(VariantId::PC32), "pc64", GameEndianness::LE, GameWordSize::ARCH_64, GamePlatform::PC),
|
||||
};
|
||||
return variants;
|
||||
}
|
||||
} // namespace IW4
|
||||
@@ -4,6 +4,12 @@
|
||||
|
||||
namespace IW4
|
||||
{
|
||||
enum class VariantId : std::uint8_t
|
||||
{
|
||||
PC32,
|
||||
PC64,
|
||||
};
|
||||
|
||||
class Game final : public AbstractGame
|
||||
{
|
||||
public:
|
||||
@@ -12,5 +18,6 @@ namespace IW4
|
||||
[[nodiscard]] GameId GetId() const override;
|
||||
[[nodiscard]] const std::string& GetFullName() const override;
|
||||
[[nodiscard]] const std::string& GetShortName() const override;
|
||||
[[nodiscard]] const std::vector<IGameVariant*>& GetVariants() const override;
|
||||
};
|
||||
} // namespace IW4
|
||||
@@ -90,4 +90,13 @@ namespace IW5
|
||||
static std::string shortName = "IW5";
|
||||
return shortName;
|
||||
}
|
||||
|
||||
const std::vector<IGameVariant*>& Game::GetVariants() const
|
||||
{
|
||||
static std::vector<IGameVariant*> variants = {
|
||||
new GameVariant(std::to_underlying(VariantId::PC32), "pc32", GameEndianness::LE, GameWordSize::ARCH_32, GamePlatform::PC),
|
||||
new GameVariant(std::to_underlying(VariantId::PC32), "pc64", GameEndianness::LE, GameWordSize::ARCH_64, GamePlatform::PC),
|
||||
};
|
||||
return variants;
|
||||
}
|
||||
} // namespace IW5
|
||||
@@ -4,6 +4,12 @@
|
||||
|
||||
namespace IW5
|
||||
{
|
||||
enum class VariantId : std::uint8_t
|
||||
{
|
||||
PC32,
|
||||
PC64,
|
||||
};
|
||||
|
||||
class Game final : public AbstractGame
|
||||
{
|
||||
public:
|
||||
@@ -12,5 +18,6 @@ namespace IW5
|
||||
[[nodiscard]] GameId GetId() const override;
|
||||
[[nodiscard]] const std::string& GetFullName() const override;
|
||||
[[nodiscard]] const std::string& GetShortName() const override;
|
||||
[[nodiscard]] const std::vector<IGameVariant*>& GetVariants() const override;
|
||||
};
|
||||
} // namespace IW5
|
||||
@@ -85,4 +85,12 @@ namespace QOS
|
||||
static std::string shortName = "QOS";
|
||||
return shortName;
|
||||
}
|
||||
|
||||
const std::vector<IGameVariant*>& Game::GetVariants() const
|
||||
{
|
||||
static std::vector<IGameVariant*> variants = {
|
||||
new GameVariant(std::to_underlying(VariantId::PC), "pc", GameEndianness::LE, GameWordSize::ARCH_32, GamePlatform::PC),
|
||||
};
|
||||
return variants;
|
||||
}
|
||||
} // namespace QOS
|
||||
@@ -4,6 +4,11 @@
|
||||
|
||||
namespace QOS
|
||||
{
|
||||
enum class VariantId : std::uint8_t
|
||||
{
|
||||
PC,
|
||||
};
|
||||
|
||||
class Game final : public AbstractGame
|
||||
{
|
||||
public:
|
||||
@@ -12,5 +17,6 @@ namespace QOS
|
||||
[[nodiscard]] GameId GetId() const override;
|
||||
[[nodiscard]] const std::string& GetFullName() const override;
|
||||
[[nodiscard]] const std::string& GetShortName() const override;
|
||||
[[nodiscard]] const std::vector<IGameVariant*>& GetVariants() const override;
|
||||
};
|
||||
} // namespace QOS
|
||||
@@ -92,4 +92,12 @@ namespace T4
|
||||
static std::string shortName = "T4";
|
||||
return shortName;
|
||||
}
|
||||
|
||||
const std::vector<IGameVariant*>& Game::GetVariants() const
|
||||
{
|
||||
static std::vector<IGameVariant*> variants = {
|
||||
new GameVariant(std::to_underlying(VariantId::PC), "pc", GameEndianness::LE, GameWordSize::ARCH_32, GamePlatform::PC),
|
||||
};
|
||||
return variants;
|
||||
}
|
||||
} // namespace T4
|
||||
@@ -4,6 +4,11 @@
|
||||
|
||||
namespace T4
|
||||
{
|
||||
enum class VariantId : std::uint8_t
|
||||
{
|
||||
PC,
|
||||
};
|
||||
|
||||
class Game final : public AbstractGame
|
||||
{
|
||||
public:
|
||||
@@ -12,5 +17,6 @@ namespace T4
|
||||
[[nodiscard]] GameId GetId() const override;
|
||||
[[nodiscard]] const std::string& GetFullName() const override;
|
||||
[[nodiscard]] const std::string& GetShortName() const override;
|
||||
[[nodiscard]] const std::vector<IGameVariant*>& GetVariants() const override;
|
||||
};
|
||||
} // namespace T4
|
||||
@@ -76,4 +76,12 @@ namespace T5
|
||||
|
||||
return prefixes;
|
||||
}
|
||||
|
||||
const std::vector<IGameVariant*>& Game::GetVariants() const
|
||||
{
|
||||
static std::vector<IGameVariant*> variants = {
|
||||
new GameVariant(std::to_underlying(VariantId::PC), "pc", GameEndianness::LE, GameWordSize::ARCH_32, GamePlatform::PC),
|
||||
};
|
||||
return variants;
|
||||
}
|
||||
} // namespace T5
|
||||
@@ -4,6 +4,11 @@
|
||||
|
||||
namespace T5
|
||||
{
|
||||
enum class VariantId : std::uint8_t
|
||||
{
|
||||
PC,
|
||||
};
|
||||
|
||||
class Game final : public AbstractGame
|
||||
{
|
||||
public:
|
||||
@@ -13,5 +18,6 @@ namespace T5
|
||||
[[nodiscard]] const std::string& GetFullName() const override;
|
||||
[[nodiscard]] const std::string& GetShortName() const override;
|
||||
[[nodiscard]] const std::vector<GameLanguagePrefix>& GetLanguagePrefixes() const override;
|
||||
[[nodiscard]] const std::vector<IGameVariant*>& GetVariants() const override;
|
||||
};
|
||||
} // namespace T5
|
||||
@@ -132,4 +132,12 @@ namespace T6
|
||||
|
||||
return prefixes;
|
||||
}
|
||||
|
||||
const std::vector<IGameVariant*>& Game::GetVariants() const
|
||||
{
|
||||
static std::vector<IGameVariant*> variants = {
|
||||
new GameVariant(std::to_underlying(VariantId::PC), "pc", GameEndianness::LE, GameWordSize::ARCH_32, GamePlatform::PC),
|
||||
};
|
||||
return variants;
|
||||
}
|
||||
} // namespace T6
|
||||
@@ -4,6 +4,11 @@
|
||||
|
||||
namespace T6
|
||||
{
|
||||
enum class VariantId : std::uint8_t
|
||||
{
|
||||
PC,
|
||||
};
|
||||
|
||||
class Game final : public AbstractGame
|
||||
{
|
||||
public:
|
||||
@@ -13,5 +18,6 @@ namespace T6
|
||||
[[nodiscard]] const std::string& GetFullName() const override;
|
||||
[[nodiscard]] const std::string& GetShortName() const override;
|
||||
[[nodiscard]] const std::vector<GameLanguagePrefix>& GetLanguagePrefixes() const override;
|
||||
[[nodiscard]] const std::vector<IGameVariant*>& GetVariants() const override;
|
||||
};
|
||||
} // namespace T6
|
||||
Reference in new issue
Block a user