the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "UI.h"
3#include "UIScene_QuadrantSignin.h"
4#include "..\..\Minecraft.h"
5#if defined(__ORBIS__)
6#include "Common\Network\Sony\SonyHttp.h"
7#endif
8
9UIScene_QuadrantSignin::UIScene_QuadrantSignin(int iPad, void *_initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
10{
11 // Setup all the Iggy references we need for this scene
12 initialiseMovie();
13
14 m_signInInfo = *((SignInInfo *)_initData);
15
16 m_bIgnoreInput = false;
17
18 m_lastRequestedAvatar = -1;
19
20 _initQuadrants();
21
22#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__)
23 if(InputManager.IsCircleCrossSwapped())
24 {
25 IggyDataValue result;
26 IggyDataValue value[1];
27 value[0].type = IGGY_DATATYPE_boolean;
28 value[0].boolval = true;
29 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetABSwap , 1 , value );
30 }
31#endif
32
33 parentLayer->addComponent(iPad,eUIComponent_MenuBackground);
34}
35
36UIScene_QuadrantSignin::~UIScene_QuadrantSignin()
37{
38 m_parentLayer->removeComponent(eUIComponent_MenuBackground);
39}
40
41wstring UIScene_QuadrantSignin::getMoviePath()
42{
43 return L"QuadrantSignin";
44}
45
46void UIScene_QuadrantSignin::updateTooltips()
47{
48 ui.SetTooltips(m_iPad, IDS_TOOLTIPS_CONTINUE, IDS_TOOLTIPS_CANCEL);
49}
50
51// Returns true if this scene has focus for the pad passed in
52bool UIScene_QuadrantSignin::hasFocus(int iPad)
53{
54 // Allow input from any controller
55 return bHasFocus;
56}
57
58bool UIScene_QuadrantSignin::hidesLowerScenes()
59{
60 // This is a Modal dialog, so don't need to hide the scene behind
61 return false;
62}
63
64void UIScene_QuadrantSignin::tick()
65{
66 if(!getMovie()) return;
67
68 UIScene::tick();
69
70 updateState();
71}
72
73void UIScene_QuadrantSignin::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled)
74{
75 app.DebugPrintf("UIScene_QuadrantSignin handling input for pad %d, key %d, repeat- %s, pressed- %s, released- %s\n", iPad, key, repeat?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE");
76
77 if(!m_bIgnoreInput)
78 {
79 ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released);
80
81 switch(key)
82 {
83 case ACTION_MENU_CANCEL:
84 {
85 if(pressed)
86 {
87#ifdef _XBOX_ONE
88 if(InputManager.IsPadLocked(iPad))
89 {
90 if(iPad != ProfileManager.GetPrimaryPad())
91 {
92 ProfileManager.RemoveGamepadFromGame(iPad);
93 }
94 else
95#endif
96 {
97 m_bIgnoreInput = true;
98 m_signInInfo.Func(m_signInInfo.lpParam,false,iPad);
99 ProfileManager.CancelProfileAvatarRequest();
100
101 navigateBack();
102 }
103 }
104#ifdef _XBOX_ONE
105 }
106#endif
107 }
108 break;
109 case ACTION_MENU_OK:
110#ifdef __ORBIS__
111 case ACTION_MENU_TOUCHPAD_PRESS:
112#endif
113 if(pressed)
114 {
115 m_bIgnoreInput = true;
116#ifdef _XBOX_ONE
117 if(ProfileManager.IsSignedIn(iPad)&&InputManager.IsPadLocked(iPad))
118#else
119 if(ProfileManager.IsSignedIn(iPad))
120#endif
121 {
122 app.DebugPrintf("Signed in pad pressed\n");
123 ProfileManager.CancelProfileAvatarRequest();
124
125#ifdef _XBOX_ONE
126 // On Durango, if we don't navigate forward here, then when we are on the main menu, it (re)gains focus & that causes our users to get cleared
127 ui.NavigateToScene(m_iPad, eUIScene_Timer);
128#endif
129 navigateBack();
130 m_signInInfo.Func(m_signInInfo.lpParam,true,m_iPad);
131 }
132 else
133 {
134#ifdef _XBOX_ONE
135 if(ProfileManager.IsSignedIn(0)&&!InputManager.IsPadLocked(0))
136 {
137 app.DebugPrintf("Signed in pad with no controller bound pressed\n");
138 ProfileManager.RequestSignInUI(false, false, false, true, false,&UIScene_QuadrantSignin::SignInReturned, this, iPad);
139 }
140 else
141#endif
142 {
143 app.DebugPrintf("Non-signed in pad pressed\n");
144 ProfileManager.RequestSignInUI(false, false, false, true, true,&UIScene_QuadrantSignin::SignInReturned, this, iPad);
145 }
146 }
147 }
148 break;
149 case ACTION_MENU_UP:
150 case ACTION_MENU_DOWN:
151 if(pressed)
152 {
153 sendInputToMovie(key, repeat, pressed, released);
154 }
155 break;
156 }
157 }
158
159 handled = true;
160}
161
162#ifdef _XBOX_ONE
163int UIScene_QuadrantSignin::SignInReturned(void *pParam,bool bContinue, int iPad, int iController)
164#else
165int UIScene_QuadrantSignin::SignInReturned(void *pParam,bool bContinue, int iPad)
166#endif
167{
168 app.DebugPrintf("SignInReturned for pad %d\n", iPad);
169
170 UIScene_QuadrantSignin *pClass = (UIScene_QuadrantSignin *)pParam;
171
172#ifdef _XBOX_ONE
173 if(bContinue && pClass->m_signInInfo.requireOnline && ProfileManager.IsSignedIn(iPad))
174 {
175 if( !InputManager.IsPadLocked(iPad) )
176 {
177 ProfileManager.ForcePrimaryPadController(iController);
178 }
179 ProfileManager.CheckMultiplayerPrivileges(iPad, true, &checkAllPrivilegesCallback, pClass);
180 }
181 else
182#endif
183 {
184 pClass->m_bIgnoreInput = false;
185 pClass->updateState();
186 }
187
188 return 0;
189}
190
191#ifdef _XBOX_ONE
192void UIScene_QuadrantSignin::checkAllPrivilegesCallback(LPVOID lpParam, bool hasPrivileges, int iPad)
193{
194 UIScene_QuadrantSignin* pClass = (UIScene_QuadrantSignin*)lpParam;
195
196 if(!hasPrivileges)
197 {
198 ProfileManager.RemoveGamepadFromGame(iPad);
199 }
200 pClass->m_bIgnoreInput = false;
201 pClass->updateState();
202}
203#endif
204
205void UIScene_QuadrantSignin::updateState()
206{
207 for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i)
208 {
209 if(ProfileManager.IsSignedIn(i) && InputManager.IsPadConnected(i))
210 {
211 //app.DebugPrintf("Index %d is signed in, display name - '%s'\n", i, ProfileManager.GetDisplayName(i).data());
212
213#ifdef _XBOX_ONE
214 if(!InputManager.IsPadLocked(i))
215 {
216 setControllerState(i, eControllerStatus_PressToJoin_LoggedIn);
217 }
218 else
219#endif
220 {
221 setControllerState(i, eControllerStatus_PlayerDetails);
222 }
223
224 m_labelDisplayName[i].setLabel(ProfileManager.GetDisplayName(i));
225 //m_buttonControllers[i].setLabel(app.GetString(IDS_TOOLTIPS_CONTINUE),i);
226
227 if(!m_iconRequested[i])
228 {
229 app.DebugPrintf(app.USER_SR, "Requesting avatar for %d\n", i);
230 if(ProfileManager.GetProfileAvatar(i, &UIScene_QuadrantSignin::AvatarReturned, this))
231 {
232 m_iconRequested[i] = true;
233 m_lastRequestedAvatar = i;
234 }
235 }
236 }
237 else if(InputManager.IsPadConnected(i))
238 {
239 //app.DebugPrintf("Index %d is not signed in\n", i);
240
241 setControllerState(i, eControllerStatus_PressToJoin);
242 m_labelDisplayName[i].setLabel(L"");
243 m_iconRequested[i] = false;
244 }
245 else
246 {
247 //app.DebugPrintf("Index %d is not connected\n", i);
248
249 setControllerState(i, eControllerStatus_ConnectController);
250 m_iconRequested[i] = false;
251 }
252 }
253}
254
255void UIScene_QuadrantSignin::setControllerState(int iPad, EControllerStatus state)
256{
257 if(m_controllerStatus[iPad] != state)
258 {
259 m_controllerStatus[iPad] = state;
260
261 IggyDataValue result;
262 IggyDataValue value[2];
263 value[0].type = IGGY_DATATYPE_number;
264 value[0].number = iPad;
265
266 value[1].type = IGGY_DATATYPE_number;
267 value[1].number = (int)state;
268
269 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetControllerStatus , 2 , value );
270 }
271}
272
273int UIScene_QuadrantSignin::AvatarReturned(LPVOID lpParam,PBYTE pbThumbnail,DWORD dwThumbnailBytes)
274{
275 UIScene_QuadrantSignin *pClass = (UIScene_QuadrantSignin *)lpParam;
276 app.DebugPrintf(app.USER_SR,"AvatarReturned callback\n");
277 if(pbThumbnail != NULL)
278 {
279 // 4J-JEV - Added to ensure each new texture gets a unique name.
280 static unsigned int quadrantImageCount = 0;
281
282 wchar_t iconName[32];
283 swprintf(iconName,32,L"quadrantImage%05d",quadrantImageCount++);
284
285 pClass->registerSubstitutionTexture(iconName,pbThumbnail,dwThumbnailBytes,true);
286 pClass->m_bitmapIcon[pClass->m_lastRequestedAvatar].setTextureName(iconName);
287 }
288
289 pClass->m_lastRequestedAvatar = -1;
290
291 return 0;
292}
293
294void UIScene_QuadrantSignin::_initQuadrants()
295{
296 for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i)
297 {
298 m_iconRequested[i] = false;
299
300 m_labelPressToJoin[i].init(IDS_MUST_SIGN_IN_TITLE);
301 m_labelConnectController[i].init(L"");
302 m_labelAccountType[i].init(L"");
303
304 m_controllerStatus[i] = eControllerStatus_ConnectController;
305
306 if(ProfileManager.IsSignedIn(i))
307 {
308 app.DebugPrintf("Index %d is signed in\n", i);
309
310#ifdef _XBOX_ONE
311 if(!InputManager.IsPadLocked(i))
312 {
313 setControllerState(i, eControllerStatus_PressToJoin_LoggedIn);
314 }
315 else
316#endif
317 {
318 setControllerState(i, eControllerStatus_PlayerDetails);
319 }
320
321 m_labelDisplayName[i].init(ProfileManager.GetDisplayName(i));
322 }
323 else if(InputManager.IsPadConnected(i))
324 {
325 app.DebugPrintf("Index %d is not signed in\n", i);
326
327 setControllerState(i, eControllerStatus_PressToJoin);
328 m_labelDisplayName[i].init(L"");
329 }
330 else
331 {
332 app.DebugPrintf("Index %d is not connected\n", i);
333
334 setControllerState(i, eControllerStatus_ConnectController);
335 }
336 }
337}
338
339void UIScene_QuadrantSignin::handleReload()
340{
341 _initQuadrants();
342}