the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2
3#include "UIScene.h"
4
5class LevelGenerationOptions;
6
7
8#if defined __PS3__ || defined __ORBIS__ || defined(__PSVITA__)
9#define SONY_REMOTE_STORAGE_DOWNLOAD
10#endif
11#if defined __PS3__ || __PSVITA__
12#define SONY_REMOTE_STORAGE_UPLOAD
13#endif
14
15
16class UIScene_LoadOrJoinMenu : public UIScene
17{
18private:
19 enum EControls
20 {
21 eControl_SavesList,
22 eControl_GamesList,
23#if defined(_XBOX_ONE) || defined(__ORBIS__)
24 eControl_SpaceIndicator,
25#endif
26 };
27
28 enum EState
29 {
30 e_SavesIdle,
31 e_SavesRepopulate,
32 e_SavesRepopulateAfterMashupHide,
33 e_SavesRepopulateAfterDelete,
34 e_SavesRepopulateAfterTransferDownload,
35 };
36
37 enum eActions
38 {
39 eAction_None=0,
40 eAction_ViewInvites,
41 eAction_JoinGame,
42 };
43 eActions m_eAction;
44
45 static const int JOIN_LOAD_CREATE_BUTTON_INDEX = 0;
46
47 SaveListDetails *m_saveDetails;
48 int m_iSaveDetailsCount;
49
50protected:
51 UIControl_SaveList m_buttonListSaves;
52 UIControl_SaveList m_buttonListGames;
53 UIControl_Label m_labelSavesListTitle, m_labelJoinListTitle, m_labelNoGames;
54 UIControl m_controlSavesTimer, m_controlJoinTimer;
55#if defined(_XBOX_ONE) || defined(__ORBIS__)
56 UIControl_SpaceIndicatorBar m_spaceIndicatorSaves;
57#endif
58
59private:
60 UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene)
61 UI_MAP_ELEMENT( m_buttonListSaves, "SavesList")
62 UI_MAP_ELEMENT( m_buttonListGames, "JoinList")
63
64 UI_MAP_ELEMENT( m_labelSavesListTitle, "SavesListTitle")
65 UI_MAP_ELEMENT( m_labelJoinListTitle, "JoinListTitle")
66 UI_MAP_ELEMENT( m_labelNoGames, "NoGames")
67
68 UI_MAP_ELEMENT( m_controlSavesTimer, "SavesTimer")
69 UI_MAP_ELEMENT( m_controlJoinTimer, "JoinTimer")
70
71#if defined(_XBOX_ONE) || defined(__ORBIS__)
72 UI_MAP_ELEMENT( m_spaceIndicatorSaves, "SaveSizeBar")
73#endif
74 UI_END_MAP_ELEMENTS_AND_NAMES()
75
76 int m_iDefaultButtonsC;
77 int m_iMashUpButtonsC;
78 int m_iState;
79
80 vector<FriendSessionInfo *> *m_currentSessions;
81 vector<LevelGenerationOptions *> m_generators;
82 vector<File *> *m_saves;
83
84 bool m_bIgnoreInput;
85 bool m_bAllLoaded;
86 bool m_bRetrievingSaveThumbnails;
87 bool m_bSaveThumbnailReady;
88 bool m_bShowingPartyGamesOnly;
89 bool m_bInParty;
90 JoinMenuInitData *m_initData;
91 bool m_bMultiplayerAllowed;
92 int m_iTexturePacksNotInstalled;
93 int m_iRequestingThumbnailId;
94 SAVE_DETAILS *m_pSaveDetails;
95 bool m_bSavesDisplayed;
96 bool m_bExitScene;
97 bool m_bCopying;
98 bool m_bCopyingCancelled;
99 int m_iSaveInfoC;
100 int m_iSaveListIndex;
101 int m_iGameListIndex;
102 //int *m_iConfigA; // track the texture packs that we don't have installed
103#ifndef _XBOX_ONE
104 bool m_bSaveTransferInProgress;
105 bool m_bSaveTransferCancelled;
106#endif
107 bool m_bUpdateSaveSize;
108
109public:
110 UIScene_LoadOrJoinMenu(int iPad, void *initData, UILayer *parentLayer);
111 virtual ~UIScene_LoadOrJoinMenu();
112
113 virtual void updateTooltips();
114 virtual void updateComponents();
115
116 virtual void handleDestroy();
117 virtual void handleLoseFocus();
118 virtual void handleGainFocus(bool navBack);
119 virtual void handleTimerComplete(int id);
120 // INPUT
121 virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled);
122 virtual void handleFocusChange(F64 controlId, F64 childId);
123 virtual void handleInitFocus(F64 controlId, F64 childId);
124
125 virtual EUIScene getSceneType() { return eUIScene_LoadOrJoinMenu;}
126
127 static void UpdateGamesListCallback(LPVOID pParam);
128#ifdef _XBOX_ONE
129 void HandleDLCLicenseChange();
130#endif
131 virtual void tick();
132
133private:
134 void Initialise();
135 void GetSaveInfo();
136 void UpdateGamesList();
137 void AddDefaultButtons();
138 bool DoesSavesListHaveFocus();
139 bool DoesMashUpWorldHaveFocus();
140 bool DoesGamesListHaveFocus();
141
142protected:
143 // TODO: This should be pure virtual in this class
144 virtual wstring getMoviePath();
145
146public:
147
148 static int LoadSaveDataThumbnailReturned(LPVOID lpParam,PBYTE pbThumbnail,DWORD dwThumbnailBytes);
149 static int LoadSaveCallback(LPVOID lpParam,bool bRes);
150 static int DeleteSaveDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
151 static int SaveOptionsDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
152 static int TexturePackDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
153 static int DeleteSaveDataReturned(LPVOID lpParam,bool bRes);
154 static int RenameSaveDataReturned(LPVOID lpParam,bool bRes);
155 static int KeyboardCompleteWorldNameCallback(LPVOID lpParam,bool bRes);
156#ifdef __PSVITA__
157 static int MustSignInTexturePack(void *pParam,int iPad,C4JStorage::EMessageResult result);
158 static int MustSignInReturnedTexturePack(void *pParam,bool bContinue, int iPad);
159 static int SignInAdhocReturned(void *pParam,bool bContinue, int iPad);
160#endif
161
162protected:
163 void handlePress(F64 controlId, F64 childId);
164 void LoadLevelGen(LevelGenerationOptions *levelGen);
165 void LoadSaveFromDisk(File *saveFile, ESavePlatform savePlatform = SAVE_FILE_PLATFORM_LOCAL);
166#if defined(__PS3__) || defined(__PSVITA__) || defined(__ORBIS__)
167 void LoadSaveFromCloud();
168#endif
169public:
170 virtual void HandleDLCMountingComplete();
171
172#ifdef __ORBIS__
173 void LoadRemoteFileFromDisk(char* remoteFilename);
174#endif
175
176private:
177 void CheckAndJoinGame(int gameIndex);
178#if defined(__PS3__) || defined(__PSVITA__) || defined(__ORBIS__)
179 static int MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::EMessageResult result);
180 static int PSN_SignInReturned(void *pParam,bool bContinue, int iPad);
181 static void remoteStorageGetSaveCallback(LPVOID lpParam, SonyRemoteStorage::Status s, int error_code);
182#endif
183
184#ifdef __ORBIS__
185 //static int PSPlusReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
186#endif
187#ifdef _XBOX_ONE
188 typedef struct _SaveTransferStateContainer
189 {
190 int m_iProgress;
191 bool m_bSaveTransferInProgress;
192 bool m_bSaveTransferCancelled;
193 int m_iPad;
194 C4JStorage::eSaveTransferState m_eSaveTransferState;
195 UIScene_LoadOrJoinMenu *m_pClass;
196 } SaveTransferStateContainer;
197 enum ESaveTransferFiles
198 {
199 eSaveTransferFile_Marker,
200 eSaveTransferFile_Metadata,
201 eSaveTransferFile_SaveData,
202 };
203 static ESaveTransferFiles s_eSaveTransferFile;
204 static unsigned long s_ulFileSize;
205 static byteArray s_transferData;
206 static wstring m_wstrStageText;
207 LoadMenuInitData *m_loadMenuInitData;
208
209#ifdef _DEBUG_MENUS_ENABLED
210 static C4JStorage::SAVETRANSFER_FILE_DETAILS m_debugTransferDetails;
211#endif
212
213 void LaunchSaveTransfer();
214 static int DownloadXbox360SaveThreadProc( LPVOID lpParameter );
215 static void RequestFileSize( SaveTransferStateContainer *pClass, wchar_t *filename );
216 static void RequestFileData( SaveTransferStateContainer *pClass, wchar_t *filename );
217 static int SaveTransferReturned(LPVOID lpParam,C4JStorage::SAVETRANSFER_FILE_DETAILS *pSaveTransferDetails);
218 static int SaveTransferUpdateProgress(LPVOID lpParam,unsigned long ulBytesReceived);
219 static void CancelSaveTransferCallback(LPVOID lpParam);
220 static int NeedSyncMessageReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
221 static int CancelSaveTransferCompleteCallback(LPVOID lpParam);
222
223#endif
224
225
226
227#ifdef SONY_REMOTE_STORAGE_DOWNLOAD
228 enum eSaveTransferState
229 {
230 eSaveTransfer_Idle,
231 eSaveTransfer_Busy,
232 eSaveTransfer_GetRemoteSaveInfo,
233 eSaveTransfer_GettingRemoteSaveInfo,
234 eSaveTransfer_CreateDummyFile,
235 eSaveTransfer_CreatingDummyFile,
236 eSaveTransfer_GettingFileSize,
237 eSaveTransfer_FileSizeRetrieved,
238 eSaveTransfer_GetFileData,
239 eSaveTransfer_GettingFileData,
240 eSaveTransfer_FileDataRetrieved,
241 eSaveTransfer_GetSavesInfo,
242 eSaveTransfer_GettingSavesInfo,
243 eSaveTransfer_LoadSaveFromDisc,
244 eSaveTransfer_LoadingSaveFromDisc,
245 eSaveTransfer_CreatingNewSave,
246 eSaveTransfer_Converting,
247 eSaveTransfer_Saving,
248 eSaveTransfer_Succeeded,
249 eSaveTransfer_Cancelled,
250 eSaveTransfer_Error,
251 eSaveTransfer_ErrorDeletingSave,
252 eSaveTransfer_ErrorMesssage,
253 eSaveTransfer_Finished,
254
255 };
256 eSaveTransferState m_eSaveTransferState;
257 static unsigned long m_ulFileSize;
258 static wstring m_wstrStageText;
259 static bool m_bSaveTransferRunning;
260 int m_iProgress;
261 char m_downloadedUniqueFilename[64];//SCE_SAVE_DATA_DIRNAME_DATA_MAXSIZE];
262 bool m_saveTransferDownloadCancelled;
263 void LaunchSaveTransfer();
264 static int CreateDummySaveDataCallback(LPVOID lpParam,bool bRes);
265 static int CrossSaveGetSavesInfoCallback(LPVOID lpParam, SAVE_DETAILS *pSaveDetails,bool bRes);
266 static int LoadCrossSaveDataCallback(void *pParam,bool bIsCorrupt, bool bIsOwner);
267 static int CrossSaveFinishedCallback(void *pParam,int iPad,C4JStorage::EMessageResult result);
268 static int CrossSaveDeleteOnErrorReturned(LPVOID lpParam,bool bRes);
269 static int RemoteSaveNotFoundCallback(void *pParam,int iPad,C4JStorage::EMessageResult result);
270 static int DownloadSonyCrossSaveThreadProc( LPVOID lpParameter );
271 static void SaveTransferReturned(LPVOID lpParam, SonyRemoteStorage::Status s, int error_code);
272 static ConsoleSaveFile* SonyCrossSaveConvert();
273
274 static void CancelSaveTransferCallback(LPVOID lpParam);
275public:
276 static bool isSaveTransferRunning() { return m_bSaveTransferRunning; }
277private:
278#endif
279
280#ifdef SONY_REMOTE_STORAGE_UPLOAD
281 enum eSaveUploadState
282 {
283 eSaveUpload_Idle,
284 eSaveUpload_UploadingFileData,
285 eSaveUpload_FileDataUploaded,
286 eSaveUpload_Cancelled,
287 eSaveUpload_Error,
288 esaveUpload_Finished
289 };
290
291 eSaveUploadState m_eSaveUploadState;
292 bool m_saveTransferUploadCancelled;
293
294 void LaunchSaveUpload();
295 static int UploadSonyCrossSaveThreadProc( LPVOID lpParameter );
296 static void SaveUploadReturned(LPVOID lpParam, SonyRemoteStorage::Status s, int error_code);
297 static void CancelSaveUploadCallback(LPVOID lpParam);
298 static int SaveTransferDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
299 static int CrossSaveUploadFinishedCallback(void *pParam,int iPad,C4JStorage::EMessageResult result);
300#endif
301
302#if defined _XBOX_ONE || defined __ORBIS__
303 static int CopySaveDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
304 static int CopySaveThreadProc( LPVOID lpParameter );
305 static int CopySaveDataReturned( LPVOID lpParameter, bool success, C4JStorage::ESaveGameState state );
306 static bool CopySaveDataProgress(LPVOID lpParam, int percent);
307 static void CancelCopySaveCallback(LPVOID lpParam);
308 static int CopySaveErrorDialogFinishedCallback(void *pParam,int iPad,C4JStorage::EMessageResult result);
309#endif
310};