first commit
This commit is contained in:
268
Minecraft.Client/Common/Leaderboards/LeaderboardManager.h
Normal file
268
Minecraft.Client/Common/Leaderboards/LeaderboardManager.h
Normal file
@@ -0,0 +1,268 @@
|
||||
#pragma once
|
||||
|
||||
// Forward Declarations.
|
||||
class LeaderboardManager;
|
||||
|
||||
// READ LISTENTER //
|
||||
class LeaderboardReadListener;
|
||||
|
||||
// ABSTRACT CLASS //
|
||||
class LeaderboardManager
|
||||
{
|
||||
public:
|
||||
enum eStatsReturn
|
||||
{
|
||||
eStatsReturn_Success=0,
|
||||
eStatsReturn_NoResults,
|
||||
eStatsReturn_NetworkError
|
||||
};
|
||||
|
||||
enum eProperty_Kills
|
||||
{
|
||||
eProperty_Kills_Zombie=0,
|
||||
eProperty_Kills_Skeleton,
|
||||
eProperty_Kills_Creeper,
|
||||
eProperty_Kills_Spider,
|
||||
eProperty_Kills_SpiderJockey,
|
||||
eProperty_Kills_ZombiePigman,
|
||||
eProperty_Kills_Slime,
|
||||
eProperty_Kills_Rating,
|
||||
eProperty_Kills_Max,
|
||||
};
|
||||
|
||||
enum eProperty_Mining
|
||||
{
|
||||
eProperty_Mining_Dirt=0,
|
||||
eProperty_Mining_Stone,
|
||||
eProperty_Mining_Sand,
|
||||
eProperty_Mining_Cobblestone,
|
||||
eProperty_Mining_Gravel,
|
||||
eProperty_Mining_Clay,
|
||||
eProperty_Mining_Obsidian,
|
||||
eProperty_Mining_Rating,
|
||||
eProperty_Mining_Max,
|
||||
};
|
||||
|
||||
enum eProperty_Farming
|
||||
{
|
||||
eProperty_Farming_Egg=0,
|
||||
eProperty_Farming_Wheat,
|
||||
eProperty_Farming_Mushroom,
|
||||
eProperty_Farming_Sugarcane,
|
||||
eProperty_Farming_Milk,
|
||||
eProperty_Farming_Pumpkin,
|
||||
eProperty_Farming_Rating,
|
||||
eProperty_Farming_Max,
|
||||
};
|
||||
|
||||
enum eProperty_Travelling
|
||||
{
|
||||
eProperty_Travelling_Walked=0,
|
||||
eProperty_Travelling_Fallen,
|
||||
eProperty_Travelling_Minecart,
|
||||
eProperty_Travelling_Boat,
|
||||
eProperty_Travelling_Rating,
|
||||
eProperty_Travelling_Max,
|
||||
};
|
||||
|
||||
enum EStatsType
|
||||
{
|
||||
eStatsType_Travelling=0,
|
||||
eStatsType_Mining,
|
||||
eStatsType_Farming,
|
||||
eStatsType_Kills,
|
||||
eStatsType_MAX,
|
||||
eStatsType_UNDEFINED
|
||||
};
|
||||
|
||||
enum EFilterMode
|
||||
{
|
||||
eFM_Friends=0, //Stats belonging to current user's friends
|
||||
eFM_MyScore, //Stats around the current user's rank
|
||||
eFM_TopRank, //Stats at the top of the leaderboard
|
||||
eNumFilterModes,
|
||||
eFM_UNDEFINED
|
||||
};
|
||||
|
||||
static const wstring filterNames[eNumFilterModes];
|
||||
|
||||
typedef struct KillsRecord
|
||||
{
|
||||
public:
|
||||
unsigned short m_zombie;
|
||||
unsigned short m_skeleton;
|
||||
unsigned short m_creeper;
|
||||
unsigned short m_spider;
|
||||
unsigned short m_spiderJockey;
|
||||
unsigned short m_zombiePigman;
|
||||
unsigned short m_slime;
|
||||
} KillsRecord;
|
||||
|
||||
typedef struct MiningRecord
|
||||
{
|
||||
public:
|
||||
unsigned short m_dirt;
|
||||
unsigned short m_stone;
|
||||
unsigned short m_sand;
|
||||
unsigned short m_cobblestone;
|
||||
unsigned short m_gravel;
|
||||
unsigned short m_clay;
|
||||
unsigned short m_obsidian;
|
||||
} MiningRecord;
|
||||
|
||||
typedef struct FarmingRecord
|
||||
{
|
||||
public:
|
||||
unsigned short m_eggs;
|
||||
unsigned short m_wheat;
|
||||
unsigned short m_mushroom;
|
||||
unsigned short m_sugarcane;
|
||||
unsigned short m_milk;
|
||||
unsigned short m_pumpkin;
|
||||
} FarmingRecord;
|
||||
|
||||
typedef struct TravellingRecord
|
||||
{
|
||||
public:
|
||||
unsigned int m_walked;
|
||||
unsigned int m_fallen;
|
||||
unsigned int m_minecart;
|
||||
unsigned int m_boat;
|
||||
} TravellingRecord;
|
||||
|
||||
|
||||
|
||||
public:
|
||||
#ifdef _XBOX
|
||||
typedef XSESSION_VIEW_PROPERTIES *ViewIn;
|
||||
typedef PXUSER_STATS_READ_RESULTS ViewOut;
|
||||
#else
|
||||
static const int RECORD_SIZE = 40; //base32
|
||||
|
||||
typedef struct StatsData
|
||||
{
|
||||
EStatsType m_statsType;
|
||||
union
|
||||
{
|
||||
LeaderboardManager::KillsRecord m_kills;
|
||||
LeaderboardManager::MiningRecord m_mining;
|
||||
LeaderboardManager::FarmingRecord m_farming;
|
||||
LeaderboardManager::TravellingRecord m_travelling;
|
||||
unsigned char m_padding[RECORD_SIZE];
|
||||
};
|
||||
} StatsData;
|
||||
|
||||
typedef struct RegisterScore
|
||||
{
|
||||
int m_iPad;
|
||||
int m_score;
|
||||
int m_difficulty;
|
||||
StatsData m_commentData;
|
||||
} RegisterScore;
|
||||
|
||||
typedef struct ReadScore
|
||||
{
|
||||
// Maximum number of columns in a scoreboard.
|
||||
static const unsigned int STATSDATA_MAX = 8;
|
||||
|
||||
PlayerUID m_uid; // Player's unique identifier.
|
||||
unsigned long m_rank; // Rank of the player on this scoreboard.
|
||||
wstring m_name; // Player's display name.
|
||||
|
||||
unsigned long m_totalScore; // Sum of all the player's scores on this leaderboard.
|
||||
|
||||
unsigned short m_statsSize; // Iff (m_hasResults): Number of columns on this leaderboard.
|
||||
unsigned long m_statsData[STATSDATA_MAX]; // Iff (m_hasResults): Player's score for each appropriate column.
|
||||
|
||||
int m_idsErrorMessage; // Iff (not m_hasResults): error message explaining what went wrong.
|
||||
|
||||
} ReadScore;
|
||||
|
||||
typedef struct ReadView
|
||||
{
|
||||
unsigned int m_numQueries;
|
||||
ReadScore *m_queries;
|
||||
|
||||
} ReadView;
|
||||
|
||||
typedef ReadView ViewOut;
|
||||
typedef RegisterScore *ViewIn;
|
||||
#endif
|
||||
|
||||
|
||||
public:
|
||||
LeaderboardManager();
|
||||
virtual ~LeaderboardManager() {}
|
||||
|
||||
protected:
|
||||
virtual void zeroReadParameters();
|
||||
|
||||
EFilterMode m_eFilterMode;
|
||||
|
||||
// Parameters for reading.
|
||||
int m_difficulty;
|
||||
EStatsType m_statsType;
|
||||
LeaderboardReadListener *m_readListener;
|
||||
PlayerUID m_myXUID;
|
||||
unsigned int m_startIndex, m_readCount;
|
||||
|
||||
private:
|
||||
static LeaderboardManager *m_instance; //Singleton instance of the LeaderboardManager
|
||||
|
||||
public:
|
||||
static LeaderboardManager *Instance() { return m_instance; }
|
||||
static void DeleteInstance();
|
||||
|
||||
virtual void Tick() = 0;
|
||||
|
||||
//Open a session
|
||||
virtual bool OpenSession() = 0;
|
||||
|
||||
//Close a session
|
||||
virtual void CloseSession() = 0;
|
||||
|
||||
//Delete a session
|
||||
virtual void DeleteSession() = 0;
|
||||
|
||||
//Write the given stats
|
||||
//This is called synchronously and will not free any memory allocated for views when it is done
|
||||
|
||||
virtual bool WriteStats(unsigned int viewCount, ViewIn views) = 0;
|
||||
|
||||
virtual bool ReadStats_Friends(LeaderboardReadListener *callback, int difficulty, EStatsType type, PlayerUID myUID, unsigned int startIndex, unsigned int readCount);
|
||||
virtual bool ReadStats_MyScore(LeaderboardReadListener *callback, int difficulty, EStatsType type, PlayerUID myUID, unsigned int readCount);
|
||||
virtual bool ReadStats_TopRank(LeaderboardReadListener *callback, int difficulty, EStatsType type, unsigned int startIndex, unsigned int readCount);
|
||||
|
||||
//Perform a flush of the stats
|
||||
virtual void FlushStats() = 0;
|
||||
|
||||
//Cancel the current operation
|
||||
virtual void CancelOperation() = 0;
|
||||
|
||||
//Is the leaderboard manager idle.
|
||||
virtual bool isIdle() = 0;
|
||||
|
||||
public:
|
||||
#ifndef _XBOX
|
||||
static void printStats(ReadView &view);
|
||||
#endif
|
||||
};
|
||||
|
||||
class LeaderboardReadListener
|
||||
{
|
||||
public:
|
||||
#ifdef _XBOX
|
||||
virtual bool OnStatsReadComplete(bool success, int numResults, LeaderboardManager::ViewOut results) = 0;
|
||||
#else
|
||||
virtual bool OnStatsReadComplete(LeaderboardManager::eStatsReturn ret, int numResults, LeaderboardManager::ViewOut results) = 0;
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifndef _XBOX
|
||||
class DebugReadListener : public LeaderboardReadListener
|
||||
{
|
||||
public:
|
||||
virtual bool OnStatsReadComplete(LeaderboardManager::eStatsReturn ret, int numResults, LeaderboardManager::ViewOut results);
|
||||
static DebugReadListener *m_instance;
|
||||
};
|
||||
#endif
|
||||
Reference in New Issue
Block a user