#ifndef __ILEADERBOARD__H__ #define __ILEADERBOARD__H__ #include <cstdint> #include <optional> #include <string> #include <vector> class ILeaderboard { public: struct Entry { uint32_t charId{}; uint32_t lastPlayedTimestamp{}; float primaryScore{}; float secondaryScore{}; float tertiaryScore{}; uint32_t numWins{}; uint32_t numTimesPlayed{}; uint32_t ranking{}; std::string name{}; }; struct Score { auto operator<=>(const Score& rhs) const = default; float primaryScore{ 0.0f }; float secondaryScore{ 0.0f }; float tertiaryScore{ 0.0f }; }; // Get the donation total for the given activity id. virtual std::optional<uint32_t> GetDonationTotal(const uint32_t activityId) = 0; virtual std::vector<ILeaderboard::Entry> GetDescendingLeaderboard(const uint32_t activityId) = 0; virtual std::vector<ILeaderboard::Entry> GetAscendingLeaderboard(const uint32_t activityId) = 0; virtual std::vector<ILeaderboard::Entry> GetNsLeaderboard(const uint32_t activityId) = 0; virtual std::vector<ILeaderboard::Entry> GetAgsLeaderboard(const uint32_t activityId) = 0; virtual std::optional<Score> GetPlayerScore(const uint32_t playerId, const uint32_t gameId) = 0; virtual void SaveScore(const uint32_t playerId, const uint32_t gameId, const Score& score) = 0; virtual void UpdateScore(const uint32_t playerId, const uint32_t gameId, const Score& score) = 0; virtual void IncrementNumWins(const uint32_t playerId, const uint32_t gameId) = 0; virtual void IncrementTimesPlayed(const uint32_t playerId, const uint32_t gameId) = 0; }; #endif //!__ILEADERBOARD__H__