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_HowToPlay.h"
4#include "..\..\..\Minecraft.World\StringHelpers.h"
5
6static UIScene_HowToPlay::SHowToPlayPageDef gs_aPageDefs[ eHowToPlay_NumPages ] =
7{
8 { IDS_HOW_TO_PLAY_WHATSNEW, 0, 0}, // eHowToPlay_WhatsNew
9 { IDS_HOW_TO_PLAY_BASICS, 0, 0}, // eHowToPlay_Basics
10 { IDS_HOW_TO_PLAY_MULTIPLAYER, 0, 0}, // eHowToPlay_Multiplayer
11 { IDS_HOW_TO_PLAY_HUD, 0, 0}, // eHowToPlay_HUD
12 { IDS_HOW_TO_PLAY_CREATIVE, UIScene_HowToPlay::eHowToPlay_LabelCreativeInventory, 1}, // eHowToPlay_Creative
13 { IDS_HOW_TO_PLAY_INVENTORY, UIScene_HowToPlay::eHowToPlay_LabelIInventory, 1}, // eHowToPlay_Inventory
14 { IDS_HOW_TO_PLAY_CHEST, UIScene_HowToPlay::eHowToPlay_LabelSCInventory, 2}, // eHowToPlay_Chest
15 { IDS_HOW_TO_PLAY_LARGECHEST, UIScene_HowToPlay::eHowToPlay_LabelLCInventory, 2}, // eHowToPlay_LargeChest
16 { IDS_HOW_TO_PLAY_ENDERCHEST, 0, 0}, // eHowToPlay_EnderChest
17 { IDS_HOW_TO_PLAY_CRAFTING, UIScene_HowToPlay::eHowToPlay_LabelCItem, 3}, // eHowToPlay_InventoryCrafting
18 { IDS_HOW_TO_PLAY_CRAFT_TABLE, UIScene_HowToPlay::eHowToPlay_LabelCTItem, 3}, // eHowToPlay_CraftTable
19 { IDS_HOW_TO_PLAY_FURNACE, UIScene_HowToPlay::eHowToPlay_LabelFFuel, 4}, // eHowToPlay_Furnace
20 { IDS_HOW_TO_PLAY_DISPENSER, UIScene_HowToPlay::eHowToPlay_LabelDText, 2}, // eHowToPlay_Dispenser
21 { IDS_HOW_TO_PLAY_BREWING, UIScene_HowToPlay::eHowToPlay_LabelBBrew, 2}, // eHowToPlay_Brewing
22 { IDS_HOW_TO_PLAY_ENCHANTMENT, UIScene_HowToPlay::eHowToPlay_LabelEEnchant, 2}, // eHowToPlay_Enchantment
23 { IDS_HOW_TO_PLAY_ANVIL, UIScene_HowToPlay::eHowToPlay_LabelAnvil_Inventory, 3}, // eHowToPlay_Anvil
24 { IDS_HOW_TO_PLAY_FARMANIMALS, 0, 0}, // eHowToPlay_Breeding
25 { IDS_HOW_TO_PLAY_BREEDANIMALS, 0, 0}, // eHowToPlay_Breeding
26 { IDS_HOW_TO_PLAY_TRADING, UIScene_HowToPlay::eHowToPlay_LabelTrading_Inventory, 5}, // eHowToPlay_Trading
27 { IDS_HOW_TO_PLAY_HORSES, 0, 0}, // eHowToPlay_Horses
28 { IDS_HOW_TO_PLAY_BEACONS, 0, 0}, // eHowToPlay_Beacons
29 { IDS_HOW_TO_PLAY_FIREWORKS, 0, 0}, // eHowToPlay_Fireworks
30 { IDS_HOW_TO_PLAY_HOPPERS, 0, 0}, // eHowToPlay_Hoppers
31 { IDS_HOW_TO_PLAY_DROPPERS, 0, 0}, // eHowToPlay_Droppers
32 { IDS_HOW_TO_PLAY_NETHERPORTAL, 0, 0}, // eHowToPlay_NetherPortal
33 { IDS_HOW_TO_PLAY_THEEND, 0, 0}, // eHowToPlay_NetherPortal
34#ifdef _XBOX
35 { IDS_HOW_TO_PLAY_SOCIALMEDIA, 0, 0}, // eHowToPlay_SocialMedia
36 { IDS_HOW_TO_PLAY_BANLIST, 0, 0}, // eHowToPlay_BanList
37#endif
38 { IDS_HOW_TO_PLAY_HOSTOPTIONS, 0, 0}, // eHowToPlay_HostOptions
39};
40
41int gs_pageToFlashMapping[eHowToPlay_NumPages] =
42{
43 0, //eHowToPlay_WhatsNew = 0,
44 1, //eHowToPlay_Basics,
45 2, //eHowToPlay_Multiplayer,
46 3, //eHowToPlay_HUD,
47 4, //eHowToPlay_Creative,
48 5, //eHowToPlay_Inventory,
49 6, //eHowToPlay_Chest,
50 7, //eHowToPlay_LargeChest,
51 23, //eHowToPlay_Enderchest,
52 8, //eHowToPlay_InventoryCrafting,
53 9, //eHowToPlay_CraftTable,
54 10, //eHowToPlay_Furnace,
55 11, //eHowToPlay_Dispenser,
56
57 12, //eHowToPlay_Brewing,
58 13, //eHowToPlay_Enchantment,
59 21, //eHowToPlay_Anvil,
60 14, //eHowToPlay_FarmingAnimals,
61 15, //eHowToPlay_Breeding,
62 22, //eHowToPlay_Trading,
63
64 24, //eHowToPlay_Horses
65 25, //eHowToPlay_Beacons
66 26, //eHowToPlay_Fireworks
67 27, //eHowToPlay_Hoppers
68 28, //eHowToPlay_Droppers
69
70 16, //eHowToPlay_NetherPortal,
71 17, //eHowToPlay_TheEnd,
72#ifdef _XBOX
73 18, //eHowToPlay_SocialMedia,
74 19, //eHowToPlay_BanList,
75#endif
76 20, //eHowToPlay_HostOptions,
77};
78
79UIScene_HowToPlay::UIScene_HowToPlay(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
80{
81 // Setup all the Iggy references we need for this scene
82 initialiseMovie();
83
84 wstring inventoryString = app.GetString(IDS_INVENTORY);
85 m_labels[ eHowToPlay_LabelCTItem].init(app.GetString(IDS_ITEM_HATCHET_WOOD));
86 m_labels[ eHowToPlay_LabelCTGroup].init(app.GetString(IDS_GROUPNAME_TOOLS));
87 m_labels[ eHowToPlay_LabelCTInventory3x3].init(inventoryString);
88 m_labels[ eHowToPlay_LabelCItem].init(app.GetString(IDS_TILE_WORKBENCH));
89 m_labels[ eHowToPlay_LabelCGroup].init(app.GetString(IDS_GROUPNAME_STRUCTURES));
90 m_labels[ eHowToPlay_LabelCInventory2x2].init(inventoryString);
91 m_labels[ eHowToPlay_LabelFFuel].init(app.GetString(IDS_FUEL));
92 m_labels[ eHowToPlay_LabelFInventory].init(inventoryString);
93 m_labels[ eHowToPlay_LabelFIngredient].init(app.GetString(IDS_INGREDIENT));
94 m_labels[ eHowToPlay_LabelFChest].init(app.GetString(IDS_FURNACE));
95 m_labels[ eHowToPlay_LabelLCInventory].init(inventoryString);
96 m_labels[ eHowToPlay_LabelCreativeInventory].init(app.GetString(IDS_GROUPNAME_BUILDING_BLOCKS));
97 m_labels[ eHowToPlay_LabelLCChest].init(app.GetString(IDS_CHEST_LARGE));
98 m_labels[ eHowToPlay_LabelSCInventory].init(inventoryString);
99 m_labels[ eHowToPlay_LabelSCChest].init(app.GetString(IDS_CHEST));
100 m_labels[ eHowToPlay_LabelIInventory].init(inventoryString);
101 m_labels[ eHowToPlay_LabelDInventory].init(inventoryString);
102 m_labels[ eHowToPlay_LabelDText].init(app.GetString(IDS_DISPENSER));
103 m_labels[ eHowToPlay_LabelEEnchant].init(app.GetString(IDS_ENCHANT));
104 m_labels[ eHowToPlay_LabelEInventory].init(inventoryString);
105 m_labels[ eHowToPlay_LabelBBrew].init(app.GetString(IDS_BREWING_STAND));
106 m_labels[ eHowToPlay_LabelBInventory].init(inventoryString);
107 m_labels[ eHowToPlay_LabelAnvil_Inventory].init(inventoryString.c_str());
108
109 wstring wsTemp = app.GetString(IDS_REPAIR_COST);
110 wsTemp.replace( wsTemp.find(L"%d"), 2, wstring(L"8") );
111
112 m_labels[ eHowToPlay_LabelAnvil_Cost].init(wsTemp.c_str());
113 m_labels[ eHowToPlay_LabelAnvil_ARepairAndName].init(app.GetString(IDS_REPAIR_AND_NAME));
114 m_labels[ eHowToPlay_LabelTrading_Inventory].init(inventoryString.c_str());
115 m_labels[ eHowToPlay_LabelTrading_Offer2].init(app.GetString(IDS_ITEM_EMERALD));
116 m_labels[ eHowToPlay_LabelTrading_Offer1].init(app.GetString(IDS_ITEM_EMERALD));
117 m_labels[ eHowToPlay_LabelTrading_NeededForTrade].init(app.GetString(IDS_REQUIRED_ITEMS_FOR_TRADE));
118
119 m_labels[ eHowToPlay_LabelBeacon_PrimaryPower].init(app.GetString(IDS_CONTAINER_BEACON_PRIMARY_POWER));
120 m_labels[ eHowToPlay_LabelBeacon_SecondaryPower].init(app.GetString(IDS_CONTAINER_BEACON_SECONDARY_POWER));
121
122 m_labels[ eHowToPlay_LabelFireworksText].init(app.GetString(IDS_HOW_TO_PLAY_MENU_FIREWORKS));
123 m_labels[ eHowToPlay_LabelFireworksInventory].init(inventoryString.c_str());
124
125 m_labels[ eHowToPlay_LabelHopperText].init(app.GetString(IDS_TILE_HOPPER));
126 m_labels[ eHowToPlay_LabelHopperInventory].init(inventoryString.c_str());
127
128 m_labels[ eHowToPlay_LabelDropperText].init(app.GetString(IDS_TILE_DROPPER));
129 m_labels[ eHowToPlay_LabelDropperInventory].init(inventoryString.c_str());
130
131 wsTemp = app.GetString(IDS_VILLAGER_OFFERS_ITEM);
132 wsTemp = replaceAll(wsTemp,L"{*VILLAGER_TYPE*}",app.GetString(IDS_VILLAGER_PRIEST));
133 wsTemp.replace(wsTemp.find(L"%s"),2, app.GetString(IDS_TILE_LIGHT_GEM));
134 m_labels[ eHowToPlay_LabelTrading_VillagerOffers].init(wsTemp.c_str());
135
136 // Extract pad and required page from init data. We just put the data into the pointer rather than using it as an address.
137 size_t uiInitData = ( size_t )( initData );
138
139 EHowToPlayPage eStartPage = ( EHowToPlayPage )( ( uiInitData >> 16 ) & 0xFFF ); // Ignores MSB which is set to 1!
140
141 TelemetryManager->RecordMenuShown(m_iPad, eUIScene_HowToPlay, (ETelemetry_HowToPlay_SubMenuId)eStartPage);
142
143 StartPage( eStartPage );
144}
145
146wstring UIScene_HowToPlay::getMoviePath()
147{
148 if(app.GetLocalPlayerCount() > 1)
149 {
150 return L"HowToPlaySplit";
151 }
152 else
153 {
154 return L"HowToPlay";
155 }
156}
157
158void UIScene_HowToPlay::updateTooltips()
159{
160 // Tool tips.
161 int iPage = ( int )( m_eCurrPage );
162
163 int firstPage = eHowToPlay_WhatsNew;
164
165 // 4J Stu - Add back for future platforms
166#if 0
167 // No What's New for the first PS4 and Xbox One builds
168 if(true)
169 {
170 ++firstPage;
171 }
172#endif
173
174 int iA = -1;
175 int iX = -1;
176 if ( iPage == firstPage )
177 {
178 // No previous page.
179 iA = IDS_HOW_TO_PLAY_NEXT;
180 }
181 else if ( ( iPage + 1 ) == eHowToPlay_NumPages )
182 {
183 // No next page.
184 iX = IDS_HOW_TO_PLAY_PREV;
185 }
186 else
187 {
188 iA = IDS_HOW_TO_PLAY_NEXT;
189 iX = IDS_HOW_TO_PLAY_PREV;
190 }
191 ui.SetTooltips( m_iPad, iA, IDS_TOOLTIPS_BACK, iX );
192}
193
194void UIScene_HowToPlay::handleReload()
195{
196 StartPage( m_eCurrPage );
197}
198
199void UIScene_HowToPlay::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled)
200{
201 ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released);
202
203 switch(key)
204 {
205 case ACTION_MENU_CANCEL:
206 if(pressed)
207 {
208 navigateBack();
209 handled = true;
210 }
211 break;
212 case ACTION_MENU_A:
213#ifdef __ORBIS__
214 case ACTION_MENU_TOUCHPAD_PRESS:
215#endif
216 if(pressed)
217 {
218 // Next page
219 int iNextPage = ( int )( m_eCurrPage ) + 1;
220 if ( iNextPage != eHowToPlay_NumPages )
221 {
222 StartPage( ( EHowToPlayPage )( iNextPage ) );
223 ui.PlayUISFX(eSFX_Press);
224 }
225 handled = true;
226 }
227 break;
228 case ACTION_MENU_X:
229 if(pressed)
230 {
231 // Previous page
232 int iPrevPage = ( int )( m_eCurrPage ) - 1;
233
234 // 4J Stu - Add back for future platforms
235#if 0
236 // No What's New for the first PS4 and Xbox One builds
237 if(true)
238 {
239 if ( iPrevPage >= 0 && !((iPrevPage==eHowToPlay_WhatsNew)))
240 {
241 StartPage( ( EHowToPlayPage )( iPrevPage ) );
242 ui.PlayUISFX(eSFX_Press);
243 }
244 }
245 else
246#endif
247 {
248 if ( iPrevPage >= 0 )
249 {
250 StartPage( ( EHowToPlayPage )( iPrevPage ) );
251 ui.PlayUISFX(eSFX_Press);
252 }
253
254 }
255 handled = true;
256 }
257 break;
258 case ACTION_MENU_UP:
259 case ACTION_MENU_DOWN:
260 case ACTION_MENU_PAGEUP:
261 case ACTION_MENU_PAGEDOWN:
262 sendInputToMovie(key, repeat, pressed, released);
263 break;
264 }
265}
266
267void UIScene_HowToPlay::StartPage( EHowToPlayPage ePage )
268{
269 m_eCurrPage = ePage;
270
271 // Turn on just what we need for this screen.
272 SHowToPlayPageDef* pDef = &( gs_aPageDefs[ m_eCurrPage ] );
273
274 // Replace button identifiers in the text with actual button images.
275 wstring replacedText = app.FormatHTMLString(m_iPad, app.GetString( pDef->m_iTextStringID ));
276 // 4J-PB - replace the title with the platform specific title, and the platform name
277// replacedText = replaceAll(replacedText,L"{*TITLE_UPDATE_NAME*}",app.GetString(IDS_TITLE_UPDATE_NAME));
278 replacedText = replaceAll(replacedText,L"{*KICK_PLAYER_DESCRIPTION*}",app.GetString(IDS_KICK_PLAYER_DESCRIPTION));
279#ifdef _XBOX_ONE
280 replacedText = replaceAll(replacedText,L"{*PLATFORM_NAME*}",app.GetString(IDS_PLATFORM_NAME));
281#endif
282 replacedText = replaceAll(replacedText,L"{*BACK_BUTTON*}",app.GetString(IDS_BACK_BUTTON));
283 replacedText = replaceAll(replacedText,L"{*DISABLES_ACHIEVEMENTS*}",app.GetString(IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS));
284
285 // 4J-JEV: Temporary fix: LOC: Minecraft: XB1: KO: Font: Uncategorized: Squares appear instead of hyphens in FIREWORKS description
286 if (!ui.UsingBitmapFont())
287 {
288 replacedText = replaceAll(replacedText, L"\u00A9", L"(C)");
289 replacedText = replaceAll(replacedText, L"\u00AE", L"(R)");
290 replacedText = replaceAll(replacedText, L"\u2013", L"-");
291 }
292
293 // strip out any tab characters and repeated spaces
294 stripWhitespaceForHtml( replacedText, true );
295
296 // Set the text colour
297 wstring finalText(replacedText.c_str() );
298 wchar_t startTags[64];
299 swprintf(startTags,64,L"<font color=\"#%08x\">",app.GetHTMLColour(eHTMLColor_White));
300 finalText = startTags + finalText;
301
302 vector<wstring> paragraphs;
303 int lastIndex = 0;
304 for ( int index = finalText.find(L"\r\n", lastIndex, 2);
305 index != wstring::npos;
306 index = finalText.find(L"\r\n", lastIndex, 2)
307 )
308 {
309 paragraphs.push_back( finalText.substr(lastIndex, index-lastIndex) + L" " );
310 lastIndex = index + 2;
311 }
312 paragraphs.push_back( finalText.substr( lastIndex, finalText.length() - lastIndex ) );
313
314 // Set the text in the scene
315 IggyDataValue result;
316
317 IggyDataValue *value = new IggyDataValue[paragraphs.size()+1];
318 IggyStringUTF16 * stringVal = new IggyStringUTF16[paragraphs.size()];
319
320 value[0].type = IGGY_DATATYPE_number;
321 value[0].number = gs_pageToFlashMapping[(int)ePage];
322
323 for(unsigned int i = 0; i < paragraphs.size(); ++i)
324 {
325 stringVal[i].string = (IggyUTF16 *)paragraphs[i].c_str();
326 stringVal[i].length = paragraphs[i].length();
327 value[i+1].type = IGGY_DATATYPE_string_UTF16;
328 value[i+1].string16 = stringVal[i];
329 }
330
331 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcLoadPage , 1 + paragraphs.size(), value );
332
333 delete [] value;
334 delete [] stringVal;
335
336 updateTooltips();
337
338 TelemetryManager->RecordMenuShown(m_iPad, eUIScene_HowToPlay, (ETelemetry_HowToPlay_SubMenuId)ePage);
339
340#ifdef __PSVITA__
341 ui.TouchBoxRebuild(this);
342#endif
343}