mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-10-24 04:28:10 +00:00
97 lines
2.4 KiB
C++
97 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include "IGame.h"
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
/*
|
|
* A game variant is a specific game version or platform files are created for.
|
|
* This determines the layout of the structs, endianness/wordsize in the zone and informs about the target platform.
|
|
*/
|
|
enum class GameVariantId : std::uint8_t
|
|
{
|
|
IW3_PC,
|
|
IW3_XBOX,
|
|
IW4_PC32,
|
|
IW4_PC64,
|
|
IW4_XBOX,
|
|
IW5_PC32,
|
|
IW5_PC64,
|
|
IW5_XBOX,
|
|
QOS_PC,
|
|
T4_PC,
|
|
T5_PC,
|
|
T6_PC,
|
|
T6_XBOX,
|
|
T6_PS3,
|
|
T6_WIIU,
|
|
|
|
COUNT
|
|
};
|
|
|
|
// 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
|
|
{
|
|
/* Little endian */
|
|
LE,
|
|
/* Big endian */
|
|
BE
|
|
};
|
|
|
|
enum class GameWordSize : std::uint8_t
|
|
{
|
|
ARCH_32,
|
|
ARCH_64
|
|
};
|
|
|
|
enum class GamePlatform : std::uint8_t
|
|
{
|
|
PC,
|
|
XBOX,
|
|
PS3,
|
|
WIIU
|
|
};
|
|
|
|
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;
|
|
|
|
static IGameVariant* GetVariantById(GameVariantId variantId);
|
|
|
|
[[nodiscard]] virtual GameVariantId GetId() const = 0;
|
|
[[nodiscard]] virtual GameId GetGameId() 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, GameId gameId, std::string name, GameEndianness endianness, GameWordSize wordSize, GamePlatform platform);
|
|
|
|
[[nodiscard]] GameVariantId GetId() const override;
|
|
[[nodiscard]] GameId GetGameId() 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;
|
|
GameId m_game_id;
|
|
std::string m_name;
|
|
GameEndianness m_endianness;
|
|
GameWordSize m_word_size;
|
|
GamePlatform m_platform;
|
|
};
|