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_ControlsMenu.h"
4#include "..\..\Minecraft.h"
5#include "..\..\MultiplayerLocalPlayer.h"
6
7UIScene_ControlsMenu::UIScene_ControlsMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
8{
9 // Setup all the Iggy references we need for this scene
10 initialiseMovie();
11
12 IggyDataValue result;
13 IggyDataValue value[1];
14 value[0].type = IGGY_DATATYPE_number;
15#if defined(_XBOX) || defined(_WIN64)
16 value[0].number = (F64)0;
17#elif defined(_DURANGO)
18 value[0].number = (F64)1;
19#elif defined(__PS3__)
20 value[0].number = (F64)2;
21#elif defined(__ORBIS__)
22 value[0].number = (F64)3;
23#elif defined(__PSVITA__)
24 value[0].number = (F64)4;
25#endif
26 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetPlatform , 1 , value );
27
28 bool bNotInGame=(Minecraft::GetInstance()->level==NULL);
29
30 if(bNotInGame)
31 {
32 LPWSTR layoutString = new wchar_t[ 128 ];
33 swprintf( layoutString, 128, L"%ls", VER_PRODUCTVERSION_STR_W);
34 m_labelVersion.init(layoutString);
35 delete [] layoutString;
36 }
37 // 4J-PB - stop the label showing in the in-game controls menu
38 else
39 {
40 m_labelVersion.init(L" ");
41 }
42 m_bCreativeMode = !bNotInGame && Minecraft::GetInstance()->localplayers[m_iPad] && Minecraft::GetInstance()->localplayers[m_iPad]->abilities.mayfly;
43
44#ifndef __PSVITA__
45#ifdef __ORBIS__
46 // no buttons to initialise if we're running this on PS4 remote play
47 if(!InputManager.UsingRemoteVita())
48#endif
49 {
50 m_buttonLayouts[0].init(L"1", eControl_Button0);
51 m_buttonLayouts[1].init(L"2", eControl_Button1);
52 m_buttonLayouts[2].init(L"3", eControl_Button2);
53 }
54#endif
55
56 m_checkboxInvert.init(app.GetString(IDS_INVERT_LOOK), eControl_InvertLook, app.GetGameSettings(m_iPad,eGameSetting_ControlInvertLook));
57 m_checkboxSouthpaw.init(app.GetString(IDS_SOUTHPAW), eControl_Southpaw, app.GetGameSettings(m_iPad,eGameSetting_ControlSouthPaw));
58
59 m_iSchemeTextA[0]=IDS_CONTROLS_SCHEME0;
60 m_iSchemeTextA[1]=IDS_CONTROLS_SCHEME1;
61 m_iSchemeTextA[2]=IDS_CONTROLS_SCHEME2;
62
63 int iSelected=app.GetGameSettings(m_iPad,eGameSetting_ControlScheme);
64
65#ifndef __PSVITA__
66 LPWSTR layoutString = new wchar_t[ 128 ];
67 swprintf( layoutString, 128, L"%ls : %ls", app.GetString( IDS_CURRENT_LAYOUT ),app.GetString(m_iSchemeTextA[iSelected]));
68#ifdef __ORBIS__
69 if (!InputManager.UsingRemoteVita())
70#endif
71 {
72 m_labelCurrentLayout.init(layoutString);
73 }
74#endif
75
76 m_iCurrentNavigatedControlsLayout = iSelected;
77
78
79#ifdef __ORBIS__
80 // don't set controller layout if we're entering the PS4 remote play scene
81 if(!InputManager.UsingRemoteVita())
82#endif
83 {
84 IggyDataValue result;
85 IggyDataValue value[1];
86 value[0].type = IGGY_DATATYPE_number;
87 value[0].number = (F64)m_iCurrentNavigatedControlsLayout;
88 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetControllerLayout , 1 , value );
89 }
90
91#ifdef __ORBIS__
92 // Set mapping to Vita mapping
93 if (InputManager.UsingRemoteVita()) m_iCurrentNavigatedControlsLayout = 3;
94#elif defined __PSVITA__
95 // Set mapping to Vita mapping
96 if (InputManager.IsVitaTV()) m_iCurrentNavigatedControlsLayout = 1;
97#endif
98
99 for(unsigned int i = 0; i < e_PadCOUNT; ++i)
100 {
101 m_labelsPad[i].init(L"");
102 m_controlLines[i].setVisible(false);
103 }
104 m_bLayoutChanged = false;
105
106
107 PositionAllText(m_iPad);
108}
109
110wstring UIScene_ControlsMenu::getMoviePath()
111{
112#ifdef __ORBIS__
113 if(InputManager.UsingRemoteVita())
114 {
115 return L"ControlsRemotePlay";
116 }
117 else
118#endif
119#ifdef __PSVITA__
120 if(InputManager.IsVitaTV())
121 {
122 return L"ControlsTV";
123 }
124 else
125#endif
126 if(app.GetLocalPlayerCount() > 1)
127 {
128 return L"ControlsSplit";
129 }
130 else
131 {
132 return L"Controls";
133 }
134}
135
136void UIScene_ControlsMenu::updateTooltips()
137{
138 ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK);
139}
140
141void UIScene_ControlsMenu::tick()
142{
143 if(m_bLayoutChanged) PositionAllText(m_iPad);
144 UIScene::tick();
145}
146
147void UIScene_ControlsMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled)
148{
149 //app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d, down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE");
150 ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released);
151
152 switch(key)
153 {
154 case ACTION_MENU_CANCEL:
155 if(pressed)
156 {
157 app.CheckGameSettingsChanged(true,iPad);
158 navigateBack();
159 }
160 break;
161 case ACTION_MENU_OK:
162#ifdef __ORBIS__
163 case ACTION_MENU_TOUCHPAD_PRESS:
164#endif
165 if( pressed )
166 {
167 //CD - Added for audio
168 ui.PlayUISFX(eSFX_Press);
169 }
170 sendInputToMovie(key, repeat, pressed, released);
171 break;
172 case ACTION_MENU_UP:
173 case ACTION_MENU_DOWN:
174 case ACTION_MENU_LEFT:
175 case ACTION_MENU_RIGHT:
176 sendInputToMovie(key, repeat, pressed, released);
177 break;
178 }
179}
180
181void UIScene_ControlsMenu::handleCheckboxToggled(F64 controlId, bool selected)
182{
183 switch((int)controlId)
184 {
185 case eControl_InvertLook:
186 app.SetGameSettings(m_iPad,eGameSetting_ControlInvertLook,(unsigned char)( selected ) );
187 break;
188 case eControl_Southpaw:
189 app.SetGameSettings(m_iPad,eGameSetting_ControlSouthPaw,(unsigned char)( selected ) );
190 PositionAllText(m_iPad);
191 break;
192 };
193}
194
195void UIScene_ControlsMenu::handlePress(F64 controlId, F64 childId)
196{
197 int control = (int)controlId;
198 switch(control)
199 {
200 case eControl_Button0:
201 case eControl_Button1:
202 case eControl_Button2:
203 app.SetGameSettings(m_iPad,eGameSetting_ControlScheme,(unsigned char)control);
204 LPWSTR layoutString = new wchar_t[ 128 ];
205 swprintf( layoutString, 128, L"%ls : %ls", app.GetString( IDS_CURRENT_LAYOUT ),app.GetString(m_iSchemeTextA[control]));
206#ifdef __ORBIS__
207 if (!InputManager.UsingRemoteVita())
208#endif
209 {
210 m_labelCurrentLayout.setLabel(layoutString);
211 }
212
213 break;
214 };
215}
216
217void UIScene_ControlsMenu::handleFocusChange(F64 controlId, F64 childId)
218{
219 int control = (int)controlId;
220 switch(control)
221 {
222 case eControl_Button0:
223 case eControl_Button1:
224 case eControl_Button2:
225 m_iCurrentNavigatedControlsLayout=control;
226 m_bLayoutChanged = true;
227 break;
228 };
229}
230
231void UIScene_ControlsMenu::PositionAllText(int iPad)
232{
233 for(unsigned int i = 0; i < e_PadCOUNT; ++i)
234 {
235 m_labelsPad[i].setLabel(L"");
236 m_controlLines[i].setVisible(false);
237 }
238
239 if(m_bCreativeMode)
240 {
241 PositionText(iPad,IDS_CONTROLS_JUMPFLY,MINECRAFT_ACTION_JUMP);
242 }
243 else
244 {
245 PositionText(iPad,IDS_CONTROLS_JUMP,MINECRAFT_ACTION_JUMP);
246 }
247 PositionText(iPad,IDS_CONTROLS_INVENTORY,MINECRAFT_ACTION_INVENTORY);
248 PositionText(iPad,IDS_CONTROLS_PAUSE,MINECRAFT_ACTION_PAUSEMENU);
249 if(m_bCreativeMode)
250 {
251 PositionText(iPad,IDS_CONTROLS_SNEAKFLY,MINECRAFT_ACTION_SNEAK_TOGGLE);
252 }
253 else
254 {
255 PositionText(iPad,IDS_CONTROLS_SNEAK,MINECRAFT_ACTION_SNEAK_TOGGLE);
256 }
257 PositionText(iPad,IDS_CONTROLS_USE,MINECRAFT_ACTION_USE);
258 PositionText(iPad,IDS_CONTROLS_ACTION,MINECRAFT_ACTION_ACTION);
259 PositionText(iPad,IDS_CONTROLS_HELDITEM,MINECRAFT_ACTION_RIGHT_SCROLL);
260 PositionText(iPad,IDS_CONTROLS_HELDITEM,MINECRAFT_ACTION_LEFT_SCROLL);
261 PositionText(iPad,IDS_CONTROLS_DROP,MINECRAFT_ACTION_DROP);
262 PositionText(iPad,IDS_CONTROLS_CRAFTING,MINECRAFT_ACTION_CRAFTING);
263 PositionText(iPad,IDS_CONTROLS_THIRDPERSON,MINECRAFT_ACTION_RENDER_THIRD_PERSON);
264 PositionText(iPad,IDS_CONTROLS_PLAYERS,MINECRAFT_ACTION_GAME_INFO);
265
266 // Swap for southpaw.
267 if ( app.GetGameSettings(m_iPad,eGameSetting_ControlSouthPaw) )
268 {
269 // Move
270 PositionText(iPad,IDS_CONTROLS_LOOK,MINECRAFT_ACTION_RIGHT);
271 // Look
272 PositionText(iPad,IDS_CONTROLS_MOVE,MINECRAFT_ACTION_LOOK_RIGHT);
273 }
274 else // Normal right handed.
275 {
276 // Move
277 PositionText(iPad,IDS_CONTROLS_MOVE,MINECRAFT_ACTION_RIGHT);
278 // Look
279 PositionText(iPad,IDS_CONTROLS_LOOK,MINECRAFT_ACTION_LOOK_RIGHT);
280 }
281
282 bool layoutHasDpadFly;
283#ifdef __PSVITA__
284 layoutHasDpadFly = m_iCurrentNavigatedControlsLayout == 1;
285#else
286 layoutHasDpadFly = m_iCurrentNavigatedControlsLayout == 0;
287#endif
288
289 // If we're in controls mode 1, and creative mode show the dpad for Creative Mode
290 if(m_bCreativeMode && layoutHasDpadFly)
291 {
292 PositionText(iPad,IDS_CONTROLS_DPAD,MINECRAFT_ACTION_DPAD_LEFT);
293 }
294 m_bLayoutChanged = false;
295}
296
297void UIScene_ControlsMenu::PositionText(int iPad,int iTextID, unsigned char ucAction)
298{
299 unsigned int uiVal = InputManager.GetGameJoypadMaps(m_iCurrentNavigatedControlsLayout, ucAction);
300
301 if (uiVal & _360_JOY_BUTTON_A) PositionTextDirect(iPad, iTextID, e_PadA, true);
302 if (uiVal & _360_JOY_BUTTON_B) PositionTextDirect(iPad, iTextID, e_PadB, true);
303 if (uiVal & _360_JOY_BUTTON_X) PositionTextDirect(iPad, iTextID, e_PadX, true);
304 if (uiVal & _360_JOY_BUTTON_Y) PositionTextDirect(iPad, iTextID, e_PadY, true);
305 if (uiVal & _360_JOY_BUTTON_BACK)
306 {
307#ifdef __ORBIS__
308 PositionTextDirect(iPad, iTextID, (InputManager.UsingRemoteVita() ? e_PadTouch : e_PadBack), true);
309#else
310 PositionTextDirect(iPad, iTextID, e_PadBack, true);
311#endif
312 }
313 if (uiVal & _360_JOY_BUTTON_START) PositionTextDirect(iPad, iTextID, e_PadStart, true);
314 if (uiVal & _360_JOY_BUTTON_RB) PositionTextDirect(iPad, iTextID, e_PadRB, true);
315 if (uiVal & _360_JOY_BUTTON_LB) PositionTextDirect(iPad, iTextID, e_PadLB, true);
316 if (uiVal & _360_JOY_BUTTON_RTHUMB) PositionTextDirect(iPad, iTextID, e_PadRS_1, true);
317 if (uiVal & _360_JOY_BUTTON_LTHUMB) PositionTextDirect(iPad, iTextID, e_PadLS_1, true);
318 // Look
319 if (uiVal & _360_JOY_BUTTON_RSTICK_RIGHT) PositionTextDirect(iPad, iTextID, e_PadRS_2, true);
320 // Move
321 if (uiVal & _360_JOY_BUTTON_LSTICK_RIGHT) PositionTextDirect(iPad, iTextID, e_PadLS_2, true);
322 if (uiVal & _360_JOY_BUTTON_RT) PositionTextDirect(iPad, iTextID, e_PadRT, true);
323 if (uiVal & _360_JOY_BUTTON_LT) PositionTextDirect(iPad, iTextID, e_PadLT, true);
324 if (uiVal & _360_JOY_BUTTON_DPAD_RIGHT) PositionTextDirect(iPad, iTextID, e_PadDPadRight, true);
325 if (uiVal & _360_JOY_BUTTON_DPAD_LEFT) PositionTextDirect(iPad, iTextID, e_PadDPadLeft, true);
326 if (uiVal & _360_JOY_BUTTON_DPAD_UP) PositionTextDirect(iPad, iTextID, e_PadDPadUp, true);
327 if (uiVal & _360_JOY_BUTTON_DPAD_DOWN) PositionTextDirect(iPad, iTextID, e_PadDPadDown, true);
328 }
329
330void UIScene_ControlsMenu::PositionTextDirect(int iPad,int iTextID, int iControlDetailsIndex, bool bShow)
331{
332 LPCWSTR text = app.GetString(iTextID);
333
334 m_labelsPad[iControlDetailsIndex].setLabel(text);
335 m_controlLines[iControlDetailsIndex].setVisible(bShow);
336}