the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 545 lines 18 kB view raw
1#include "stdafx.h" 2#include "UI.h" 3#include "UIComponent_TutorialPopup.h" 4#include "..\..\Common\Tutorial\Tutorial.h" 5#include "..\..\..\Minecraft.World\StringHelpers.h" 6#include "..\..\MultiplayerLocalPlayer.h" 7#include "..\..\Minecraft.h" 8#include "..\..\..\Minecraft.World\net.minecraft.world.level.tile.h" 9 10UIComponent_TutorialPopup::UIComponent_TutorialPopup(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) 11{ 12 // Setup all the Iggy references we need for this scene 13 initialiseMovie(); 14 15 m_interactScene = NULL; 16 m_lastInteractSceneMoved = NULL; 17 m_lastSceneMovedLeft = false; 18 m_bAllowFade = false; 19 m_iconItem = nullptr; 20 m_iconIsFoil = false; 21 22 m_bContainerMenuVisible = false; 23 m_bSplitscreenGamertagVisible = false; 24 m_iconType = e_ICON_TYPE_IGGY; 25 26 m_labelDescription.init(L""); 27} 28 29wstring UIComponent_TutorialPopup::getMoviePath() 30{ 31 switch( m_parentLayer->getViewport() ) 32 { 33 case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: 34 case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: 35 case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: 36 case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: 37 case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: 38 case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: 39 case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: 40 case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: 41 return L"TutorialPopupSplit"; 42 break; 43 case C4JRender::VIEWPORT_TYPE_FULLSCREEN: 44 default: 45 return L"TutorialPopup"; 46 break; 47 } 48} 49 50void UIComponent_TutorialPopup::UpdateTutorialPopup() 51{ 52 // has the Splitscreen Gamertag visibility been changed? Re-Adjust Layout to prevent overlaps! 53 if(m_bSplitscreenGamertagVisible != (bool)(app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_DisplaySplitscreenGamertags) != 0)) 54 { 55 m_bSplitscreenGamertagVisible = (bool)(app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_DisplaySplitscreenGamertags) != 0); 56 handleReload(); 57 } 58} 59 60void UIComponent_TutorialPopup::handleReload() 61{ 62 IggyDataValue result; 63 IggyDataValue value[1]; 64 value[0].type = IGGY_DATATYPE_boolean; 65 value[0].boolval = (bool)((app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_DisplaySplitscreenGamertags)!=0) && !m_bContainerMenuVisible); // 4J - TomK - Offset for splitscreen gamertag? 66 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcAdjustLayout, 1 , value ); 67 68 setupIconHolder(m_iconType); 69} 70 71void UIComponent_TutorialPopup::SetTutorialDescription(TutorialPopupInfo *info) 72{ 73 m_interactScene = info->interactScene; 74 75 wstring parsed = _SetIcon(info->icon, info->iAuxVal, info->isFoil, info->desc); 76 parsed = _SetImage( parsed ); 77 parsed = ParseDescription(m_iPad, parsed); 78 79 if(parsed.empty()) 80 { 81 _SetDescription( info->interactScene, L"", L"", info->allowFade, info->isReminder ); 82 } 83 else 84 { 85 _SetDescription( info->interactScene, parsed, info->title, info->allowFade, info->isReminder ); 86 } 87} 88 89void UIComponent_TutorialPopup::RemoveInteractSceneReference(UIScene *scene) 90{ 91 if( m_interactScene == scene ) 92 { 93 m_interactScene = NULL; 94 } 95} 96 97void UIComponent_TutorialPopup::SetVisible(bool visible) 98{ 99 m_parentLayer->showComponent(0,eUIComponent_TutorialPopup,visible); 100 101 if( visible && m_bAllowFade ) 102 { 103 //Initialise a timer to fade us out again 104 app.DebugPrintf("UIComponent_TutorialPopup::SetVisible: setting TUTORIAL_POPUP_FADE_TIMER_ID to %d\n",m_tutorial->GetTutorialDisplayMessageTime()); 105 addTimer(TUTORIAL_POPUP_FADE_TIMER_ID,m_tutorial->GetTutorialDisplayMessageTime()); 106 } 107} 108 109bool UIComponent_TutorialPopup::IsVisible() 110{ 111 return m_parentLayer->isComponentVisible(eUIComponent_TutorialPopup); 112} 113 114void UIComponent_TutorialPopup::handleTimerComplete(int id) 115{ 116 switch(id) 117 { 118 case TUTORIAL_POPUP_FADE_TIMER_ID: 119 SetVisible(false); 120 killTimer(id); 121 app.DebugPrintf("handleTimerComplete: setting TUTORIAL_POPUP_MOVE_SCENE_TIMER_ID\n"); 122 addTimer(TUTORIAL_POPUP_MOVE_SCENE_TIMER_ID,TUTORIAL_POPUP_MOVE_SCENE_TIME); 123 break; 124 case TUTORIAL_POPUP_MOVE_SCENE_TIMER_ID: 125 UpdateInteractScenePosition(IsVisible()); 126 killTimer(id); 127 break; 128 } 129} 130 131void UIComponent_TutorialPopup::_SetDescription(UIScene *interactScene, const wstring &desc, const wstring &title, bool allowFade, bool isReminder) 132{ 133 m_interactScene = interactScene; 134 app.DebugPrintf("Setting m_interactScene to %08x\n", m_interactScene); 135 if( interactScene != m_lastInteractSceneMoved ) m_lastInteractSceneMoved = NULL; 136 if(desc.empty()) 137 { 138 SetVisible( false ); 139 app.DebugPrintf("_SetDescription1: setting TUTORIAL_POPUP_MOVE_SCENE_TIMER_ID\n"); 140 addTimer(TUTORIAL_POPUP_MOVE_SCENE_TIMER_ID,TUTORIAL_POPUP_MOVE_SCENE_TIME); 141 killTimer(TUTORIAL_POPUP_FADE_TIMER_ID); 142 } 143 else 144 { 145 SetVisible( true ); 146 app.DebugPrintf("_SetDescription2: setting TUTORIAL_POPUP_MOVE_SCENE_TIMER_ID\n"); 147 addTimer(TUTORIAL_POPUP_MOVE_SCENE_TIMER_ID,TUTORIAL_POPUP_MOVE_SCENE_TIME); 148 149 if( allowFade ) 150 { 151 //Initialise a timer to fade us out again 152 app.DebugPrintf("_SetDescription: setting TUTORIAL_POPUP_FADE_TIMER_ID\n"); 153 addTimer(TUTORIAL_POPUP_FADE_TIMER_ID,m_tutorial->GetTutorialDisplayMessageTime()); 154 } 155 else 156 { 157 app.DebugPrintf("_SetDescription: killing TUTORIAL_POPUP_FADE_TIMER_ID\n"); 158 killTimer(TUTORIAL_POPUP_FADE_TIMER_ID); 159 } 160 m_bAllowFade = allowFade; 161 162 if(isReminder) 163 { 164 wstring text(app.GetString( IDS_TUTORIAL_REMINDER )); 165 text.append( desc ); 166 stripWhitespaceForHtml( text ); 167 // set the text colour 168 wchar_t formatting[40]; 169 // 4J Stu - Don't set HTML font size, that's set at design time in flash 170 //swprintf(formatting, 40, L"<font color=\"#%08x\" size=\"%d\">",app.GetHTMLColour(eHTMLColor_White),m_textFontSize); 171 swprintf(formatting, 40, L"<font color=\"#%08x\">",app.GetHTMLColour(eHTMLColor_White)); 172 text = formatting + text; 173 174 m_labelDescription.setLabel( text, true ); 175 } 176 else 177 { 178 wstring text(desc); 179 stripWhitespaceForHtml( text ); 180 // set the text colour 181 wchar_t formatting[40]; 182 // 4J Stu - Don't set HTML font size, that's set at design time in flash 183 //swprintf(formatting, 40, L"<font color=\"#%08x\" size=\"%d\">",app.GetHTMLColour(eHTMLColor_White),m_textFontSize); 184 swprintf(formatting, 40, L"<font color=\"#%08x\">",app.GetHTMLColour(eHTMLColor_White)); 185 text = formatting + text; 186 187 m_labelDescription.setLabel( text, true ); 188 189 } 190 191 m_labelTitle.setLabel( title, true ); 192 m_labelTitle.setVisible(!title.empty()); 193 194 195 // read host setting if gamertag is visible or not and pass on to Adjust Layout function (so we can offset it to stay clear of the gamertag) 196 m_bSplitscreenGamertagVisible = (bool)(app.GetGameSettings(ProfileManager.GetPrimaryPad(),eGameSetting_DisplaySplitscreenGamertags)!=0); 197 IggyDataValue result; 198 IggyDataValue value[1]; 199 value[0].type = IGGY_DATATYPE_boolean; 200 value[0].boolval = (m_bSplitscreenGamertagVisible && !m_bContainerMenuVisible); // 4J - TomK - Offset for splitscreen gamertag? 201 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcAdjustLayout, 1 , value ); 202 } 203} 204 205wstring UIComponent_TutorialPopup::_SetIcon(int icon, int iAuxVal, bool isFoil, LPCWSTR desc) 206{ 207 wstring temp(desc); 208 209 bool isFixedIcon = false; 210 211 m_iconIsFoil = isFoil; 212 if( icon != TUTORIAL_NO_ICON ) 213 { 214 m_iconIsFoil = false; 215 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(icon,1,iAuxVal)); 216 } 217 else 218 { 219 m_iconItem = nullptr; 220 wstring openTag(L"{*ICON*}"); 221 wstring closeTag(L"{*/ICON*}"); 222 int iconTagStartPos = (int)temp.find(openTag); 223 int iconStartPos = iconTagStartPos + (int)openTag.length(); 224 if( iconTagStartPos > 0 && iconStartPos < (int)temp.length() ) 225 { 226 int iconEndPos = (int)temp.find( closeTag, iconStartPos ); 227 228 if(iconEndPos > iconStartPos && iconEndPos < (int)temp.length() ) 229 { 230 wstring id = temp.substr(iconStartPos, iconEndPos - iconStartPos); 231 232 vector<wstring> idAndAux = stringSplit(id,L':'); 233 234 int iconId = _fromString<int>(idAndAux[0]); 235 236 if(idAndAux.size() > 1) 237 { 238 iAuxVal = _fromString<int>(idAndAux[1]); 239 } 240 else 241 { 242 iAuxVal = 0; 243 } 244 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(iconId,1,iAuxVal)); 245 246 temp.replace(iconTagStartPos, iconEndPos - iconTagStartPos + closeTag.length(), L""); 247 } 248 } 249 250 // remove any icon text 251 else if(temp.find(L"{*CraftingTableIcon*}")!=wstring::npos) 252 { 253 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Tile::workBench_Id,1,0)); 254 } 255 else if(temp.find(L"{*SticksIcon*}")!=wstring::npos) 256 { 257 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Item::stick_Id,1,0)); 258 } 259 else if(temp.find(L"{*PlanksIcon*}")!=wstring::npos) 260 { 261 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Tile::wood_Id,1,0)); 262 } 263 else if(temp.find(L"{*WoodenShovelIcon*}")!=wstring::npos) 264 { 265 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Item::shovel_wood_Id,1,0)); 266 } 267 else if(temp.find(L"{*WoodenHatchetIcon*}")!=wstring::npos) 268 { 269 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Item::hatchet_wood_Id,1,0)); 270 } 271 else if(temp.find(L"{*WoodenPickaxeIcon*}")!=wstring::npos) 272 { 273 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Item::pickAxe_wood_Id,1,0)); 274 } 275 else if(temp.find(L"{*FurnaceIcon*}")!=wstring::npos) 276 { 277 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Tile::furnace_Id,1,0)); 278 } 279 else if(temp.find(L"{*WoodenDoorIcon*}")!=wstring::npos) 280 { 281 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Item::door_wood,1,0)); 282 } 283 else if(temp.find(L"{*TorchIcon*}")!=wstring::npos) 284 { 285 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Tile::torch_Id,1,0)); 286 } 287 else if(temp.find(L"{*BoatIcon*}")!=wstring::npos) 288 { 289 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Item::boat_Id,1,0)); 290 } 291 else if(temp.find(L"{*FishingRodIcon*}")!=wstring::npos) 292 { 293 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Item::fishingRod_Id,1,0)); 294 } 295 else if(temp.find(L"{*FishIcon*}")!=wstring::npos) 296 { 297 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Item::fish_raw_Id,1,0)); 298 } 299 else if(temp.find(L"{*MinecartIcon*}")!=wstring::npos) 300 { 301 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Item::minecart_Id,1,0)); 302 } 303 else if(temp.find(L"{*RailIcon*}")!=wstring::npos) 304 { 305 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Tile::rail_Id,1,0)); 306 } 307 else if(temp.find(L"{*PoweredRailIcon*}")!=wstring::npos) 308 { 309 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Tile::goldenRail_Id,1,0)); 310 } 311 else if(temp.find(L"{*StructuresIcon*}")!=wstring::npos) 312 { 313 isFixedIcon = true; 314 setupIconHolder(e_ICON_TYPE_STRUCTURES); 315 } 316 else if(temp.find(L"{*ToolsIcon*}")!=wstring::npos) 317 { 318 isFixedIcon = true; 319 setupIconHolder(e_ICON_TYPE_TOOLS); 320 } 321 else if(temp.find(L"{*StoneIcon*}")!=wstring::npos) 322 { 323 m_iconItem = shared_ptr<ItemInstance>(new ItemInstance(Tile::stone_Id,1,0)); 324 } 325 else 326 { 327 m_iconItem = nullptr; 328 } 329 } 330 if(!isFixedIcon && m_iconItem != NULL) setupIconHolder(e_ICON_TYPE_IGGY); 331 m_controlIconHolder.setVisible( isFixedIcon || m_iconItem != NULL); 332 333 return temp; 334} 335 336wstring UIComponent_TutorialPopup::_SetImage(wstring &desc) 337{ 338 // 4J Stu - Unused 339#if 0 340 BOOL imageShowAtStart = m_image.IsShown(); 341 342 wstring openTag(L"{*IMAGE*}"); 343 wstring closeTag(L"{*/IMAGE*}"); 344 int imageTagStartPos = (int)desc.find(openTag); 345 int imageStartPos = imageTagStartPos + (int)openTag.length(); 346 if( imageTagStartPos > 0 && imageStartPos < (int)desc.length() ) 347 { 348 int imageEndPos = (int)desc.find( closeTag, imageStartPos ); 349 350 if(imageEndPos > imageStartPos && imageEndPos < (int)desc.length() ) 351 { 352 wstring id = desc.substr(imageStartPos, imageEndPos - imageStartPos); 353 m_image.SetImagePath( id.c_str() ); 354 m_image.SetShow( TRUE ); 355 356 desc.replace(imageTagStartPos, imageEndPos - imageTagStartPos + closeTag.length(), L""); 357 } 358 } 359 else 360 { 361 // hide the icon slot 362 m_image.SetShow( FALSE ); 363 } 364 365 BOOL imageShowAtEnd = m_image.IsShown(); 366 if(imageShowAtStart != imageShowAtEnd) 367 { 368 float fHeight, fWidth, fIconHeight, fDescHeight, fDescWidth; 369 m_image.GetBounds(&fWidth,&fIconHeight); 370 GetBounds(&fWidth,&fHeight); 371 372 373 // 4J Stu - For some reason when we resize the scene it resets the size of the HTML control 374 // We don't want that to happen, so get it's size before and set it back after 375 m_description.GetBounds(&fDescWidth,&fDescHeight); 376 if(imageShowAtEnd) 377 { 378 SetBounds(fWidth, fHeight + fIconHeight); 379 } 380 else 381 { 382 SetBounds(fWidth, fHeight - fIconHeight); 383 } 384 m_description.SetBounds(fDescWidth, fDescHeight); 385 } 386#endif 387 return desc; 388} 389 390 391wstring UIComponent_TutorialPopup::ParseDescription(int iPad, wstring &text) 392{ 393 text = replaceAll(text, L"{*CraftingTableIcon*}", L""); 394 text = replaceAll(text, L"{*SticksIcon*}", L""); 395 text = replaceAll(text, L"{*PlanksIcon*}", L""); 396 text = replaceAll(text, L"{*WoodenShovelIcon*}", L""); 397 text = replaceAll(text, L"{*WoodenHatchetIcon*}", L""); 398 text = replaceAll(text, L"{*WoodenPickaxeIcon*}", L""); 399 text = replaceAll(text, L"{*FurnaceIcon*}", L""); 400 text = replaceAll(text, L"{*WoodenDoorIcon*}", L""); 401 text = replaceAll(text, L"{*TorchIcon*}", L""); 402 text = replaceAll(text, L"{*MinecartIcon*}", L""); 403 text = replaceAll(text, L"{*BoatIcon*}", L""); 404 text = replaceAll(text, L"{*FishingRodIcon*}", L""); 405 text = replaceAll(text, L"{*FishIcon*}", L""); 406 text = replaceAll(text, L"{*RailIcon*}", L""); 407 text = replaceAll(text, L"{*PoweredRailIcon*}", L""); 408 text = replaceAll(text, L"{*StructuresIcon*}", L""); 409 text = replaceAll(text, L"{*ToolsIcon*}", L""); 410 text = replaceAll(text, L"{*StoneIcon*}", L""); 411 412 bool exitScreenshot = false; 413 size_t pos = text.find(L"{*EXIT_PICTURE*}"); 414 if(pos != wstring::npos) exitScreenshot = true; 415 text = replaceAll(text, L"{*EXIT_PICTURE*}", L""); 416 m_controlExitScreenshot.setVisible(exitScreenshot); 417 /* 418#define MINECRAFT_ACTION_RENDER_DEBUG ACTION_INGAME_13 419#define MINECRAFT_ACTION_PAUSEMENU ACTION_INGAME_15 420#define MINECRAFT_ACTION_SNEAK_TOGGLE ACTION_INGAME_17 421 */ 422 423 return app.FormatHTMLString(iPad,text); 424} 425 426void UIComponent_TutorialPopup::UpdateInteractScenePosition(bool visible) 427{ 428 if( m_interactScene == NULL ) return; 429 430 // 4J-PB - check this players screen section to see if we should allow the animation 431 bool bAllowAnim=false; 432 bool isCraftingScene = (m_interactScene->getSceneType() == eUIScene_Crafting2x2Menu) || (m_interactScene->getSceneType() == eUIScene_Crafting3x3Menu); 433 bool isCreativeScene = (m_interactScene->getSceneType() == eUIScene_CreativeMenu); 434 bool isTradingScene = (m_interactScene->getSceneType() == eUIScene_TradingMenu); 435 switch(Minecraft::GetInstance()->localplayers[m_iPad]->m_iScreenSection) 436 { 437 case C4JRender::VIEWPORT_TYPE_FULLSCREEN: 438 case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: 439 case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: 440 bAllowAnim=true; 441 break; 442 default: 443 // anim allowed for everything except the crafting 2x2 and 3x3, and the creative menu 444 if(!isCraftingScene && !isCreativeScene && !isTradingScene) 445 { 446 bAllowAnim=true; 447 } 448 break; 449 } 450 451 if(bAllowAnim) 452 { 453 bool movingLeft = visible; 454 455 if( (m_lastInteractSceneMoved != m_interactScene && movingLeft) || ( m_lastInteractSceneMoved == m_interactScene && m_lastSceneMovedLeft != movingLeft ) ) 456 { 457 if(movingLeft) 458 { 459 m_interactScene->slideLeft(); 460 } 461 else 462 { 463 m_interactScene->slideRight(); 464 } 465 466 m_lastInteractSceneMoved = m_interactScene; 467 m_lastSceneMovedLeft = movingLeft; 468 } 469 } 470 471} 472 473void UIComponent_TutorialPopup::render(S32 width, S32 height, C4JRender::eViewportType viewport) 474{ 475 if(viewport != C4JRender::VIEWPORT_TYPE_FULLSCREEN) 476 { 477 S32 xPos = 0; 478 S32 yPos = 0; 479 switch( viewport ) 480 { 481 case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: 482 xPos = (S32)(ui.getScreenWidth() / 2); 483 yPos = (S32)(ui.getScreenHeight() / 2); 484 break; 485 case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT: 486 yPos = (S32)(ui.getScreenHeight() / 2); 487 break; 488 case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: 489 case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: 490 case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: 491 xPos = (S32)(ui.getScreenWidth() / 2); 492 break; 493 case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: 494 xPos = (S32)(ui.getScreenWidth() / 2); 495 yPos = (S32)(ui.getScreenHeight() / 2); 496 break; 497 } 498 //Adjust for safezone 499 switch( viewport ) 500 { 501 case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: 502 case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT: 503 case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: 504 case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT: 505 case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: 506 yPos += getSafeZoneHalfHeight(); 507 break; 508 } 509 switch( viewport ) 510 { 511 case C4JRender::VIEWPORT_TYPE_SPLIT_TOP: 512 case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM: 513 case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT: 514 case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT: 515 case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT: 516 xPos -= getSafeZoneHalfWidth(); 517 break; 518 } 519 ui.setupRenderPosition(xPos, yPos); 520 521 IggyPlayerSetDisplaySize( getMovie(), width, height ); 522 IggyPlayerDraw( getMovie() ); 523 } 524 else 525 { 526 UIScene::render(width, height, viewport); 527 } 528} 529 530void UIComponent_TutorialPopup::customDraw(IggyCustomDrawCallbackRegion *region) 531{ 532 if(m_iconItem != NULL) customDrawSlotControl(region,m_iPad,m_iconItem,1.0f,m_iconItem->isFoil() || m_iconIsFoil,false); 533} 534 535void UIComponent_TutorialPopup::setupIconHolder(EIcons icon) 536{ 537 app.DebugPrintf("Setting icon holder to %d\n", icon); 538 IggyDataValue result; 539 IggyDataValue value[1]; 540 value[0].type = IGGY_DATATYPE_number; 541 value[0].number = (F64)icon; 542 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetupIconHolder , 1 , value ); 543 544 m_iconType = icon; 545}