diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Xbox/Xbox_App.h | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/Xbox/Xbox_App.h')
| -rw-r--r-- | Minecraft.Client/Xbox/Xbox_App.h | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/Minecraft.Client/Xbox/Xbox_App.h b/Minecraft.Client/Xbox/Xbox_App.h new file mode 100644 index 00000000..f64e7142 --- /dev/null +++ b/Minecraft.Client/Xbox/Xbox_App.h @@ -0,0 +1,197 @@ +#pragma once + +#define GROUP_ID "A9C80F8E-5EAE-4883-89E6-0C456CADE89B" +#define SAVETRANSFER_GROUP_ID "43FD7A62-2747-4489-8E71-F937163DC3C5" + +class XUI_FontRenderer; + +class CConsoleMinecraftApp : public CMinecraftApp +{ +private: + bool m_bMenuDisplayed[XUSER_MAX_COUNT]; // track each players menu displayed + bool m_bMenuToBeClosed[XUSER_MAX_COUNT]; // actioned at the end of the game loop + bool m_bPauseMenuDisplayed[XUSER_MAX_COUNT]; + bool m_bContainerMenuDisplayed[XUSER_MAX_COUNT]; + bool m_bIgnoreAutosaveMenuDisplayed[XUSER_MAX_COUNT]; + bool m_bIgnorePlayerJoinMenuDisplayed[XUSER_MAX_COUNT]; + int m_iCountDown[XUSER_MAX_COUNT]; // ticks to block input + + HXUIOBJ m_PlayerBaseScene[XUSER_MAX_COUNT]; + HXUIOBJ m_hFirstScene[XUSER_MAX_COUNT]; + HXUIOBJ m_hCurrentScene[XUSER_MAX_COUNT]; + HXUIOBJ m_hFirstTutorialScene[XUSER_MAX_COUNT]; + HXUIOBJ m_hCurrentTutorialScene[XUSER_MAX_COUNT]; + HXUIOBJ m_hFirstChatScene[XUSER_MAX_COUNT]; + HXUIOBJ m_hCurrentChatScene[XUSER_MAX_COUNT]; + HXUIOBJ m_hFirstHudScene[XUSER_MAX_COUNT]; + HXUIOBJ m_hCurrentHudScene[XUSER_MAX_COUNT]; + + std::list< SceneStackPair > m_sceneStack[XUSER_MAX_COUNT]; + + // XUI scene names + static WCHAR *wchSceneA[eUIScene_COUNT]; + static WCHAR *wchTypefaceA[4]; + static WCHAR *wchTypefaceLocatorA[4]; + + WCHAR m_SceneName[50]; +public: + CConsoleMinecraftApp(); + + virtual void SetRichPresenceContext(int iPad, int contextId); + + virtual HRESULT RegisterXuiClasses(); + virtual HRESULT UnregisterXuiClasses(); + + XTITLE_DEPLOYMENT_TYPE getDeploymentType() { return m_titleDeploymentType; } + + void GetPreviewImage(int iPad,XSOCIAL_PREVIEWIMAGE *preview); + + virtual HRESULT LoadXuiResources(); + + virtual void CaptureScreenshot(int iPad); + virtual void CaptureSaveThumbnail(); + virtual void GetSaveThumbnail(PBYTE*,DWORD*); + virtual void ReleaseSaveThumbnail(); + virtual void GetScreenshot(int iPad,PBYTE *pbData,DWORD *pdwSize); + + virtual void RunFrame(); + + // TMS++ + void TMSPP_SetTitleGroupID(LPCSTR szTitleGroupID); + void TMSPP_RetrieveFileList(int iPad,C4JStorage::eGlobalStorage eStorageFacility,CHAR *szPath,eTMSAction NextAction); + void TMSPP_ReadXuidsFile(int iPad,eTMSAction NextAction); + void TMSPP_ReadConfigFile(int iPad,eTMSAction NextAction); + void TMSPP_ReadDLCFile(int iPad,eTMSAction NextAction); + bool TMSPP_ReadBannedList(int iPad,eTMSAction NextAction); + + static int Callback_TMSPPReadFileList(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILE_LIST pTmsFileList); + static int Callback_TMSPPReadXuidsFile(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData,LPCSTR szFilename); + static int Callback_TMSPPReadConfigFile(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData, LPCSTR szFilename); + static int Callback_TMSPPReadDLCFile(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData,LPCSTR szFilename); + static int Callback_TMSPPReadBannedList(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData,LPCSTR szFilename); + + virtual bool GetTMSGlobalFileListRead() { return m_bTMSPP_GlobalFileListRead;} + virtual bool GetTMSDLCInfoRead() { return m_bRead_TMS_DLCINFO_XML;} + virtual bool GetTMSXUIDsFileRead() { return m_bRead_TMS_XUIDS_XML;} + + virtual int LoadLocalTMSFile(WCHAR *wchTMSFile); + virtual int LoadLocalTMSFile(WCHAR *wchTMSFile, eFileExtensionType eExt); + virtual void FreeLocalTMSFiles(eTMSFileType eType); + virtual int GetLocalTMSFileIndex(WCHAR *wchTMSFile,bool bFilenameIncludesExtension,eFileExtensionType eEXT=eFileExtensionType_PNG); + virtual int RetrieveTMSFileListIndex(WCHAR *wchTMSFile); + + virtual void OverrideFontRenderer(bool set, bool immediate=true); + virtual void ToggleFontRenderer() { OverrideFontRenderer(!m_bFontRendererOverridden,false); } + + virtual LPCWSTR GetString(int iID); + CXuiStringTable *GetStringTable(); + +#ifdef _DEBUG_MENUS_ENABLED + void EnableDebugOverlay(bool enable, int iPad); +#endif + +private: + XUI_FontRenderer *m_fontRenderer; + bool m_bFontRendererOverridden; + bool m_bOverrideFontRenderer; + // Global string table for this application. + CXuiStringTable StringTable; + CXuiScene debugContainerScene; + + + // screenshot for social post, and thumbnail for save + LPD3DXBUFFER m_ThumbnailBuffer; + LPD3DXBUFFER m_ScreenshotBuffer[XUSER_MAX_COUNT]; + +private: + XTITLE_DEPLOYMENT_TYPE m_titleDeploymentType; + XSOCIAL_PREVIEWIMAGE m_PreviewBuffer[XUSER_MAX_COUNT]; + + bool m_bTMSPP_GlobalFileListRead; // track whether we have already read the file list from TMSPP + bool m_bRead_TMS_XUIDS_XML; // track whether we have already read the TMS xuids.xml file + bool m_bRead_TMS_Config_XML; // track whether we have already read the config file + bool m_bRead_TMS_DLCINFO_XML; // track whether we have already read the TMS DLC.xml file + BYTE *m_pXuidsFileBuffer; + DWORD m_dwXuidsFileSize; + +#ifdef _DEBUG_MENUS_ENABLED + bool debugOverlayCreated; + HXUIOBJ m_hDebugOverlay; +#endif + +public: + + void ReadBannedList(int iPad, eTMSAction action=(eTMSAction)0, bool bCallback=false); +// void ReadXuidsFileFromTMS(int iPad,eTMSAction NextAction,bool bCallback); +// void ReadDLCFileFromTMS(int iPad,eTMSAction NextAction, bool bCallback); + +// static int CallbackReadXuidsFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction); +// static int CallbackDLCFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction); + static int CallbackBannedListFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction); + + HRESULT RegisterFont(eFont eFontLanguage,eFont eFontFallback, bool bSetAsDefault=false); + + WCHAR *GetSceneName(EUIScene eScene, bool bAppendToName,bool bSplitscreenScene); + + virtual HRESULT NavigateToScene(int iPad,EUIScene eScene, void *initData = NULL, bool forceUsePad = false, BOOL bStayVisible=FALSE, HXUIOBJ *phResultingScene=NULL); + virtual HRESULT NavigateBack(int iPad, bool forceUsePad = false,EUIScene eScene = eUIScene_COUNT); + virtual HRESULT TutorialSceneNavigateBack(int iPad, bool forceUsePad = false); + virtual HRESULT CloseXuiScenes(int iPad, bool forceUsePad = false); + virtual HRESULT CloseAllPlayersXuiScenes(); + virtual HRESULT CloseXuiScenesAndNavigateToScene(int iPad,EUIScene eScene, void *initData=NULL, bool forceUsePad = false); + virtual HRESULT RemoveBackScene(int iPad); + virtual HRESULT NavigateToHomeMenu(); + D3DXVECTOR3 GetElementScreenPosition(HXUIOBJ hObj); + virtual void SetChatTextDisplayed(int iPad, bool bVal); + virtual void ReloadChatScene(int iPad, bool bJoining = false, bool bForce = false); + virtual void ReloadHudScene(int iPad, bool bJoining = false, bool bForce = false); + + bool GetMenuDisplayed(int iPad); + void SetMenuDisplayed(int iPad,bool bVal); + void CheckMenuDisplayed(); + bool IsSceneInStack(int iPad, EUIScene eScene); + + bool IsPauseMenuDisplayed(int iPad) { return m_bPauseMenuDisplayed[iPad]; } + bool IsContainerMenuDisplayed(int iPad) { return m_bContainerMenuDisplayed[iPad]; } + bool IsIgnoreAutosaveMenuDisplayed(int iPad) { return m_bIgnoreAutosaveMenuDisplayed[iPad]; } + void SetIgnoreAutosaveMenuDisplayed(int iPad, bool displayed) { m_bIgnoreAutosaveMenuDisplayed[iPad] = displayed; } + bool IsIgnorePlayerJoinMenuDisplayed(int iPad) { return m_bIgnorePlayerJoinMenuDisplayed[iPad]; } + void SetIgnorePlayerJoinMenuDisplayed(int iPad, bool displayed) { m_bIgnorePlayerJoinMenuDisplayed[iPad] = displayed; } + + HXUIOBJ GetFirstScene(int iPad) + { + return m_hFirstScene[iPad]; + } + HXUIOBJ GetCurrentTutorialScene(int iPad) + { + return m_hCurrentTutorialScene[iPad]; + } + HXUIOBJ GetCurrentHUDScene(int iPad) + { + return m_hCurrentHudScene[iPad]; + } + HXUIOBJ GetCurrentScene(int iPad) { return m_hCurrentScene[iPad]; } + + // Move splitscreen scenes based on which screen segment they are in + void AdjustSplitscreenScene(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, bool bAdjustXForSafeArea=true); + void AdjustSplitscreenScene(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, float fXAdjust); + HRESULT AdjustSplitscreenScene_PlayerChanged(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, bool bJoining, bool bAdjustXForSafeArea=true); + HRESULT AdjustSplitscreenScene_PlayerChanged(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, bool bJoining, float fXAdjust); + + // functions to store launch data, and to exit the game - required due to possibly being on a demo disc + virtual void StoreLaunchData(); + virtual void ExitGame(); + virtual void FatalLoadError(); + static TMS_FILE TMSFileA[TMS_COUNT]; + + + virtual void GetFileFromTPD(eTPDFileType eType,PBYTE pbData,DWORD dwBytes,PBYTE *ppbData,DWORD *pdwBytes ); + +private: + static WCHAR m_wchTMSXZP[]; + static WCHAR *CConsoleMinecraftApp::wchExt[MAX_EXTENSION_TYPES]; + + +}; + +extern CConsoleMinecraftApp app;
\ No newline at end of file |
