4jcraft/Minecraft.Client/Platform/Common/XUI/XUI_MainMenu.h
2026-03-22 12:40:22 -05:00

140 lines
5.3 KiB
C++

#pragma once
#include "../media/xuiscene_main.h"
#include "XUI_CustomMessages.h"
#define BUTTON_PLAYGAME 0
#define BUTTON_LEADERBOARDS 1
#define BUTTON_ACHIEVEMENTS 2
#define BUTTON_HELPANDOPTIONS 3
#define BUTTON_UNLOCKFULLGAME 4
#define BUTTON_EXITGAME 5
#define BUTTONS_MAX BUTTON_EXITGAME + 1
#define MAIN_MENU_MAX_TEXT_SCALE 1.5f
class Random;
class CScene_Main : public CXuiSceneImpl {
private:
static Random* random;
std::vector<std::wstring> m_splashes;
D3DXVECTOR3 m_vPosExitGame;
bool m_bIgnorePress;
float m_fSubtitleHeight, m_fSubtitleWidth;
CXuiControl m_Timer;
// 4J Added
enum eSplashIndexes {
eSplashHappyBirthdayEx = 0,
eSplashHappyBirthdayNotch,
eSplashMerryXmas,
eSplashHappyNewYear,
// The start index in the splashes vector from which we can select a
// random splash
eSplashRandomStart,
};
enum eActions {
eAction_None = 0,
eAction_RunGame,
eAction_RunLeaderboards,
eAction_RunAchievements,
eAction_RunHelpAndOptions,
eAction_RunUnlockOrDLC,
};
protected:
// Control and Element wrapper objects.
CXuiScene m_Scene;
CXuiControl m_Buttons[BUTTONS_MAX];
CXuiControl m_Subtitle, m_SubtitleMCFont;
// Message map. Here we tie messages to message handlers.
XUI_BEGIN_MSG_MAP()
XUI_ON_XM_INIT(OnInit)
XUI_ON_XM_NOTIFY_PRESS_EX(OnNotifyPressEx)
XUI_ON_XM_NAV_RETURN(OnNavReturn)
XUI_ON_XM_TRANSITION_START(OnTransitionStart)
XUI_ON_XM_CONTROL_NAVIGATE(OnControlNavigate)
XUI_ON_XM_KEYDOWN(OnKeyDown)
XUI_ON_XM_NOTIFY_SET_FOCUS(OnNotifySetFocus)
XUI_ON_XM_TMS_BANFILE_RETRIEVED_MESSAGE(OnTMSBanFileRetrieved)
XUI_ON_XM_TMS_DLCFILE_RETRIEVED_MESSAGE(OnTMSDLCFileRetrieved)
XUI_ON_XM_TIMER(OnTimer)
XUI_END_MSG_MAP()
// Control mapping to objects
BEGIN_CONTROL_MAP()
MAP_CONTROL(IDC_XuiButton1, m_Buttons[BUTTON_PLAYGAME])
MAP_CONTROL(IDC_XuiButton2, m_Buttons[BUTTON_LEADERBOARDS])
MAP_CONTROL(IDC_XuiButton3, m_Buttons[BUTTON_ACHIEVEMENTS])
MAP_CONTROL(IDC_XuiButton4, m_Buttons[BUTTON_HELPANDOPTIONS])
MAP_CONTROL(IDC_XuiButton5, m_Buttons[BUTTON_UNLOCKFULLGAME])
MAP_CONTROL(IDC_XuiButton6, m_Buttons[BUTTON_EXITGAME])
MAP_CONTROL(IDC_XuiSplash, m_Subtitle)
MAP_CONTROL(IDC_XuiSplashMCFont, m_SubtitleMCFont)
MAP_CONTROL(IDC_Timer, m_Timer)
END_CONTROL_MAP()
HRESULT OnInit(XUIMessageInit* pInitData, BOOL& bHandled);
HRESULT OnNotifyPressEx(HXUIOBJ hObjPressed,
XUINotifyPress* pNotifyPressData, BOOL& rfHandled);
HRESULT OnNavReturn(HXUIOBJ hObj, BOOL& rfHandled);
HRESULT OnTransitionStart(XUIMessageTransition* pTransition,
BOOL& bHandled);
HRESULT OnControlNavigate(XUIMessageControlNavigate* pControlNavigateData,
BOOL& bHandled);
HRESULT OnKeyDown(XUIMessageInput* pInputData, BOOL& bHandled);
HRESULT OnNotifySetFocus(HXUIOBJ hObjSource,
XUINotifyFocus* pNotifyFocusData, BOOL& bHandled);
HRESULT OnTMSBanFileRetrieved();
HRESULT OnTMSDLCFileRetrieved();
HRESULT OnTimer(XUIMessageTimer* pTimer, BOOL& bHandled);
int SetSaveDevice();
static void LoadTrial();
void RunPlayGame(int iPad);
void RunLeaderboards(int iPad);
void RunAchievements(int iPad);
void RunHelpAndOptions(int iPad);
void RunUnlockOrDLC(int iPad);
eActions m_eAction;
public:
// Define the class. The class name must match the ClassOverride property
// set for the scene in the UI Authoring tool.
XUI_IMPLEMENT_CLASS(CScene_Main, L"CScene_Main", XUI_CLASS_SCENE)
static int SignInReturned(void* pParam, bool bContinue);
static int CreateLoad_SignInReturned(void* pParam, bool bContinue,
int iPad);
static int CreateLoad_OfflineProfileReturned(void* pParam, bool bContinue,
int iPad);
static int DeviceSelectReturned(void* pParam, bool bContinue);
static int SaveGameReturned(void* pParam, bool bContinue);
static int HelpAndOptions_SignInReturned(void* pParam, bool bContinue,
int iPad);
static int ExitGameReturned(void* pParam, int iPad,
C4JStorage::EMessageResult result);
static int AchievementsDeviceSelectReturned(void* pParam, bool bContinue);
static int Achievements_SignInReturned(void* pParam, bool bContinue,
int iPad);
static int Leaderboards_SignInReturned(void* pParam, bool bContinue,
int iPad);
static int UnlockFullGame_SignInReturned(void* pParam, bool bContinue,
int iPad);
static int MustSignInReturned(void* pParam, int iPad,
C4JStorage::EMessageResult result);
#ifdef _XBOX
static int TMSReadFileListReturned(
void* pParam, int iPad, C4JStorage::PTMSPP_FILE_LIST pTmsFileList);
static int TMSFileWriteReturned(void* pParam, int iPad, int iResult);
static int TMSFileReadReturned(void* pParam, int iPad,
C4JStorage::PTMSPP_FILEDATA pData);
#endif
};