aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/XUI/XUI_MultiGameJoinLoad.h
blob: e91fbac237d7adf9374522eedaa1a402eb8b02a9 (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
#pragma once
using namespace std;
#include <vector>
#include "..\Media\xuiscene_multi_joinload.h"
#include "XUI_CustomMessages.h"


#define JOIN_LOAD_CREATE_BUTTON_INDEX 0

#define JOIN_LOAD_ONLINE_TIMER_ID 0
#define JOIN_LOAD_ONLINE_TIMER_TIME 100
#define JOIN_LOAD_SEARCH_MINIMUM_TIMER_ID 1
#define JOIN_LOAD_SEARCH_MINIMUM_TIMER_TIME 2000
#define JOIN_LOAD_SCROLL_GAME_NAMES_TIMER_ID 2
#define JOIN_LOAD_SCROLL_GAME_NAMES_TIMER_TIME 1000

class CXuiCtrl4JList;
class LevelGenerationOptions;
class CScene_MultiGameInfo;

class CScene_MultiGameJoinLoad : public CXuiSceneImpl
{
protected:
	CXuiCtrl4JList *m_pSavesList;
	CXuiCtrl4JList *m_pGamesList;
	CXuiList m_SavesList;
	CXuiList m_GamesList;
	CXuiControl m_SavesListTimer;
	CXuiControl m_NetGamesListTimer;
	CXuiControl m_LabelNoGames;
	int m_iPad;

	bool m_bShowingPartyGamesOnly;
	bool m_bInParty;

	XUI_BEGIN_MSG_MAP()
		XUI_ON_XM_INIT( OnInit )
		XUI_ON_XM_DESTROY(OnDestroy)
		XUI_ON_XM_KEYDOWN(OnKeyDown)
		XUI_ON_XM_NOTIFY_PRESS_EX(OnNotifyPressEx)
		XUI_ON_XM_NAV_RETURN(OnNavReturn)
		XUI_ON_XM_NOTIFY_SELCHANGED(OnNotifySelChanged)
		XUI_ON_XM_NOTIFY_SET_FOCUS(OnNotifySetFocus)
		XUI_ON_XM_NOTIFY_KILL_FOCUS(OnNotifyKillFocus)
		XUI_ON_XM_TIMER( OnTimer )
		XUI_ON_XM_TRANSITION_START(OnTransitionStart)
		XUI_ON_XM_FONTRENDERERCHANGE_MESSAGE(OnFontRendererChange)
		XUI_ON_XM_DLCINSTALLED_MESSAGE(OnCustomMessage_DLCInstalled)
		XUI_ON_XM_DLCLOADED_MESSAGE(OnCustomMessage_DLCMountingComplete)

	XUI_END_MSG_MAP()

		BEGIN_CONTROL_MAP()
			MAP_CONTROL(IDC_GamesList, m_GamesList)
			MAP_CONTROL(IDC_SavesTimer, m_SavesListTimer)
			MAP_CONTROL(IDC_Timer, m_NetGamesListTimer)
			MAP_CONTROL(IDC_LabelNoGames, m_LabelNoGames)
			MAP_CONTROL(IDC_SavesList, m_SavesList)
		END_CONTROL_MAP()


		HRESULT OnInit( XUIMessageInit* pInitData, BOOL& bHandled );
		HRESULT OnDestroy();
		HRESULT OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData,BOOL& rfHandled);
		HRESULT OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled);
		HRESULT OnNavReturn(HXUIOBJ hObj,BOOL& rfHandled);
		HRESULT OnNotifySelChanged(HXUIOBJ hObjSource, XUINotifySelChanged *pNotifySelChangedData, BOOL& bHandled);
		HRESULT OnNotifySetFocus(HXUIOBJ hObjSource, XUINotifyFocus *pNotifyFocusData, BOOL& bHandled);
		HRESULT OnNotifyKillFocus(HXUIOBJ hObjSource, XUINotifyFocus *pNotifyFocusData, BOOL& bHandled);
		HRESULT OnTimer( XUIMessageTimer *pTimer, BOOL& bHandled );
		HRESULT OnTransitionStart( XUIMessageTransition *pTransition, BOOL& bHandled );
		HRESULT OnFontRendererChange();
		HRESULT OnCustomMessage_DLCInstalled();
		HRESULT OnCustomMessage_DLCMountingComplete();


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_MultiGameJoinLoad, L"CScene_MultiGameJoinLoad", XUI_CLASS_SCENE )

