aboutsummaryrefslogtreecommitdiff
path: root/libs/lootcli/src/game_settings.h
blob: bc775c97335069bfc38d4838cd300676cb06d2b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#ifndef LOOT_GUI_STATE_GAME_GAME_SETTINGS
#define LOOT_GUI_STATE_GAME_GAME_SETTINGS

#include <filesystem>
#include <optional>
#include <set>
#include <string>
#include <vector>

#include "loot/enum/game_type.h"

namespace loot
{
constexpr inline std::string_view NEHRIM_STEAM_REGISTRY_KEY =
    "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App "
    "1014940\\InstallLocation";
static constexpr const char* DEFAULT_MASTERLIST_BRANCH = "v0.26";

enum struct GameId : uint8_t
{
  tes3,
  tes4,
  nehrim,
  tes5,
  enderal,
  tes5se,
  enderalse,
  tes5vr,
  fo3,
  fonv,
  fo4,
  fo4vr,
  starfield,
  openmw,
  oblivionRemastered
};

GameType GetGameType(const GameId gameId);

float GetMinimumHeaderVersion(const GameId gameId);

std::filesystem::path GetDataPath(const GameId gamiId,
                                  const std::filesystem::path& gamePath);

std::string ToString(const GameId gameId);

bool SupportsLightPlugins(const GameType gameType);

std::string GetMasterFilename(const GameId gameId);

std::string GetGameName(const GameId gameId);

std::string GetDefaultMasterlistRepositoryName(GameId gameId);

std::string GetDefaultMasterlistUrl(const std::string& repositoryName);
std::string GetDefaultMasterlistUrl(const GameId gameId);

class GameSettings
{
public:
  GameSettings() = default;
  explicit GameSettings(const GameId gameId, const std::string& lootFolder = "");

  bool operator==(const GameSettings& rhs) const;  // Compares names and folder names.

  GameId Id() const;
  GameType Type() const;
  std::string Name() const;  // Returns the game's name, eg. "TES IV: Oblivion".
  std::string FolderName() const;
  std::string Master() const;
  float MinimumHeaderVersion() const;
  std::string MasterlistSource() const;
  std::filesystem::path GamePath() const;
  std::filesystem::path GameLocalPath() const;
  std::filesystem::path DataPath() const;

  GameSettings& SetName(const std::string& name);
  GameSettings& SetMaster(const std::string& masterFile);
  GameSettings& SetMinimumHeaderVersion(float minimumHeaderVersion);
  GameSettings& SetMasterlistSource(const std::string& source);
  GameSettings& SetGamePath(const std::filesystem::path& path);
  GameSettings& SetGameLocalPath(const std::filesystem::path& GameLocalPath);
  GameSettings& SetGameLocalFolder(const std::string& folderName);

private:
  GameId id_{GameId::tes4};
  GameType type_{GameType::tes4};
  std::string name_;
  std::string masterFile_;
  float minimumHeaderVersion_{0.0f};

  std::string lootFolderName_;

  std::string masterlistSource_;

  std::filesystem::path gamePath_;  // Path to the game's folder.
  std::filesystem::path gameLocalPath_;
};
}  // namespace loot

#endif