aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Xbox/Xbox_App.h
blob: 86dbc2874994f980b9251503535c21841e067f0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
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=static_cast<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 = nullptr, bool forceUsePad = false, BOOL bStayVisible=FALSE, HXUIOBJ *phResultingScene=nullptr);
	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=nullptr, 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;