Files
MinecraftConsoles/Minecraft.Client/Common/UI/UIScene_LeaderboardsMenu.h
daoge b3feddfef3 feat: TU19 (Dec 2014) Features & Content (#155)
* try to resolve merge conflict

* feat: TU19 (Dec 2014) Features & Content (#32)

* December 2014 files

* Working release build

* Fix compilation issues

* Add sound to Windows64Media

* Add DLC content and force Tutorial DLC

* Revert "Add DLC content and force Tutorial DLC"

This reverts commit 97a4399472.

* Disable broken light packing

* Disable breakpoint during DLC texture map load

Allows DLC loading but the DLC textures are still broken

* Fix post build not working

* ...

* fix vs2022 build

* fix cmake build

---------

Co-authored-by: Loki <lokirautio@gmail.com>
2026-03-03 03:04:10 +08:00

148 lines
5.1 KiB
C++

#pragma once
#include "UIScene.h"
// #include "..\Leaderboards\LeaderboardManager.h"
#include "..\Leaderboards\LeaderboardInterface.h"
class UIScene_LeaderboardsMenu : public UIScene, public LeaderboardReadListener
{
private:
// 4J Stu - Because the kills leaderboard doesn't a peaceful entry there are some special
// handling to make it skip that. We have re-arranged the order of the leaderboards so
// I am making this in case we do it again.
// 4J Stu - Made it a member of the class, rather than a #define
static const int LEADERBOARD_KILLS_POSITION = 3;
static const int NUM_LEADERBOARDS = 4;//6; //Number of leaderboards
static const int NUM_ENTRIES = 101; //Cache up to this many entries
static const int READ_SIZE = 15; //Read this many entries at a time
struct LeaderboardDescriptor {
unsigned int m_columnCount;
bool m_isDistanceLeaderboard;
unsigned int m_title;
LeaderboardDescriptor(unsigned int columnCount, bool isDistanceLeaderboard, unsigned int title)
{
m_columnCount = columnCount;
m_isDistanceLeaderboard = isDistanceLeaderboard;
m_title = title;
}
};
static const LeaderboardDescriptor LEADERBOARD_DESCRIPTORS[NUM_LEADERBOARDS][4];
static const int TitleIcons[NUM_LEADERBOARDS][7];
struct LeaderboardEntry {
PlayerUID m_xuid;
unsigned int m_row; // Row identifier for passing to Iggy as a unique identifier
DWORD m_rank;
WCHAR m_wcRank[12];
WCHAR m_gamerTag[XUSER_NAME_SIZE+1];
//int m_locale;
unsigned int m_columns[7];
WCHAR m_wcColumns[7][12];
bool m_bPlayer; //Is the player
bool m_bOnline; //Is online
bool m_bFriend; //Is friend
bool m_bRequestedFriend; //Friend request sent but not answered
int m_idsErrorMessage; // 4J-JEV: Non-zero if this entry has an error message instead of results.
};
struct Leaderboard {
DWORD m_totalEntryCount; //Either total number of entries in leaderboard, or total number of results for a friends query
vector<LeaderboardEntry> m_entries;
DWORD m_numColumns;
};
Leaderboard m_leaderboard; //All leaderboard data for the currently selected filter
unsigned int m_currentLeaderboard; //The current leaderboard selected for view
LeaderboardManager::EFilterMode m_currentFilter; //The current filter selected
unsigned int m_currentDifficulty; //The current difficulty selected
unsigned int m_newEntryIndex; //Index of the first entry being read
unsigned int m_newReadSize; //Number of entries in the current read operation
unsigned int m_newEntriesCount; // Number of new entries in this update
int m_newTop; //Index of the element that should be at the top of the list
int m_newSel; //Index of the element that should be selected in the list
bool m_isProcessingStatsRead;
bool m_bPopulatedOnce;
bool m_bReady;
LeaderboardInterface m_interface;
UIControl_LeaderboardList m_listEntries;
UIControl_Label m_labelFilter, m_labelLeaderboard, m_labelEntries, m_labelInfo;
UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene)
UI_MAP_ELEMENT( m_listEntries, "Gamers")
UI_MAP_ELEMENT( m_labelFilter, "Filter")
UI_MAP_ELEMENT( m_labelLeaderboard, "Leaderboard")
UI_MAP_ELEMENT( m_labelEntries, "Entries")
UI_MAP_ELEMENT( m_labelInfo, "Info")
UI_END_MAP_ELEMENTS_AND_NAMES()
static int ExitLeaderboards(void *pParam,int iPad,C4JStorage::EMessageResult result);
public:
UIScene_LeaderboardsMenu(int iPad, void *initData, UILayer *parentLayer);
~UIScene_LeaderboardsMenu();
virtual void updateTooltips();
virtual void updateComponents();
virtual EUIScene getSceneType() { return eUIScene_LeaderboardsMenu;}
// Returns true if this scene has focus for the pad passed in
virtual bool hasFocus(int iPad) { return bHasFocus; }
virtual void handleTimerComplete(int id);
private:
int GetEntryStartIndex();
protected:
virtual wstring getMoviePath();
public:
virtual void tick();
virtual void handleReload();
// INPUT
virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled);
private:
//Start a read request with the current parameters
void ReadStats(int startIndex);
//Copy the stats from the raw m_stats structure into the m_leaderboards structure
int m_numStats;
LeaderboardManager::ViewOut m_stats;
bool RetrieveStats();
// Copy a leaderboard entry from the stats row
void CopyLeaderboardEntry(LeaderboardManager::ReadScore *statsRow, int leaderboardEntryIndex, bool isDistanceLeaderboard);
//Populate the XUI leaderboard with the contents of m_leaderboards
void PopulateLeaderboard(LeaderboardManager::eStatsReturn ret);
//Set the header text of the leaderboard
void SetLeaderboardHeader();
// Set the title icons
int SetLeaderboardTitleIcons();
//Callback function called when stats read completes, userdata contains pointer to instance of CScene_Leaderboards
virtual bool OnStatsReadComplete(LeaderboardManager::eStatsReturn ret, int numResults, LeaderboardManager::ViewOut results);
virtual void customDraw(IggyCustomDrawCallbackRegion *region);
virtual void handleSelectionChanged(F64 selectedId);
virtual void handleRequestMoreData(F64 startIndex, bool up);
bool m_bIgnoreInput;
};