private:	
	bool DoesSavesListHaveFocus();
	bool DoesGamesListHaveFocus();
	bool DoesMashUpWorldHaveFocus();

public:
	static void UpdateGamesListCallback(LPVOID pParam);

private:
	void AddDefaultButtons();
	void UpdateGamesList();
	void UpdateGamesList(DWORD dwNumResults, IQNetGameSearch *pGameSearch);
	//void UpdateGamesListLabels();
	static void SearchForGameCallback(void *hObj, DWORD dwNumResults, IQNetGameSearch *pGameSearch);	
	static int DeviceSelectReturned(void *pParam,bool bContinue);

	unsigned char m_localPlayers;

	HRESULT GetSaveInfo(  );
	static int LoadSaveDataReturned(void *pParam,bool bContinue);
	static int DeleteSaveDataReturned(void *pParam,bool bSuccess);

	unsigned int m_uiSaveC;
	void LoadLevelGen(LevelGenerationOptions *levelGen);
	void LoadSaveFromDisk(File *saveFile);

	// callback
#ifdef _XBOX
	static bool GetSavesInfoCallback(LPVOID pParam,int iInstalledC, C4JStorage::CACHEINFOSTRUCT *InfoA, int iPad, HRESULT hRes);
#else
	static int GetSavesInfoCallback(LPVOID lpParam,const bool);
#endif
	static int DeleteSaveDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
	static int SaveOptionsDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
	static int DeviceRemovedDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
	static int StartGame_SignInReturned(void *pParam,bool bContinue, int iPad);
	static int CopySaveReturned(void *pParam,bool bResult);
	static int LoadSaveDataForRenameReturned(void *pParam,bool bContinue);
	static int KeyboardReturned(void *pParam,bool bSet);
	static void StartGameFromSave(CScene_MultiGameJoinLoad* pClass, DWORD dwLocalUsersMask);
	static int TexturePackDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
	static int SaveTransferDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);

	static int Progress(void *pParam,float fProgress);
	static int TransferComplete(void *pParam,int i1, int i2);
	static int DeleteComplete(void *pParam,int i1, int i2);
	static int UploadSaveForXboxOneThreadProc( LPVOID lpParameter );
	static void DeleteFile(CScene_MultiGameJoinLoad *pClass, char *filename);
	static void UploadFile(CScene_MultiGameJoinLoad *pClass, char *filename, LPVOID data, DWORD size);
	static bool WaitForTransferComplete( CScene_MultiGameJoinLoad *pClass );
	static void CancelSaveUploadCallback(LPVOID lpParam);
	static void SaveUploadCompleteCallback(LPVOID lpParam);


	bool m_bIgnoreInput;
	vector<File *> *m_saves;

	int m_iSaveInfoC;
	int m_iDefaultButtonsC;
	int m_iMashUpButtonsC;
	int m_iChangingSaveGameInfoIndex;

	bool m_bMultiplayerAllowed;
	bool m_bKillSaveInfoEnumerate;

	vector<FriendSessionInfo *> currentSessions;
	bool m_bReady;
	bool m_bRetrievingSaveInfo;
	//bool m_bSaveRenamed;
	WCHAR m_wchNewName[XCONTENT_MAX_DISPLAYNAME_LENGTH];
	unsigned char m_szSeed[50];

	vector<LevelGenerationOptions *> *m_generators;
	JoinMenuInitData *m_initData;

	UINT m_DefaultMinecraftIconSize;
	PBYTE m_DefaultMinecraftIconData;
	int *m_iConfigA; // track the texture packs that we don't have installed
	int m_iTexturePacksNotInstalled;
	PBYTE m_pbSaveTransferData;

	float m_fProgress;
	bool m_bTransferComplete;
	bool m_bTransferFail;
	bool m_bSaveTransferInProgress;
};