the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2
3#define GROUP_ID "A9C80F8E-5EAE-4883-89E6-0C456CADE89B"
4#define SAVETRANSFER_GROUP_ID "43FD7A62-2747-4489-8E71-F937163DC3C5"
5
6class XUI_FontRenderer;
7
8class CConsoleMinecraftApp : public CMinecraftApp
9{
10private:
11 bool m_bMenuDisplayed[XUSER_MAX_COUNT]; // track each players menu displayed
12 bool m_bMenuToBeClosed[XUSER_MAX_COUNT]; // actioned at the end of the game loop
13 bool m_bPauseMenuDisplayed[XUSER_MAX_COUNT];
14 bool m_bContainerMenuDisplayed[XUSER_MAX_COUNT];
15 bool m_bIgnoreAutosaveMenuDisplayed[XUSER_MAX_COUNT];
16 bool m_bIgnorePlayerJoinMenuDisplayed[XUSER_MAX_COUNT];
17 int m_iCountDown[XUSER_MAX_COUNT]; // ticks to block input
18
19 HXUIOBJ m_PlayerBaseScene[XUSER_MAX_COUNT];
20 HXUIOBJ m_hFirstScene[XUSER_MAX_COUNT];
21 HXUIOBJ m_hCurrentScene[XUSER_MAX_COUNT];
22 HXUIOBJ m_hFirstTutorialScene[XUSER_MAX_COUNT];
23 HXUIOBJ m_hCurrentTutorialScene[XUSER_MAX_COUNT];
24 HXUIOBJ m_hFirstChatScene[XUSER_MAX_COUNT];
25 HXUIOBJ m_hCurrentChatScene[XUSER_MAX_COUNT];
26 HXUIOBJ m_hFirstHudScene[XUSER_MAX_COUNT];
27 HXUIOBJ m_hCurrentHudScene[XUSER_MAX_COUNT];
28
29 std::list< SceneStackPair > m_sceneStack[XUSER_MAX_COUNT];
30
31 // XUI scene names
32 static WCHAR *wchSceneA[eUIScene_COUNT];
33 static WCHAR *wchTypefaceA[4];
34 static WCHAR *wchTypefaceLocatorA[4];
35
36 WCHAR m_SceneName[50];
37public:
38 CConsoleMinecraftApp();
39
40 virtual void SetRichPresenceContext(int iPad, int contextId);
41
42 virtual HRESULT RegisterXuiClasses();
43 virtual HRESULT UnregisterXuiClasses();
44
45 XTITLE_DEPLOYMENT_TYPE getDeploymentType() { return m_titleDeploymentType; }
46
47 void GetPreviewImage(int iPad,XSOCIAL_PREVIEWIMAGE *preview);
48
49 virtual HRESULT LoadXuiResources();
50
51 virtual void CaptureScreenshot(int iPad);
52 virtual void CaptureSaveThumbnail();
53 virtual void GetSaveThumbnail(PBYTE*,DWORD*);
54 virtual void ReleaseSaveThumbnail();
55 virtual void GetScreenshot(int iPad,PBYTE *pbData,DWORD *pdwSize);
56
57 virtual void RunFrame();
58
59 // TMS++
60 void TMSPP_SetTitleGroupID(LPCSTR szTitleGroupID);
61 void TMSPP_RetrieveFileList(int iPad,C4JStorage::eGlobalStorage eStorageFacility,CHAR *szPath,eTMSAction NextAction);
62 void TMSPP_ReadXuidsFile(int iPad,eTMSAction NextAction);
63 void TMSPP_ReadConfigFile(int iPad,eTMSAction NextAction);
64 void TMSPP_ReadDLCFile(int iPad,eTMSAction NextAction);
65 bool TMSPP_ReadBannedList(int iPad,eTMSAction NextAction);
66
67 static int Callback_TMSPPReadFileList(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILE_LIST pTmsFileList);
68 static int Callback_TMSPPReadXuidsFile(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData,LPCSTR szFilename);
69 static int Callback_TMSPPReadConfigFile(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData, LPCSTR szFilename);
70 static int Callback_TMSPPReadDLCFile(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData,LPCSTR szFilename);
71 static int Callback_TMSPPReadBannedList(void *pParam,int iPad, int iUserData, C4JStorage::PTMSPP_FILEDATA pFileData,LPCSTR szFilename);
72
73 virtual bool GetTMSGlobalFileListRead() { return m_bTMSPP_GlobalFileListRead;}
74 virtual bool GetTMSDLCInfoRead() { return m_bRead_TMS_DLCINFO_XML;}
75 virtual bool GetTMSXUIDsFileRead() { return m_bRead_TMS_XUIDS_XML;}
76
77 virtual int LoadLocalTMSFile(WCHAR *wchTMSFile);
78 virtual int LoadLocalTMSFile(WCHAR *wchTMSFile, eFileExtensionType eExt);
79 virtual void FreeLocalTMSFiles(eTMSFileType eType);
80 virtual int GetLocalTMSFileIndex(WCHAR *wchTMSFile,bool bFilenameIncludesExtension,eFileExtensionType eEXT=eFileExtensionType_PNG);
81 virtual int RetrieveTMSFileListIndex(WCHAR *wchTMSFile);
82
83 virtual void OverrideFontRenderer(bool set, bool immediate=true);
84 virtual void ToggleFontRenderer() { OverrideFontRenderer(!m_bFontRendererOverridden,false); }
85
86 virtual LPCWSTR GetString(int iID);
87 CXuiStringTable *GetStringTable();
88
89#ifdef _DEBUG_MENUS_ENABLED
90 void EnableDebugOverlay(bool enable, int iPad);
91#endif
92
93private:
94 XUI_FontRenderer *m_fontRenderer;
95 bool m_bFontRendererOverridden;
96 bool m_bOverrideFontRenderer;
97 // Global string table for this application.
98 CXuiStringTable StringTable;
99 CXuiScene debugContainerScene;
100
101
102 // screenshot for social post, and thumbnail for save
103 LPD3DXBUFFER m_ThumbnailBuffer;
104 LPD3DXBUFFER m_ScreenshotBuffer[XUSER_MAX_COUNT];
105
106private:
107 XTITLE_DEPLOYMENT_TYPE m_titleDeploymentType;
108 XSOCIAL_PREVIEWIMAGE m_PreviewBuffer[XUSER_MAX_COUNT];
109
110 bool m_bTMSPP_GlobalFileListRead; // track whether we have already read the file list from TMSPP
111 bool m_bRead_TMS_XUIDS_XML; // track whether we have already read the TMS xuids.xml file
112 bool m_bRead_TMS_Config_XML; // track whether we have already read the config file
113 bool m_bRead_TMS_DLCINFO_XML; // track whether we have already read the TMS DLC.xml file
114 BYTE *m_pXuidsFileBuffer;
115 DWORD m_dwXuidsFileSize;
116
117#ifdef _DEBUG_MENUS_ENABLED
118 bool debugOverlayCreated;
119 HXUIOBJ m_hDebugOverlay;
120#endif
121
122public:
123
124 void ReadBannedList(int iPad, eTMSAction action=(eTMSAction)0, bool bCallback=false);
125// void ReadXuidsFileFromTMS(int iPad,eTMSAction NextAction,bool bCallback);
126// void ReadDLCFileFromTMS(int iPad,eTMSAction NextAction, bool bCallback);
127
128// static int CallbackReadXuidsFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction);
129// static int CallbackDLCFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction);
130 static int CallbackBannedListFileFromTMS(LPVOID lpParam, WCHAR *wchFilename, int iPad, bool bResult, int iAction);
131
132 HRESULT RegisterFont(eFont eFontLanguage,eFont eFontFallback, bool bSetAsDefault=false);
133
134 WCHAR *GetSceneName(EUIScene eScene, bool bAppendToName,bool bSplitscreenScene);
135
136 virtual HRESULT NavigateToScene(int iPad,EUIScene eScene, void *initData = NULL, bool forceUsePad = false, BOOL bStayVisible=FALSE, HXUIOBJ *phResultingScene=NULL);
137 virtual HRESULT NavigateBack(int iPad, bool forceUsePad = false,EUIScene eScene = eUIScene_COUNT);
138 virtual HRESULT TutorialSceneNavigateBack(int iPad, bool forceUsePad = false);
139 virtual HRESULT CloseXuiScenes(int iPad, bool forceUsePad = false);
140 virtual HRESULT CloseAllPlayersXuiScenes();
141 virtual HRESULT CloseXuiScenesAndNavigateToScene(int iPad,EUIScene eScene, void *initData=NULL, bool forceUsePad = false);
142 virtual HRESULT RemoveBackScene(int iPad);
143 virtual HRESULT NavigateToHomeMenu();
144 D3DXVECTOR3 GetElementScreenPosition(HXUIOBJ hObj);
145 virtual void SetChatTextDisplayed(int iPad, bool bVal);
146 virtual void ReloadChatScene(int iPad, bool bJoining = false, bool bForce = false);
147 virtual void ReloadHudScene(int iPad, bool bJoining = false, bool bForce = false);
148
149 bool GetMenuDisplayed(int iPad);
150 void SetMenuDisplayed(int iPad,bool bVal);
151 void CheckMenuDisplayed();
152 bool IsSceneInStack(int iPad, EUIScene eScene);
153
154 bool IsPauseMenuDisplayed(int iPad) { return m_bPauseMenuDisplayed[iPad]; }
155 bool IsContainerMenuDisplayed(int iPad) { return m_bContainerMenuDisplayed[iPad]; }
156 bool IsIgnoreAutosaveMenuDisplayed(int iPad) { return m_bIgnoreAutosaveMenuDisplayed[iPad]; }
157 void SetIgnoreAutosaveMenuDisplayed(int iPad, bool displayed) { m_bIgnoreAutosaveMenuDisplayed[iPad] = displayed; }
158 bool IsIgnorePlayerJoinMenuDisplayed(int iPad) { return m_bIgnorePlayerJoinMenuDisplayed[iPad]; }
159 void SetIgnorePlayerJoinMenuDisplayed(int iPad, bool displayed) { m_bIgnorePlayerJoinMenuDisplayed[iPad] = displayed; }
160
161 HXUIOBJ GetFirstScene(int iPad)
162 {
163 return m_hFirstScene[iPad];
164 }
165 HXUIOBJ GetCurrentTutorialScene(int iPad)
166 {
167 return m_hCurrentTutorialScene[iPad];
168 }
169 HXUIOBJ GetCurrentHUDScene(int iPad)
170 {
171 return m_hCurrentHudScene[iPad];
172 }
173 HXUIOBJ GetCurrentScene(int iPad) { return m_hCurrentScene[iPad]; }
174
175 // Move splitscreen scenes based on which screen segment they are in
176 void AdjustSplitscreenScene(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, bool bAdjustXForSafeArea=true);
177 void AdjustSplitscreenScene(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, float fXAdjust);
178 HRESULT AdjustSplitscreenScene_PlayerChanged(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, bool bJoining, bool bAdjustXForSafeArea=true);
179 HRESULT AdjustSplitscreenScene_PlayerChanged(HXUIOBJ hScene,D3DXVECTOR3 *pvOriginalPosition, int iPad, bool bJoining, float fXAdjust);
180
181 // functions to store launch data, and to exit the game - required due to possibly being on a demo disc
182 virtual void StoreLaunchData();
183 virtual void ExitGame();
184 virtual void FatalLoadError();
185 static TMS_FILE TMSFileA[TMS_COUNT];
186
187
188 virtual void GetFileFromTPD(eTPDFileType eType,PBYTE pbData,DWORD dwBytes,PBYTE *ppbData,DWORD *pdwBytes );
189
190private:
191 static WCHAR m_wchTMSXZP[];
192 static WCHAR *CConsoleMinecraftApp::wchExt[MAX_EXTENSION_TYPES];
193
194
195};
196
197extern CConsoleMinecraftApp app;