Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
MainMenuUI.c
Go to the documentation of this file.
1class SCR_MissionMetaData
2{
4 int m_iScore;
5 bool m_bFavorite;
6 bool m_bRecent;
7 bool m_bRecommended;
8
9 //------------------------------------------------------------------------------------------------
10 // constructor
13 void SCR_MissionMetaData(MissionWorkshopItem item, int score)
14 {
15 m_Item = item;
16 m_iScore = score;
17 m_bFavorite = false;
18 m_bRecent = false;
19 m_bRecommended = false;
20 }
21}
22
23class MainMenuUI : ChimeraMenuBase
24{
25 protected const ResourceName TILES_LAYOUT = "{2D4191089E061C18}UI/layouts/Menus/PlayMenu/MainMenuTile_Vertical.layout";
26 protected const ResourceName CONFIG = "{6DDC861718434B94}Configs/ContentBrowser/MainMenu/MainMenuEntries.conf";
27
28 protected const string SCENARIO_LIST_WIDGET_NAME = "ScenariosHorizontalLayoutDeep";
29
32
33 protected ref array<string> m_aBannedItems = {};
34 protected static ref array<ref SCR_NewsEntry> m_aNews = {};
35 protected static ref array<ref SCR_NewsEntry> m_aNotifications = {};
36 protected ref array<ref Widget> m_aTiles = {};
37
38 protected static bool s_bDidCheckNetwork;
39 protected static const int SERVICES_STATUS_CHECK_DELAY = 2000; // needed for backend API to prepare
40 protected bool m_bFirstLoad;
41
42 protected bool m_bCanShowTutorial;
44
45 // Privileges callback
47
48 //------------------------------------------------------------------------------------------------
49 protected override void OnMenuOpen()
50 {
51 super.OnMenuOpen();
52
53 // Init common Workshop UI
54 SCR_WorkshopUiCommon.OnGameStart();
55
57 Widget bottomContent = w.FindAnyWidget("BottomContentHorizontal");
58 Widget descriptionRoot = w.FindAnyWidget("Description");
59 Widget footer = w.FindAnyWidget("Footer");
60 if (!bottomContent || !descriptionRoot || !footer)
61 return;
62
63 bool disableContent = GetGame().GetGameInstallStatus() != 1.0;
64 PrepareTiles(disableContent);
65
66 if (disableContent)
67 GetGame().m_OnGameInstallComplete.Insert(PrepareTiles);
68
69 // Listen to buttons in grid
70 Widget child = bottomContent.GetChildren();
72 while (child)
73 {
74 tile = SCR_MenuTileComponent.Cast(child.FindHandler(SCR_MenuTileComponent));
75 if (!tile)
76 break;
77
78 if (!m_FocusedTile)
79 m_FocusedTile = tile;
80
81 tile.m_OnClicked.Insert(OnTileClick);
82 tile.m_OnFocused.Insert(OnTileFocus);
83
84 child = child.GetSibling();
85 }
86
87 Widget mainTile = w.FindAnyWidget("MainMenuTile");
88 tile = SCR_MenuTileComponent.Cast(mainTile.FindHandler(SCR_MenuTileComponent));
89 tile.m_OnClicked.Insert(OnTileClick);
90 tile.m_OnFocused.Insert(OnTileFocus);
91
92 // Subscribe to buttons
94 if (back)
95 {
96 // If on console, don't show the 'Exit Game' button
98 back.SetVisible(false, false);
99 else
100 back.m_OnActivated.Insert(OnBack);
101 }
102
103 // Services Status button
104 SCR_InputButtonComponent servicesStatus = SCR_InputButtonComponent.GetInputButtonComponent("ServicesStatus", footer);
105 if (servicesStatus)
106 servicesStatus.m_OnActivated.Insert(OnServicesStatus);
107
109 if (feedback)
110 feedback.m_OnActivated.Insert(OnFeedback);
111
113 if (credits)
114 credits.m_OnActivated.Insert(OnCredits);
115
116 #ifdef WORKBENCH
117 GetGame().GetInputManager().AddActionListener(UIConstants.MENU_ACTION_BACK_WB, EActionTrigger.DOWN, OnBack);
118 #endif
119
120 GetNotificationEntries(null);
121
122 // Check Service Statuses
123 if (!s_bDidCheckNetwork)
124 {
125 s_bDidCheckNetwork = true;
126 GetGame().GetCallqueue().CallLater(CheckServicesStatusIfFocused, SERVICES_STATUS_CHECK_DELAY);
127 }
128
129 Widget logoWidget = w.FindAnyWidget("LogoButton");
130 if (logoWidget)
131 {
132 SCR_ModularButtonComponent logo = SCR_ModularButtonComponent.FindComponent(logoWidget);
133 if (logo)
134 logo.m_OnClicked.Insert(OnLogoClicked);
135 }
136
137 if (!GetGame().GetPlatformService().GetLocalPlatformKind() == PlatformKind.PSN)
138 {
139 // Get the entries for the first time
140 GetNewsEntries(null);
141 }
142
143 // Check ping sites
144 GetGame().GetBackendApi().GetClientLobby().MeasureLatency(null);
145 }
146
147 //------------------------------------------------------------------------------------------------
148 protected override void OnMenuOpened()
149 {
150 super.OnMenuOpened();
151
152 // Opening Last menu
153 SCR_MenuLoadingComponent.LoadLastMenu();
154 SCR_MenuLoadingComponent.ClearLastMenu();
155
156 BaseContainer cont = GetGame().GetGameUserSettings().GetModule("SCR_RecentGames");
157 if (cont)
158 {
159 cont.Get("m_bFirstTimePlay", m_bFirstLoad);
160 cont.Set("m_bFirstTimePlay", false);
161 }
162
163 //PrintFormat("[OnMenuOpened] m_bFirstLoad: %1", m_bFirstLoad);
164
165 // Save changes to the settings
166 GetGame().UserSettingsChanged();
167 GetGame().SaveUserSettings();
168
169 // Check first start of session
170 bool firstLoadInSession = GameSessionStorage.s_Data["m_bMenuFirstOpening"].IsEmpty();
171 GameSessionStorage.s_Data["m_bMenuFirstOpening"] = "false";
172
173 //PrintFormat("[OnMenuOpened] firstLoadInSession: %1", firstLoadInSession);
174
175 if (!firstLoadInSession)
176 return;
177
178 if (!m_bFirstLoad)
179 return;
180
181 GetGame().GetMenuManager().OpenDialog(ChimeraMenuPreset.WelcomeDialog);
182 }
183
184 //------------------------------------------------------------------------------------------------
185 protected override void OnMenuFocusLost()
186 {
187 GetRootWidget().SetEnabled(false);
188
189 super.OnMenuFocusLost();
190 }
191
192 //------------------------------------------------------------------------------------------------
193 protected override void OnMenuFocusGained()
194 {
195 GetRootWidget().SetEnabled(true);
196
197 if (m_FocusedTile)
198 GetGame().GetWorkspace().SetFocusedWidget(m_FocusedTile.GetRootWidget(), true);
199
200 bool disableContent = GetGame().GetGameInstallStatus() != 1.0;
201 PrepareTiles(disableContent);
202
203 super.OnMenuFocusGained();
204 }
205
206 //------------------------------------------------------------------------------------------------
207 protected void LoadTutorial(SCR_MainMenuConfiguration menuConfig, notnull Widget root, bool isContentDisabled = false)
208 {
209 WorkshopApi workshopAPI = GetGame().GetBackendApi().GetWorkshop();
210 ResourceName tutorial = menuConfig.m_TutorialScenario.m_sScenarioName;
211 MissionWorkshopItem itemTutorial = workshopAPI.GetInGameScenario(tutorial);
212
213 bool playedTutorial;
214 int playedTutorialCount;
215 int playedTutorialMax;
216 if (itemTutorial)
217 playedTutorial = itemTutorial.GetTimeSinceLastPlay() > -1;
218
219 BaseContainer settings = GetGame().GetGameUserSettings().GetModule("SCR_RecentGames");
220 if (settings)
221 {
222 settings.Get("m_iPlayTutorialShowCount", playedTutorialCount);
223 settings.Get("m_iPlayTutorialShowMax", playedTutorialMax);
224 }
225
226 m_bCanShowTutorial = !playedTutorial && playedTutorialCount < playedTutorialMax;
227 //we do show tutorial as a first one in case of content still loading
228 if (m_bCanShowTutorial || isContentDisabled)
229 {
230 CreateTile(tutorial, root, isContentDisabled: false);
232 }
233 }
234
235 //------------------------------------------------------------------------------------------------
236 protected void LoadMenuTiles(SCR_MainMenuConfiguration menuConfig, notnull Widget root, bool isContentDisabled = false)
237 {
238 array<ResourceName> customTiles = menuConfig.m_aMainMenuCustomTiles;
240 Widget tileWidget;
241 ImageWidget background;
242 foreach(ResourceName tile: customTiles)
243 {
244 tileWidget = GetGame().GetWorkspace().CreateWidgets(tile, root);
245 if (!tileWidget)
246 continue;
247
248 tileWidget.SetEnabled(!isContentDisabled);
249
250 background = ImageWidget.Cast(tileWidget.FindAnyWidget("Image"));
251 if (background && isContentDisabled)
252 background.SetSaturation(0);
253
254 menuComp = SCR_MainMenuTile_MenuComponent.Cast(tileWidget.GetChildren().FindHandler(SCR_MainMenuTile_MenuComponent));
255 if (!menuComp)
256 return;
257
260 }
261 }
262
263 //------------------------------------------------------------------------------------------------
268 protected void CreateTile(ResourceName mission, notnull Widget root, bool isRecommended = false, bool isContentDisabled = false, bool isTutorialNeeded = false)
269 {
271 if (!item)
272 return;
273
274 Widget childWidget = GetGame().GetWorkspace().CreateWidgets(TILES_LAYOUT, root);
275 if (!childWidget)
276 return;
277
278 childWidget.SetEnabled(!isContentDisabled);
279
280 SCR_MainMenuTileComponent tile = SCR_MainMenuTileComponent.Cast(childWidget.GetChildren().FindHandler(SCR_MainMenuTileComponent));
281 if (!tile)
282 return;
283
284 if (isContentDisabled)
285 tile.DisableTile();
286
287 tile.ShowMission(item, isRecommended);
288
289 if (isTutorialNeeded && m_TutorialMission)
291 }
292
293 //------------------------------------------------------------------------------------------------
295 protected void PrepareTiles(bool isContentDisabled = false)
296 {
297 Resource resource = BaseContainerTools.LoadContainer(CONFIG);
298 if (!resource)
299 return;
300
301 BaseContainer container = resource.GetResource().ToBaseContainer();
302 SCR_MainMenuConfiguration menuConfig = SCR_MainMenuConfiguration.Cast(BaseContainerTools.CreateInstanceFromContainer(container));
303 if (!menuConfig)
304 return;
305
306 Widget root = GetRootWidget().FindAnyWidget(SCENARIO_LIST_WIDGET_NAME);
307 int maxCount = menuConfig.m_iMaxDisplayedScenarios;
308
309 // delete previous content
310 SCR_WidgetHelper.RemoveAllChildren(root);
311
312 // Tutorial Missions
313 LoadTutorial(menuConfig, root, isContentDisabled);
314
315 // Menu Tiles
316 LoadMenuTiles(menuConfig, root, isContentDisabled);
317
318 // Get missions from Workshop API
319 array<MissionWorkshopItem> missionItemsAll = {};
320 array<ref SCR_MissionMetaData> topMissions = new array<ref SCR_MissionMetaData>();
321 topMissions.Reserve(maxCount);
322
323 WorkshopApi workshopApi = GetGame().GetBackendApi().GetWorkshop();
324 workshopApi.GetPageScenarios(missionItemsAll, 0, SCR_WorkshopUiCommon.PAGE_SCENARIOS); // Get all missions at once
325
326 // Remove scenarios from disabled addons
327 SCR_WorkshopItem scriptedItem = null;
328
329 for (int i = missionItemsAll.Count() - 1; i >= 0; i--)
330 {
331 MissionWorkshopItem m = missionItemsAll[i];
332 WorkshopItem addon = m.GetOwner();
333
334 if (!addon)
335 continue;
336
337 scriptedItem = SCR_AddonManager.GetInstance().GetItem(addon.Id());
338
339 if (scriptedItem && scriptedItem.GetAnyDependencyMissing())
340 missionItemsAll.Remove(i);
341 }
342
343 for (int i = missionItemsAll.Count() - 1; i >= 0; i--)
344 {
345 if (SCR_ScenarioSequenceProgress.IsScenarioLocked(missionItemsAll[i]))
346 missionItemsAll.Remove(i);
347 }
348
349 // Store total number of entries
350 int iEntriesTotal = missionItemsAll.Count();
351 array<ref SCR_MainMenuConfigEntry> missionsRecommended = {};
352 foreach (SCR_MainMenuConfigEntry entry : menuConfig.m_aMainMenuScenarios)
353 {
354 missionsRecommended.Insert(entry);
355 }
356
357 foreach (MissionWorkshopItem item : missionItemsAll)
358 {
359 SCR_MissionMetaData newItem = new SCR_MissionMetaData(item, 0);
360
361 int score = 0;
362 foreach (SCR_MainMenuConfigEntry entry : missionsRecommended)
363 {
364 if (entry && entry.m_sScenarioName == item.Id())
365 {
366 newItem.m_bRecommended = true;
367 score = 3;
368 break;
369 }
370 }
371
372 if (item.IsFavorite())
373 {
374 score = score + 2;
375 newItem.m_bFavorite = true;
376 }
377 int dt = item.GetTimeSinceLastPlay();
378 if (dt >= 0)
379 {
380 score++;
381 newItem.m_bRecent = true;
382 }
383 newItem.m_iScore = score;
384
385 // Find insertion position (descending by score)
386 int pos = topMissions.Count(); // default: append at end (smallest side)
387 foreach (int j, SCR_MissionMetaData metadata : topMissions)
388 {
389 if (score > metadata.m_iScore)
390 {
391 pos = j;
392 break;
393 }
394 }
395 if (pos == topMissions.Count())
396 {
397 // Append only if we still have room
398 if (topMissions.Count() < maxCount)
399 topMissions.Insert(newItem);
400 // else: smaller than current topN tail → skip
401 }
402 else
403 {
404 // Insert and trim to maxCount
405 topMissions.InsertAt(newItem, pos);
406 if (topMissions.Count() > maxCount)
407 topMissions.RemoveOrdered(topMissions.Count() - 1); // drop the smallest at the end
408 }
409 }
410
411 foreach (SCR_MissionMetaData p : topMissions)
412 {
413 // check if missions can be available when loading in progress
414 bool disabled = 1;
415 foreach (SCR_MainMenuConfigEntry entry : missionsRecommended)
416 {
417 if (!entry || entry.m_sScenarioName != p.m_Item.Id())
418 continue;
419
420 disabled = !entry.m_bScenarioAvailableWhenDownloadingContent;
421 break;
422 }
423 CreateTile(p.m_Item.Id(), root, p.m_bRecommended, isContentDisabled : disabled && isContentDisabled, m_bCanShowTutorial);
424 }
425
426 //check if MP and Workshop should be accessible
427
428 HandleEntry("Multiplayer", isContentDisabled);
429 HandleEntry("Workshop", isContentDisabled);
430 HandleEntry("MainTile", isContentDisabled );
431
432 Widget warning = GetRootWidget().FindAnyWidget("WarningDownloading");
433 if (warning)
434 warning.SetVisible(isContentDisabled);
435
436 Widget presets = GetRootWidget().FindAnyWidget("PresetsButton");
437 if (presets)
438 {
439 presets.SetEnabled(!isContentDisabled);
440 presets.SetVisible(!isContentDisabled);
441 }
442
443 }
444
445 //------------------------------------------------------------------------------------------------
446 protected void HandleEntry(string tileName, bool isContentDisabled)
447 {
448 Widget widget = GetRootWidget().FindAnyWidget(tileName);
449 if (!widget)
450 return;
451
452 widget.SetEnabled(!isContentDisabled);
453 ImageWidget background = ImageWidget.Cast(widget.FindAnyWidget("ImageDefault"));
454 if (background)
455 background.SetSaturation(!isContentDisabled);
456 }
457
458 //------------------------------------------------------------------------------------------------
459 protected void OnBack()
460 {
461 if (!IsFocused())
462 return;
463
464 TryExitGame();
465 }
466
467 //------------------------------------------------------------------------------------------------
468 protected void OnCredits()
469 {
470 GetGame().GetMenuManager().OpenMenu(ChimeraMenuPreset.CreditsMenu);
471 }
472
473 //------------------------------------------------------------------------------------------------
474 protected void OnTileClick(notnull SCR_MenuTileComponent comp)
475 {
476 if (!IsFocused())
477 return;
478
479 if (IsShowingTutorial(comp))
480 return;
481
483 }
484
485 //------------------------------------------------------------------------------------------------
486 protected void OnTileOpenMenu()
487 {
488 switch (m_FocusedTile.m_eMenuPreset)
489 {
490 case ChimeraMenuPreset.FeedbackDialog:
491 {
492 GetGame().GetMenuManager().OpenDialog(m_FocusedTile.m_eMenuPreset);
493 break;
494 }
495 case ChimeraMenuPreset.ContentBrowser:
496 {
497 SCR_WorkshopUiCommon.TryOpenWorkshop();
498 break;
499 }
500 case ChimeraMenuPreset.ServerBrowserMenu:
501 {
503 break;
504 }
505 default:
506 {
507 GetGame().GetMenuManager().OpenMenu(m_FocusedTile.m_eMenuPreset);
508 break;
509 }
510 }
511 }
512
513 //------------------------------------------------------------------------------------------------
514 protected void OnPlayTutorial()
515 {
517 SCR_MenuLoadingComponent.SaveLastMenu(ChimeraMenuPreset.MainMenu);
518 }
519
520 //------------------------------------------------------------------------------------------------
522 {
523 if (!comp.IgnoreTutorialWarning() && m_bCanShowTutorial)
524 {
525 BaseContainer settings = GetGame().GetGameUserSettings().GetModule("SCR_RecentGames");
526
527 if (settings)
528 {
529 int playTutorialShowCount;
530
531 settings.Get("m_iPlayTutorialShowCount", playTutorialShowCount);
532 playTutorialShowCount++;
533
534 settings.Set("m_iPlayTutorialShowCount", playTutorialShowCount);
535 GetGame().UserSettingsChanged();
536 }
537
538 // Tutorial confirmation dialog
539 SCR_ConfigurableDialogUi dialog = SCR_CommonDialogs.CreateTutorialDialog();
540 if (dialog)
541 {
542 dialog.m_OnConfirm.Insert(OnPlayTutorial);
543 dialog.m_OnCancel.Insert(OnTileOpenMenu);
544
545 return true;
546 }
547 }
548
549 return false;
550 }
551
552 //------------------------------------------------------------------------------------------------
554 {
555 if (!IsFocused())
556 return;
557
558 m_FocusedTile = comp;
559 }
560
561 //------------------------------------------------------------------------------------------------
562 protected void OnButtonSelect()
563 {
564 if (!IsFocused())
565 return;
566
567 if (m_FocusedTile)
569 }
570
571 //------------------------------------------------------------------------------------------------
574 {
575 if (!IsFocused())
576 return;
577
578 SCR_CommonDialogs.CreateServicesStatusDialog();
579 }
580
581 //------------------------------------------------------------------------------------------------
582 protected void OnFeedback()
583 {
584 if (!IsFocused())
585 return;
586
587 SCR_FeedbackDialogUI.OpenFeedbackDialog();
588 }
589
590 //------------------------------------------------------------------------------------------------
591 protected void OnLogoClicked()
592 {
593 GetGame().GetMenuManager().OpenDialog(ChimeraMenuPreset.WelcomeDialog);
594 }
595
596 //------------------------------------------------------------------------------------------------
597 protected void RestoreFocus()
598 {
602 if (m_FocusedTile)
603 GetGame().GetWorkspace().SetFocusedWidget(m_FocusedTile.GetRootWidget());
604 }
605
606 //------------------------------------------------------------------------------------------------
610 static int GetNewsEntries(out array<ref SCR_NewsEntry> entries = null)
611 {
612 if (entries)
613 entries.Clear();
614
615 m_aNews.Clear();
616
617 // Print( "NEWS: Count - " + GetGame().GetBackendApi().GetNewsCount() );
618 for (int i, cnt = GetGame().GetBackendApi().GetNewsCount(); i < cnt; i++)
619 {
620 NewsFeedItem item = GetGame().GetBackendApi().GetNewsItem(i);
621 if (item)
622 m_aNews.Insert(new SCR_NewsEntry(item));
623 }
624
625 if (entries)
626 entries = m_aNews;
627
628 return m_aNews.Count();
629 }
630
631 //------------------------------------------------------------------------------------------------
635 static int GetNotificationEntries(out array<ref SCR_NewsEntry> entries = null)
636 {
637 if (entries)
638 entries.Clear();
639
640 m_aNotifications.Clear();
641
642 //Print( "NOTIFICATIONS: Count - " + GetGame().GetBackendApi().GetNotifyCount() );
643 for (int i, cnt = GetGame().GetBackendApi().GetNotifyCount(); i < cnt; i++)
644 {
645 NewsFeedItem item = GetGame().GetBackendApi().GetNotifyItem(i);
646
647 if (item)
648 m_aNews.Insert(new SCR_NewsEntry(item));
649 }
650
651 if (entries)
652 entries = m_aNotifications;
653
654 return m_aNotifications.Count();
655 }
656
657 //------------------------------------------------------------------------------------------------
662 static int GetUnreadNewsCount()
663 {
664 int count;
665 foreach (SCR_NewsEntry entry : m_aNews)
666 {
667 if (!entry.m_bRead)
668 count++;
669 }
670 return count;
671 }
672
673 //------------------------------------------------------------------------------------------------
676 static int GetUnreadNotificationCount()
677 {
678 int count;
679 foreach (SCR_NewsEntry entry : m_aNotifications)
680 {
681 if (!entry.m_bRead)
682 count++;
683 }
684 return count;
685 }
686
687 //------------------------------------------------------------------------------------------------
690 protected static void TryExitGame()
691 {
692 int nCompleted, nTotal;
693 SCR_DownloadManager mgr = SCR_DownloadManager.GetInstance();
694 if (mgr)
695 mgr.GetDownloadQueueState(nCompleted, nTotal);
696
697 if (nTotal > 0)
698 new SCR_ExitGameWhileDownloadingDialog();
699 else
700 new SCR_ExitGameDialog();
701 }
702
703 //------------------------------------------------------------------------------------------------
706 {
707 if (!IsFocused())
708 return;
709
711 }
712
713 //------------------------------------------------------------------------------------------------
714 override void OnMenuClose()
715 {
716 super.OnMenuClose();
717 GetGame().m_OnGameInstallComplete.Remove(PrepareTiles);
718 }
719}
ChimeraMenuPreset
Menu presets.
class SCR_CommonDialogs SCR_ExitGameDialog()
bool IsPlatformGameConsole()
Definition game.c:1357
ArmaReforgerScripted GetGame()
Definition game.c:1398
void CheckServicesStatusIfFocused()
Check Services Status only if the main menu is still focused (given the check is delayed by SERVICES_...
Definition MainMenuUI.c:705
void OnBack()
Definition MainMenuUI.c:459
ref SCR_ScriptPlatformRequestCallback m_CallbackGetPrivilege
Definition MainMenuUI.c:46
void OnButtonSelect()
Definition MainMenuUI.c:562
DialogUI m_BannedDetectionDialog
Definition MainMenuUI.c:31
void HandleEntry(string tileName, bool isContentDisabled)
Definition MainMenuUI.c:446
MissionWorkshopItem m_TutorialMission
Definition MainMenuUI.c:43
void LoadTutorial(SCR_MainMenuConfiguration menuConfig, notnull Widget root, bool isContentDisabled=false)
Definition MainMenuUI.c:207
void OnPlayTutorial()
Definition MainMenuUI.c:514
ref array< string > m_aBannedItems
Definition MainMenuUI.c:33
void LoadMenuTiles(SCR_MainMenuConfiguration menuConfig, notnull Widget root, bool isContentDisabled=false)
Definition MainMenuUI.c:236
void OnFeedback()
Definition MainMenuUI.c:582
class SCR_MissionMetaData TILES_LAYOUT
const string SCENARIO_LIST_WIDGET_NAME
Definition MainMenuUI.c:28
void RestoreFocus()
Definition MainMenuUI.c:597
SCR_MenuTileComponent m_FocusedTile
Definition MainMenuUI.c:30
ref array< ref Widget > m_aTiles
Definition MainMenuUI.c:36
void PrepareTiles(bool isContentDisabled=false)
Definition MainMenuUI.c:295
bool m_bCanShowTutorial
Definition MainMenuUI.c:42
void OnCredits()
Definition MainMenuUI.c:468
bool IsShowingTutorial(SCR_MenuTileComponent comp)
Definition MainMenuUI.c:521
void CreateTile(ResourceName mission, notnull Widget root, bool isRecommended=false, bool isContentDisabled=false, bool isTutorialNeeded=false)
Definition MainMenuUI.c:268
void OnServicesStatus()
Definition MainMenuUI.c:573
void OnTileOpenMenu()
Definition MainMenuUI.c:486
const ResourceName CONFIG
Definition MainMenuUI.c:26
PlatformKind
Definition PlatformKind.c:8
void OnTileClick(SCR_ScriptedWidgetComponent baseComp)
void OnTileFocus(ScriptedWidgetComponent comp)
bool IsFocused()
Widget GetRootWidget()
void SCR_NewsEntry(NewsFeedItem item)
void OnLogoClicked()
Constant variables used in various menus.
override void OnMenuFocusGained()
override void OnMenuOpen()
override void OnMenuClose()
override void OnMenuFocusLost()
override void OnMenuOpened()
GameSessionStorage is used to store data for whole lifetime of game executable run....
Object holding reference to resource. In destructor release the resource.
Definition Resource.c:25
SCR_WorkshopItem GetItem(string id)
static SCR_AddonManager GetInstance()
void GetDownloadQueueState(out int nCompleted, out int nTotal)
Might get delayed by a frame! Just use it for UI.
static SCR_InputButtonComponent GetInputButtonComponent(string name, notnull Widget parent, bool searchAllChildren=true)
void SetTutorial(notnull MissionWorkshopItem tutorialMission)
void SetTutorial(notnull MissionWorkshopItem tutorialMission)
void ShowMission(notnull MissionWorkshopItem item, bool showRecommended=false)
ref ScriptInvoker m_OnClicked
ref ScriptInvoker m_OnFocused
static MissionWorkshopItem GetInGameScenario(ResourceName resource)
static void TryOpenServerBrowser()
Workshop Api instance.
Definition WorkshopApi.c:14
Workshop Item instance.
EActionTrigger