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 "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}