the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 343 lines 13 kB view raw
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}