aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/PSVita/PSVita_App.h
blob: 5e31a3bea7d1bfd76a54d78f24611480f8056149 (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
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
#pragma once

class C4JStringTable;
//#include <np_toolkit.h>

#include "..\..\Common\Network\Sony\SonyCommerce.h"
#include "..\..\Common\Network\Sony\SonyRemoteStorage.h"

#define PRODUCT_CODE_SIZE 9
#define SAVEFOLDERPREFIX_SIZE 10
#define COMMERCE_CATEGORY_SIZE 19
#define UPGRADE_KEY_SIZE 59
#define SKU_POSTFIX_SIZE 4

enum EProductSKU
{
	e_sku_SCEE,
	e_sku_SCEA,
	e_sku_SCEJ
};

typedef struct 
{
	char chProductCode[PRODUCT_CODE_SIZE+1];
	char chSaveFolderPrefix[SAVEFOLDERPREFIX_SIZE+1];
	char chDiscSaveFolderPrefix[SAVEFOLDERPREFIX_SIZE+1];
	char chCommerceCategory[COMMERCE_CATEGORY_SIZE+1];
//	char chTexturePackID[SCE_TOOLKIT_NP_COMMERCE_CATEGORY_ID_LEN+1];
	char chUpgradeKey[UPGRADE_KEY_SIZE+1];
	char chSkuPostfix[SKU_POSTFIX_SIZE+1];
	EProductSKU	eProductSKU;
}
PRODUCTCODES;	

//class SonyRemoteStorage;

// MGH - moved these to the storage lib, as we need this data when parsing the DLC folders 
// enum e_SONYDLCType
// {
// 	eSONYDLCType_SkinPack=0,
// 	eSONYDLCType_TexturePack,
// 	eSONYDLCType_MashUpPack,
// 	eSONYDLCType_All
// };
// 
// typedef struct
// {
// 	char chDLCKeyname[16];
// 	//char chDLCTitle[64];
// 	e_SONYDLCType eDLCType;
// 	int iFirstSkin;
// 	int iConfig; // used for texture pack data files
// }
// SONYDLC;
//

struct SceSaveDataDialogParam;

class CConsoleMinecraftApp : public CMinecraftApp 
{
	ImageFileBuffer m_ThumbnailBuffer;
	ImageFileBuffer m_SaveImageBuffer;
public:
	CConsoleMinecraftApp();	

	virtual void SetRichPresenceContext(int iPad, int contextId);

	virtual void StoreLaunchData();
	virtual void ExitGame();
	virtual void FatalLoadError();

	virtual void CaptureSaveThumbnail();
	virtual void GetSaveThumbnail(PBYTE*,DWORD*) {}; // NOT USED
	virtual void GetSaveThumbnail(PBYTE *ppbThumbnailData,DWORD *pdwThumbnailSize,PBYTE *ppbDataImage,DWORD *pdwSizeImage);
	virtual void ReleaseSaveThumbnail();
	virtual void GetScreenshot(int iPad,PBYTE *pbData,DWORD *pdwSize);

	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);

	// BANNED LEVEL LIST
	virtual void ReadBannedList(int iPad, eTMSAction action=(eTMSAction)0, bool bCallback=false) {}

	C4JStringTable *GetStringTable()																									{ return nullptr;}

	// original code
	virtual void TemporaryCreateGameStart();




	BOOL ReadProductCodes();
	char *GetProductCode();
	char *GetSaveFolderPrefix();
	char *GetCommerceCategory();
	char *GetTexturePacksCategoryID();
	char *GetUpgradeKey();
	EProductSKU GetProductSKU();
	bool IsJapaneseSKU();
	bool IsEuropeanSKU();
	bool IsAmericanSKU();
	//char *GetSKUPostfix();
	SONYDLC *GetSONYDLCInfo(char *pchTitle);
	SONYDLC *GetSONYDLCInfo(int iTexturePackID);

	int GetiFirstSkinFromName(char *pchName);
	int GetiConfigFromName(char *pchName);
	eDLCContentType GetDLCTypeFromName(char *pchDLCName);
	bool GetTrialFromName(char *pchDLCName);

	// PS3 COMMERCE
	enum eUI_DLC_State
	{
		eCommerce_State_Offline,
		eCommerce_State_Online,
		eCommerce_State_Error,
		eCommerce_State_Init,
		eCommerce_State_Init_Pending,
		eCommerce_State_GetCategories,
		eCommerce_State_GetCategories_Pending,
		eCommerce_State_GetProductList,
		eCommerce_State_GetProductList_Pending,
		eCommerce_State_AddProductInfoDetailed,
		eCommerce_State_AddProductInfoDetailed_Pending,
		eCommerce_State_RegisterDLC,
		eCommerce_State_Checkout,
		eCommerce_State_Checkout_WaitingForSession,
		eCommerce_State_Checkout_SessionStarted,
		eCommerce_State_Checkout_Pending,
		eCommerce_State_DownloadAlreadyPurchased,
		eCommerce_State_DownloadAlreadyPurchased_WaitingForSession,
		eCommerce_State_DownloadAlreadyPurchased_SessionStarted,
		eCommerce_State_DownloadAlreadyPurchased_Pending,
		eCommerce_State_UpgradeTrial,
		eCommerce_State_UpgradeTrial_WaitingForSession,
		eCommerce_State_UpgradeTrial_SessionStarted,
		eCommerce_State_UpgradeTrial_Pending,
	};

	void AppEventTick();

	bool CheckForEmptyStore(int iPad);

	void CommerceInit();
	void CommerceTick();
	bool GetCommerceCategoriesRetrieved();
	bool GetCommerceProductListRetrieved();
	bool GetCommerceProductListInfoRetrieved();
	int GetCommerceState();
	SonyCommerce* GetCommerce() { return m_pCommerce; }
	SonyCommerce::CategoryInfo *GetCategoryInfo();
	std::vector<SonyCommerce::ProductInfo>* GetProductList(int iIndex); // default to fail if the additional details are not retrieved
	SonyCommerce::ProductInfoDetailed *GetProductInfoDetailed();
	void ClearCommerceDetails(); // wipe out details on a PSN sign out
	void Checkout(char *pchSkuID);
	void DownloadAlreadyPurchased(char *pchSkuID);
	bool UpgradeTrial();
	bool DLCAlreadyPurchased(char *pchTitle);
	char *GetSkuIDFromProductList();
	void GetDLCSkuIDFromProductList(char *,char *);
	unordered_map<wstring, SONYDLC *>* GetSonyDLCMap() { return &m_SONYDLCMap; }
	static void CommerceInitCallback(LPVOID lpParam,int err);
	static void CommerceGetCategoriesCallback(LPVOID lpParam,int err);
	static void CommerceGetProductListCallback(LPVOID lpParam,int err);
	//	static void CommerceGetDetailedProductInfoCallback(LPVOID lpParam,int err);
	static void CommerceAddDetailedProductInfoCallback(LPVOID lpParam,int err);
	static void CommerceCheckoutCallback(LPVOID lpParam,int err);

	static void CheckoutSessionStartedCallback(LPVOID lpParam,int err);
	static void DownloadAlreadyPurchasedSessionStartedCallback(LPVOID lpParam,int err);
	static void UpgradeTrialSessionStartedCallback(LPVOID lpParam,int err);

	SonyRemoteStorage* getRemoteStorage() { return m_pRemoteStorage; }

	void SaveDataTick();
	static void Callback_SaveGameIncomplete(void *pParam, C4JStorage::ESaveIncompleteType saveIncompleteType, int blocksRequired);
	static int	NoSaveSpaceReturned(void *pParam,int iPad,C4JStorage::EMessageResult result);
	static int cbConfirmDeleteMessageBox(void *pParam,int iPad,const C4JStorage::EMessageResult);

private:
	bool m_bSaveIncompleteDialogRunning;

	void initSaveIncompleteDialog(int spaceNeeded);
	void updateSaveIncompleteDialog();
	void finishSaveIncompleteDialog();

	enum ESaveDataDeleteDialogState
	{
		eSaveDataDeleteState_idle,
		eSaveDataDeleteState_waitingForUser,
		eSaveDataDeleteState_userConfirmation,
		eSaveDataDeleteState_deleting,

		eSaveDataDeleteState_continue,
		eSaveDataDeleteState_abort,

	} m_bSaveDataDeleteDialogState;

	void initSaveDataDeleteDialog();
	void updateSaveDataDeleteDialog();
	void finishSaveDataDeleteDialog();
	
	void getSaveDataDeleteDialogParam(SceSaveDataDialogParam *baseParam);
	void releaseSaveDataDeleteDialogParam(SceSaveDataDialogParam *baseParam);

	static int cbSaveDataDeleted(LPVOID pParam, const bool);

	PSAVE_INFO m_pSaveToDelete;

	void finishedDeletingSaves(bool bContinue);

	bool m_bCommerceCategoriesRetrieved;
	bool m_bCommerceInitialised;
	bool m_bCommerceProductListRetrieved;
	bool m_bProductListAdditionalDetailsRetrieved;
	char m_pchSkuID[SCE_NP_COMMERCE2_SKU_ID_LEN];

	int m_eCommerce_State;
	int m_ProductListRetrievedC;
	int m_ProductListAdditionalDetailsC;
	int m_ProductListCategoriesC;
	int m_iCurrentCategory;
	int m_iCurrentProduct;

 	SonyCommerce *m_pCommerce;
	SonyCommerce::CategoryInfo m_CategoryInfo;
	std::vector<SonyCommerce::ProductInfo>* m_ProductListA;
	SonyCommerce::ProductInfo* m_pCheckoutProductInfo;
	//	SonyCommerce::ProductInfoDetailed m_ProductInfoDetailed;

	PRODUCTCODES ProductCodes;
	unordered_map<wstring, SONYDLC *> m_SONYDLCMap;


	bool m_bVoiceChatAndUGCRestricted;
	SonyRemoteStorage* m_pRemoteStorage;

};

extern CConsoleMinecraftApp app;