1class SCR_MissionMetaData
19 m_bRecommended =
false;
26 protected const ResourceName CONFIG =
"{6DDC861718434B94}Configs/ContentBrowser/MainMenu/MainMenuEntries.conf";
34 protected static ref array<ref SCR_NewsEntry> m_aNews = {};
35 protected static ref array<ref SCR_NewsEntry> m_aNotifications = {};
38 protected static bool s_bDidCheckNetwork;
39 protected static const int SERVICES_STATUS_CHECK_DELAY = 2000;
57 Widget bottomContent = w.FindAnyWidget(
"BottomContentHorizontal");
58 Widget descriptionRoot = w.FindAnyWidget(
"Description");
59 Widget footer = w.FindAnyWidget(
"Footer");
60 if (!bottomContent || !descriptionRoot || !footer)
63 bool disableContent =
GetGame().GetGameInstallStatus() != 1.0;
70 Widget child = bottomContent.GetChildren();
84 child = child.GetSibling();
87 Widget mainTile = w.FindAnyWidget(
"MainMenuTile");
98 back.SetVisible(
false,
false);
120 GetNotificationEntries(null);
123 if (!s_bDidCheckNetwork)
125 s_bDidCheckNetwork =
true;
129 Widget logoWidget = w.FindAnyWidget(
"LogoButton");
132 SCR_ModularButtonComponent logo = SCR_ModularButtonComponent.FindComponent(logoWidget);
140 GetNewsEntries(null);
144 GetGame().GetBackendApi().GetClientLobby().MeasureLatency(null);
150 super.OnMenuOpened();
153 SCR_MenuLoadingComponent.LoadLastMenu();
154 SCR_MenuLoadingComponent.ClearLastMenu();
160 cont.Set(
"m_bFirstTimePlay",
false);
166 GetGame().UserSettingsChanged();
175 if (!firstLoadInSession)
189 super.OnMenuFocusLost();
200 bool disableContent =
GetGame().GetGameInstallStatus() != 1.0;
203 super.OnMenuFocusGained();
210 ResourceName tutorial = menuConfig.m_TutorialScenario.m_sScenarioName;
214 int playedTutorialCount;
215 int playedTutorialMax;
217 playedTutorial = itemTutorial.GetTimeSinceLastPlay() > -1;
222 settings.Get(
"m_iPlayTutorialShowCount", playedTutorialCount);
223 settings.Get(
"m_iPlayTutorialShowMax", playedTutorialMax);
230 CreateTile(tutorial, root, isContentDisabled:
false);
238 array<ResourceName> customTiles = menuConfig.m_aMainMenuCustomTiles;
244 tileWidget =
GetGame().GetWorkspace().CreateWidgets(tile, root);
248 tileWidget.SetEnabled(!isContentDisabled);
250 background =
ImageWidget.Cast(tileWidget.FindAnyWidget(
"Image"));
251 if (background && isContentDisabled)
252 background.SetSaturation(0);
268 protected void CreateTile(
ResourceName mission, notnull
Widget root,
bool isRecommended =
false,
bool isContentDisabled =
false,
bool isTutorialNeeded =
false)
278 childWidget.SetEnabled(!isContentDisabled);
284 if (isContentDisabled)
301 BaseContainer container = resource.GetResource().ToBaseContainer();
307 int maxCount = menuConfig.m_iMaxDisplayedScenarios;
319 array<MissionWorkshopItem> missionItemsAll = {};
320 array<ref SCR_MissionMetaData> topMissions =
new array<ref SCR_MissionMetaData>();
321 topMissions.Reserve(maxCount);
329 for (
int i = missionItemsAll.Count() - 1; i >= 0; i--)
340 missionItemsAll.Remove(i);
343 for (
int i = missionItemsAll.Count() - 1; i >= 0; i--)
346 missionItemsAll.Remove(i);
350 int iEntriesTotal = missionItemsAll.Count();
351 array<ref SCR_MainMenuConfigEntry> missionsRecommended = {};
352 foreach (SCR_MainMenuConfigEntry entry : menuConfig.m_aMainMenuScenarios)
354 missionsRecommended.Insert(entry);
362 foreach (SCR_MainMenuConfigEntry entry : missionsRecommended)
364 if (entry && entry.m_sScenarioName == item.Id())
366 newItem.m_bRecommended =
true;
372 if (item.IsFavorite())
375 newItem.m_bFavorite =
true;
377 int dt = item.GetTimeSinceLastPlay();
381 newItem.m_bRecent =
true;
383 newItem.m_iScore = score;
386 int pos = topMissions.Count();
389 if (score > metadata.m_iScore)
395 if (pos == topMissions.Count())
398 if (topMissions.Count() < maxCount)
399 topMissions.Insert(newItem);
405 topMissions.InsertAt(newItem, pos);
406 if (topMissions.Count() > maxCount)
407 topMissions.RemoveOrdered(topMissions.Count() - 1);
415 foreach (SCR_MainMenuConfigEntry entry : missionsRecommended)
417 if (!entry || entry.m_sScenarioName != p.m_Item.Id())
420 disabled = !entry.m_bScenarioAvailableWhenDownloadingContent;
434 warning.SetVisible(isContentDisabled);
439 presets.SetEnabled(!isContentDisabled);
440 presets.SetVisible(!isContentDisabled);
446 protected void HandleEntry(
string tileName,
bool isContentDisabled)
452 widget.SetEnabled(!isContentDisabled);
455 background.SetSaturation(!isContentDisabled);
529 int playTutorialShowCount;
531 settings.Get(
"m_iPlayTutorialShowCount", playTutorialShowCount);
532 playTutorialShowCount++;
534 settings.Set(
"m_iPlayTutorialShowCount", playTutorialShowCount);
535 GetGame().UserSettingsChanged();
587 SCR_FeedbackDialogUI.OpenFeedbackDialog();
610 static int GetNewsEntries(out array<ref SCR_NewsEntry> entries = null)
618 for (
int i, cnt =
GetGame().GetBackendApi().GetNewsCount(); i < cnt; i++)
620 NewsFeedItem item =
GetGame().GetBackendApi().GetNewsItem(i);
628 return m_aNews.Count();
635 static int GetNotificationEntries(out array<ref SCR_NewsEntry> entries = null)
640 m_aNotifications.Clear();
643 for (
int i, cnt =
GetGame().GetBackendApi().GetNotifyCount(); i < cnt; i++)
645 NewsFeedItem item =
GetGame().GetBackendApi().GetNotifyItem(i);
652 entries = m_aNotifications;
654 return m_aNotifications.Count();
662 static int GetUnreadNewsCount()
676 static int GetUnreadNotificationCount()
690 protected static void TryExitGame()
692 int nCompleted, nTotal;
693 SCR_DownloadManager mgr = SCR_DownloadManager.GetInstance();
698 new SCR_ExitGameWhileDownloadingDialog();
class SCR_CommonDialogs SCR_ExitGameDialog()
bool IsPlatformGameConsole()
ArmaReforgerScripted GetGame()
void CheckServicesStatusIfFocused()
Check Services Status only if the main menu is still focused (given the check is delayed by SERVICES_...
ref SCR_ScriptPlatformRequestCallback m_CallbackGetPrivilege
DialogUI m_BannedDetectionDialog
void HandleEntry(string tileName, bool isContentDisabled)
MissionWorkshopItem m_TutorialMission
void LoadTutorial(SCR_MainMenuConfiguration menuConfig, notnull Widget root, bool isContentDisabled=false)
ref array< string > m_aBannedItems
void LoadMenuTiles(SCR_MainMenuConfiguration menuConfig, notnull Widget root, bool isContentDisabled=false)
class SCR_MissionMetaData TILES_LAYOUT
const string SCENARIO_LIST_WIDGET_NAME
SCR_MenuTileComponent m_FocusedTile
ref array< ref Widget > m_aTiles
void PrepareTiles(bool isContentDisabled=false)
bool IsShowingTutorial(SCR_MenuTileComponent comp)
void CreateTile(ResourceName mission, notnull Widget root, bool isRecommended=false, bool isContentDisabled=false, bool isTutorialNeeded=false)
const ResourceName CONFIG
GameSessionStorage is used to store data for whole lifetime of game executable run....
Object holding reference to resource. In destructor release the resource.
SCR_WorkshopItem GetItem(string id)
static SCR_AddonManager GetInstance()
ref ScriptInvoker m_OnCancel
ref ScriptInvoker m_OnConfirm
void GetDownloadQueueState(out int nCompleted, out int nTotal)
Might get delayed by a frame! Just use it for UI.
void SetTutorial(notnull MissionWorkshopItem tutorialMission)
void SetTutorial(notnull MissionWorkshopItem tutorialMission)
void ShowMission(notnull MissionWorkshopItem item, bool showRecommended=false)
static MissionWorkshopItem GetInGameScenario(ResourceName resource)
static void OpenIfServicesAreNotOK()
bool GetAnyDependencyMissing()