xbmc
Cheevos.h
1 /*
2  * Copyright (C) 2020-2021 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "RConsoleIDs.h"
12 
13 #include <cstdint>
14 #include <map>
15 #include <string>
16 #include <unordered_map>
17 #include <vector>
18 
19 namespace KODI
20 {
21 namespace GAME
22 {
23 class CGameClient;
24 }
25 
26 namespace RETRO
27 {
28 class CCheevos
29 {
30 public:
31  CCheevos(GAME::CGameClient* gameClient,
32  const std::string& userName,
33  const std::string& loginToken);
34  void ResetRuntime();
35  void EnableRichPresence();
36  std::string GetRichPresenceEvaluation();
37 
38  void ActivateAchievement();
39  static void Callback_URL_ID(const char* achievementUrl, unsigned int cheevoId);
40  void CheckTriggeredAchievement();
41 
42  static std::unordered_map<unsigned, std::vector<std::string>> m_activatedCheevoMap;
43 
44 private:
45  bool LoadData();
46  RConsoleID ConsoleID();
47 
48  GAME::CGameClient* const m_gameClient;
49  std::string m_userName;
50  std::string m_loginToken;
51  std::string m_romHash;
52  std::string m_richPresenceScript;
53  uint32_t m_gameID{};
54  RConsoleID m_consoleID = RConsoleID::RC_INVALID_ID;
55  bool m_richPresenceLoaded{};
56 
57  const std::map<std::string, RConsoleID> m_extensionToConsole = {
58  {".a26", RConsoleID::RC_CONSOLE_ATARI_2600},
59  {".a78", RConsoleID::RC_CONSOLE_ATARI_7800},
60  {".agb", RConsoleID::RC_CONSOLE_GAMEBOY_ADVANCE},
61  {".cdi", RConsoleID::RC_CONSOLE_DREAMCAST},
62  {".cdt", RConsoleID::RC_CONSOLE_AMSTRAD_PC},
63  {".cgb", RConsoleID::RC_CONSOLE_GAMEBOY_COLOR},
64  {".chd", RConsoleID::RC_CONSOLE_DREAMCAST},
65  {".cpr", RConsoleID::RC_CONSOLE_AMSTRAD_PC},
66  {".d64", RConsoleID::RC_CONSOLE_COMMODORE_64},
67  {".gb", RConsoleID::RC_CONSOLE_GAMEBOY},
68  {".gba", RConsoleID::RC_CONSOLE_GAMEBOY_ADVANCE},
69  {".gbc", RConsoleID::RC_CONSOLE_GAMEBOY_COLOR},
70  {".gdi", RConsoleID::RC_CONSOLE_DREAMCAST},
71  {".j64", RConsoleID::RC_CONSOLE_ATARI_JAGUAR},
72  {".jag", RConsoleID::RC_CONSOLE_ATARI_JAGUAR},
73  {".lnx", RConsoleID::RC_CONSOLE_ATARI_LYNX},
74  {".mds", RConsoleID::RC_CONSOLE_SATURN},
75  {".min", RConsoleID::RC_CONSOLE_POKEMON_MINI},
76  {".mx1", RConsoleID::RC_CONSOLE_MSX},
77  {".mx2", RConsoleID::RC_CONSOLE_MSX},
78  {".n64", RConsoleID::RC_CONSOLE_NINTENDO_64},
79  {".ndd", RConsoleID::RC_CONSOLE_NINTENDO_64},
80  {".nds", RConsoleID::RC_CONSOLE_NINTENDO_DS},
81  {".nes", RConsoleID::RC_CONSOLE_NINTENDO},
82  {".o", RConsoleID::RC_CONSOLE_ATARI_LYNX},
83  {".pce", RConsoleID::RC_CONSOLE_PC_ENGINE},
84  {".sfc", RConsoleID::RC_CONSOLE_SUPER_NINTENDO},
85  {".sgx", RConsoleID::RC_CONSOLE_PC_ENGINE},
86  {".smc", RConsoleID::RC_CONSOLE_SUPER_NINTENDO},
87  {".sna", RConsoleID::RC_CONSOLE_AMSTRAD_PC},
88  {".tap", RConsoleID::RC_CONSOLE_AMSTRAD_PC},
89  {".u1", RConsoleID::RC_CONSOLE_NINTENDO_64},
90  {".v64", RConsoleID::RC_CONSOLE_NINTENDO_64},
91  {".vb", RConsoleID::RC_CONSOLE_VIRTUAL_BOY},
92  {".vboy", RConsoleID::RC_CONSOLE_VIRTUAL_BOY},
93  {".vec", RConsoleID::RC_CONSOLE_VECTREX},
94  {".voc", RConsoleID::RC_CONSOLE_AMSTRAD_PC},
95  {".z64", RConsoleID::RC_CONSOLE_NINTENDO_64}};
96 };
97 } // namespace RETRO
98 } // namespace KODI
Definition: Cheevos.h:28
Interface between Kodi and Game add-ons.
Definition: GameClient.h:116
Definition: AudioDecoder.h:18