Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_ScenarioUICommon.c
Go to the documentation of this file.
1/*
2 Function library of scenario ui related methods
3*/
5{
6 // Button names
7 static const string BUTTON_PLAY = "Play";
8 static const string BUTTON_CONTINUE = "Continue";
9 static const string BUTTON_RESTART = "Restart";
10 static const string BUTTON_HOST = "Host";
11 static const string BUTTON_FIND_SERVERS = "FindServers";
12 static const string BUTTON_FAVORITE = "Favorite";
13 static const string BUTTON_SCENARIOS = "Scenarios";
14
15 // Actions
16 static const string ACTION_RESTART = "MenuRestart";
17 static const string ACTION_FIND_SERVERS = "MenuJoin";
18 static const string ACTION_HOST = "MenuHost";
19 static const string ACTION_SERVER_DETAILS = "MenuServerDetails";
20
21 // Dialogs
22 static const string DIALOG_RESTART = "scenario_restart";
23
24 //------------------------------------------------------------------------------------------------
26 static void TryPlayScenario(MissionWorkshopItem scenario)
27 {
28 if (!scenario)
29 return;
30
31 int nCompleted, nTotal;
32
34 if (mgr)
35 mgr.GetDownloadQueueState(nCompleted, nTotal);
36
38
39 if (nTotal > 0)
40 SCR_StartScenarioWhileDownloadingDialog.CreateDialog(scenario);
41 else if (addonMgr && addonMgr.CountOfEnabledAddons() > 0 && scenario.GetPlayerCount() == 1 && !scenario.GetOwner() && !scenario.Author())
42 // This checks if any of addons are enabled, scenario is singleplayer, it didn't come from the workshop and there's no author, which is default for all BI missions now.
43 SCR_StartScenarioWhileAddonsEnabledDialog.CreateDialog(scenario);
44 else
45 scenario.Play();
46 }
47
48 //------------------------------------------------------------------------------------------------
50 static void TryHostScenario(notnull MissionWorkshopItem scenario, notnull SCR_DSConfig config)
51 {
52 int nCompleted, nTotal;
53
55 if (mgr)
56 mgr.GetDownloadQueueState(nCompleted, nTotal);
57
58 if (nTotal > 0)
60 else
61 scenario.Host(config);
62 }
63
64 //------------------------------------------------------------------------------------------------
65 static bool LoadSave(MissionWorkshopItem scenario, SCR_MissionHeader header, ChimeraMenuPreset startMenu)
66 {
67 const SaveGameManager manager = GetGame().GetSaveGameManager();
68 manager.GetSaves(scenario.Id(), new SaveGameObtainCallback(ProcessLoadSave, scenario));
69 SCR_MenuLoadingComponent.SaveLastMenu(startMenu);
70 return true;
71 }
72
73 //------------------------------------------------------------------------------------------------
74 protected static void ProcessLoadSave(bool success, array<SaveGame> saves, MissionWorkshopItem scenario)
75 {
76 if (!saves.IsEmpty())
77 GetGame().GetSaveGameManager().Load(saves[saves.Count() - 1], false);
78
79 TryPlayScenario(scenario);
80 }
81
82 //------------------------------------------------------------------------------------------------
84 {
85 if (!SCR_ScenarioUICommon.CanPlay(scenario))
86 return false;
87
88 TryPlayScenario(scenario);
89 return true;
90 }
91
92 //------------------------------------------------------------------------------------------------
94 {
95 return mission && mission.GetPlayerCount() > 1;
96 }
97
98 //------------------------------------------------------------------------------------------------
99 // Default scenarios don't have a owner workshop item, so they're always ready. For the others we need to check
100 static bool IsReady(MissionWorkshopItem mission)
101 {
102 if (!mission)
103 return false;
104
105 if (mission.GetOwner())
106 return mission.GetOwner().IsReadyToRun();
107
108 return true;
109 }
110
111 //------------------------------------------------------------------------------------------------
112 static bool IsEnabled(MissionWorkshopItem mission)
113 {
114 if (!mission)
115 return false;
116
117 if (mission.GetOwner())
118 return mission.GetOwner().IsEnabled();
119
120 return true;
121 }
122
123 //------------------------------------------------------------------------------------------------
125 {
126 if (!mission)
127 return false;
128
129 if (mission.GetOwner())
130 return mission.GetOwner().GetActiveRevision();
131
132 return true;
133 }
134
135 //------------------------------------------------------------------------------------------------
137 {
138 if (!mission)
139 return true;
140
141 // There are no dependencies if scenario is not from an addon
142 if (!mission.GetOwner())
143 return false;
144
145 Revision revision = mission.GetOwner().GetActiveRevision();
146 if (!revision)
147 revision = mission.GetOwner().GetLocalRevision();
148
149 if (!revision)
150 return true;
151
152 array<WorkshopItem> dependencies = {};
153 revision.GetDependencies(dependencies);
154
155 foreach (WorkshopItem dependency : dependencies)
156 {
157 if (!dependency.GetActiveRevision())
158 return true;
159 }
160
161 return false;
162 }
163
164 //------------------------------------------------------------------------------------------------
166 {
167 if (!mission)
168 return false;
169
170 // There are no dependencies if scenario is not from an addon
171 if (!mission.GetOwner())
172 return true;
173
174 Revision revision = mission.GetOwner().GetActiveRevision();
175 if (!revision)
176 return false;
177
178 array<WorkshopItem> dependencies = {};
179 revision.GetDependencies(dependencies);
180
181 foreach (WorkshopItem dependency : dependencies)
182 {
183 revision = dependency.GetLatestRevision();
184 if (!revision || revision.GetAvailability() != ERevisionAvailability.ERA_AVAILABLE)
185 return false;
186 }
187
188 return true;
189 }
190
191 //------------------------------------------------------------------------------------------------
192 static SCR_ERevisionAvailability GetOwnerRevisionAvailability(MissionWorkshopItem mission)
193 {
194 if (!mission)
195 return SCR_ERevisionAvailability.ERA_UNKNOWN_AVAILABILITY;
196
197 WorkshopItem owner = mission.GetOwner();
198 SCR_ERevisionAvailability availability = SCR_ERevisionAvailability.ERA_AVAILABLE;
199
200 if (owner)
201 availability = SCR_AddonManager.ItemAvailability(owner);
202
203 return availability;
204 }
205
206 //------------------------------------------------------------------------------------------------
208 {
209 if (!mission)
210 return false;
211
212 WorkshopItem owner = mission.GetOwner();
213 if (!owner)
214 return false;
215
216 bool restricted;
217 int accessState = owner.GetAccessState();
218
219 WorkshopAuthor author = owner.Author();
220 if (author)
221 restricted = author.IsBlocked();
222
223 return restricted || accessState & EWorkshopItemAccessState.EWASTATE_BLOCKED || accessState & EWorkshopItemAccessState.EWASTATE_REPORTED;
224 }
225
226 //------------------------------------------------------------------------------------------------
227 static bool CanPlay(MissionWorkshopItem mission)
228 {
229 return mission && GetPlayHighestPriorityIssue(mission) == SCR_EScenarioIssues.NONE;
230 }
231
232 //------------------------------------------------------------------------------------------------
233 static bool CanJoin(MissionWorkshopItem mission)
234 {
235 return mission && GetJoinHighestPriorityIssue(mission) == SCR_EScenarioIssues.NONE;
236 }
237
238 //------------------------------------------------------------------------------------------------
239 static bool CanHost(MissionWorkshopItem mission)
240 {
241 return mission && GetHostHighestPriorityIssue(mission) == SCR_EScenarioIssues.NONE;
242 }
243
244 //------------------------------------------------------------------------------------------------
246 {
247 return GetGame().GetBackendApi().GetWorkshop().GetInGameScenario(resource);
248 }
249
250//---- REFACTOR NOTE START: This code will need to be refactored as current implementation is not conforming to the standards ----
251// The way these methods are used currently, these checks are repeated a myriad times and constantly. This is far from ideal, but was the quickest way to get it done
252
253 // --- Issues ---
254 // TODO: change the enum to flags to reduce the number of times these checks need to be performed
255 /*
256 Can Play, Continue, Restart when:
257 - Addon is downloaded and enabled (this should also enable dependencies)
258 - Dependencies are downloaded and match the main addon version
259 */
260 //------------------------------------------------------------------------------------------------
261 protected static SCR_EScenarioIssues GetPlayHighestPriorityIssue(MissionWorkshopItem mission)
262 {
263 if (!mission || GetGame().GetBackendApi().GetWorkshop().NeedAddonsScan())
264 return SCR_EScenarioIssues.MISSION_MISSING;
265
266 if (!IsAddonDownloaded(mission))
267 return SCR_EScenarioIssues.ADDON_NOT_DOWNLOADED;
268
269 if (IsMissingDependencies(mission))
270 return SCR_EScenarioIssues.DEPENDENCIES_MISSING;
271
272 if (!IsReady(mission))
273 return SCR_EScenarioIssues.DEPENDENCIES_VERSION_MISMATCH;
274
275 if (!IsEnabled(mission))
276 return SCR_EScenarioIssues.ADDON_DISABLED;
277
278 return SCR_EScenarioIssues.NONE;
279 }
280
281 /*
282 Can Join when:
283 - Is connected and multiplayer services are available
284 */
285 //------------------------------------------------------------------------------------------------
286 protected static SCR_EScenarioIssues GetJoinHighestPriorityIssue(MissionWorkshopItem mission)
287 {
288 if (!mission || GetGame().GetBackendApi().GetWorkshop().NeedAddonsScan())
289 return SCR_EScenarioIssues.MISSION_MISSING;
290
292 return SCR_EScenarioIssues.CONNECTION_ISSUE;
293
294 return SCR_EScenarioIssues.NONE;
295 }
296
297 /*
298 Can Host when:
299 - Is connected and multiplayer services are available
300 - Addon is available on Workshop, downloaded and enabled (this should also enable dependencies)
301 - Dependencies are available on Workshop, downloaded and match the main addon version
302 */
303 //------------------------------------------------------------------------------------------------
304 protected static SCR_EScenarioIssues GetHostHighestPriorityIssue(MissionWorkshopItem mission)
305 {
306 if (!mission || GetGame().GetBackendApi().GetWorkshop().NeedAddonsScan())
307 return SCR_EScenarioIssues.MISSION_MISSING;
308
310 return SCR_EScenarioIssues.CONNECTION_ISSUE;
311
312 if (!IsAddonDownloaded(mission))
313 return SCR_EScenarioIssues.ADDON_NOT_DOWNLOADED;
314
315 if (GetOwnerRevisionAvailability(mission) != SCR_ERevisionAvailability.ERA_AVAILABLE)
316 return SCR_EScenarioIssues.ADDON_AVAILABILITY_ISSUE;
317
318 if (IsMissingDependencies(mission))
319 return SCR_EScenarioIssues.DEPENDENCIES_MISSING;
320
321 if (!IsReady(mission))
322 return SCR_EScenarioIssues.DEPENDENCIES_VERSION_MISMATCH;
323
324 if (!AreDependenciesAvailable(mission))
325 return SCR_EScenarioIssues.DEPENDENCIES_AVAILABILITY_ISSUE;
326
327 if (!IsEnabled(mission))
328 return SCR_EScenarioIssues.ADDON_DISABLED;
329
330 return SCR_EScenarioIssues.NONE;
331 }
332
333//---- REFACTOR NOTE END ----
334
335//---- REFACTOR NOTE START: This code will need to be refactored as current implementation is not conforming to the standards ----
336// Overreliance on scripts and hardcoded strings to drive UI looks. We should start considering the possibility of defining configurable stylesheets designers can work with outside of scripts
337
338 // --- UI ---
339 //------------------------------------------------------------------------------------------------
340 protected static string GetErrorTexture(SCR_EScenarioIssues issue, SCR_ERevisionAvailability availability)
341 {
342 switch (issue)
343 {
344 case SCR_EScenarioIssues.NONE: return "";
345 case SCR_EScenarioIssues.CONNECTION_ISSUE: return SCR_ConnectionUICommon.GetConnectionIssuesIcon();
346 case SCR_EScenarioIssues.MISSION_MISSING: return SCR_WorkshopUiCommon.ICON_MOD_NOT_AVAILABLE;
347 case SCR_EScenarioIssues.ADDON_DISABLED: return SCR_WorkshopUiCommon.ICON_DISABLED;
348 case SCR_EScenarioIssues.ADDON_NOT_DOWNLOADED: return SCR_WorkshopUiCommon.ICON_MOD_NOT_AVAILABLE;
349 case SCR_EScenarioIssues.ADDON_AVAILABILITY_ISSUE: return SCR_WorkshopUiCommon.GetRevisionAvailabilityErrorTexture(availability);
350 case SCR_EScenarioIssues.DEPENDENCIES_MISSING: return SCR_WorkshopUiCommon.ICON_DEPENDENCIES;
351 case SCR_EScenarioIssues.DEPENDENCIES_VERSION_MISMATCH: return SCR_WorkshopUiCommon.ICON_DEPENDENCIES;
352 case SCR_EScenarioIssues.DEPENDENCIES_AVAILABILITY_ISSUE: return SCR_WorkshopUiCommon.ICON_DEPENDENCIES;
353 }
354
355 return string.Empty;
356 }
357
358 //------------------------------------------------------------------------------------------------
359 protected static string GetErrorMessage(SCR_EScenarioIssues issue, SCR_ERevisionAvailability availability)
360 {
361 switch (issue)
362 {
363 case SCR_EScenarioIssues.NONE: return "";
364 case SCR_EScenarioIssues.CONNECTION_ISSUE: return SCR_ConnectionUICommon.GetConnectionIssuesMessage();
365 case SCR_EScenarioIssues.MISSION_MISSING: return SCR_WorkshopUiCommon.MESSAGE_MOD_NOT_AVAILABLE;
366 case SCR_EScenarioIssues.ADDON_DISABLED: return SCR_WorkshopUiCommon.LABEL_ADDON_DISABLED;
367 case SCR_EScenarioIssues.ADDON_NOT_DOWNLOADED: return SCR_WorkshopUiCommon.LABEL_ADDON_MISSING;
368 case SCR_EScenarioIssues.ADDON_AVAILABILITY_ISSUE: return SCR_WorkshopUiCommon.GetRevisionAvailabilityErrorMessage(availability);
369 case SCR_EScenarioIssues.DEPENDENCIES_MISSING: return SCR_WorkshopUiCommon.MESSAGE_DEPENDENCIES_MISSING;
370 case SCR_EScenarioIssues.DEPENDENCIES_VERSION_MISMATCH: return SCR_WorkshopUiCommon.MESSAGE_DEPENDENCIES_MISSING;
371 case SCR_EScenarioIssues.DEPENDENCIES_AVAILABILITY_ISSUE: return SCR_WorkshopUiCommon.MESSAGE_DEPENDENCIES_MISSING;
372 }
373
374 return string.Empty;
375 }
376
377 //------------------------------------------------------------------------------------------------
378 protected static void SetInputButtonEnabled(SCR_InputButtonComponent button, SCR_EScenarioIssues issue, SCR_ERevisionAvailability availability)
379 {
380 if (!button)
381 return;
382
383 bool enabled = issue == SCR_EScenarioIssues.NONE;
384
385 button.SetEnabled(enabled, false);
386
387 if (enabled)
388 {
389 button.ResetTexture();
390 return;
391 }
392
393 button.SetTexture(UIConstants.ICONS_IMAGE_SET, GetErrorTexture(issue, availability), Color.FromInt(UIColors.WARNING_DISABLED.PackToInt()));
394 }
395
396 //------------------------------------------------------------------------------------------------
397 protected static void UpdateMouseButtonTooltip(SCR_ScriptedWidgetTooltip tooltip, SCR_EScenarioIssues issue, SCR_ERevisionAvailability availability)
398 {
399 if (!tooltip)
400 return;
401
403 if (!content)
404 return;
405
406 if (issue == SCR_EScenarioIssues.NONE)
407 {
408 content.ResetMessage();
409 content.SetMessageColor(Color.FromInt(UIColors.NEUTRAL_INFORMATION.PackToInt()));
410 content.ResetActionColor();
411 return;
412 }
413
414 content.SetMessage(GetErrorMessage(issue, availability));
415 content.SetMessageColor(Color.FromInt(UIColors.WARNING.PackToInt()));
416 content.SetActionColor(Color.FromInt(UIColors.IDLE_DISABLED.PackToInt()));
417 }
418
419 // --- Play, Continue, Restart ---
420 //------------------------------------------------------------------------------------------------
421 static void UpdatePlayMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible = true)
422 {
423 if (!button)
424 return;
425
426 visible &= entryFocused;
427
428 button.SetVisible(visible);
429 if (!visible)
430 return;
431
432 SCR_ListEntryHelper.UpdateMouseButtonColor(button, GetPlayHighestPriorityIssue(mission) != SCR_EScenarioIssues.NONE, entryFocused);
433
434 SaveGameObtainCallback cb(UpdateSaveRelatedMouseButton, new Tuple2<SCR_ModularButtonComponent, bool>(button, false));
435 GetGame().GetSaveGameManager().GetSaves(mission.Id(), cb);
436 }
437
438 //------------------------------------------------------------------------------------------------
439 static void UpdateContinueMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible = true)
440 {
441 if (!button)
442 return;
443
444 button.SetVisible(false);
445 if (!visible || !entryFocused)
446 return;
447
448 SCR_ListEntryHelper.UpdateMouseButtonColor(button, GetPlayHighestPriorityIssue(mission) != SCR_EScenarioIssues.NONE, entryFocused);
449
450 SaveGameObtainCallback cb(UpdateSaveRelatedMouseButton, new Tuple2<SCR_ModularButtonComponent, bool>(button, true));
451 GetGame().GetSaveGameManager().GetSaves(mission.Id(), cb);
452 }
453
454 //------------------------------------------------------------------------------------------------
455 static void UpdateRestartMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible = true)
456 {
457 if (!button)
458 return;
459
460 button.SetVisible(false);
461 if (!visible)
462 return;
463
464 SCR_ListEntryHelper.UpdateMouseButtonColor(button, GetPlayHighestPriorityIssue(mission) != SCR_EScenarioIssues.NONE, entryFocused);
465
466 SaveGameObtainCallback cb(UpdateSaveRelatedMouseButton, new Tuple2<SCR_ModularButtonComponent, bool>(button, true));
467 GetGame().GetSaveGameManager().GetSaves(mission.Id(), cb);
468 }
469
470 //------------------------------------------------------------------------------------------------
471 protected static void UpdateSaveRelatedMouseButton(bool success, array<SaveGame> saves, Managed ctx)
472 {
473 if (!success || saves.IsEmpty())
474 return;
475
476 auto context = Tuple2<SCR_ModularButtonComponent, bool>.Cast(ctx);
477 if (context.param1)
478 context.param1.SetVisible(context.param2);
479 }
480
481 //------------------------------------------------------------------------------------------------
486
487 //------------------------------------------------------------------------------------------------
488 static void UpdatePlayInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible = true)
489 {
490 if (!button)
491 return;
492
493 button.SetVisible(visible, false);
494 if (!visible)
495 return;
496
498
499 SaveGameObtainCallback cb(UpdateSaveRelatedInputButton, new Tuple2<SCR_InputButtonComponent, bool>(button, false));
500 GetGame().GetSaveGameManager().GetSaves(mission.Id(), cb);
501 }
502
503 //------------------------------------------------------------------------------------------------
504 static void UpdateContinueInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible = true)
505 {
506 if (!button)
507 return;
508
509 button.SetVisible(false, false);
510 if (!visible)
511 return;
512
514
515 SaveGameObtainCallback cb(UpdateSaveRelatedInputButton, new Tuple2<SCR_InputButtonComponent, bool>(button, true));
516 GetGame().GetSaveGameManager().GetSaves(mission.Id(), cb);
517 }
518
519 //------------------------------------------------------------------------------------------------
520 static void UpdateRestartInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible = true)
521 {
522 UpdateContinueInputButton(button, mission, visible); // It does the same for now
523 }
524
525 //------------------------------------------------------------------------------------------------
526 protected static void UpdateSaveRelatedInputButton(bool success, array<SaveGame> saves, Managed ctx)
527 {
528 if (!success || saves.IsEmpty())
529 return;
530
531 auto context = Tuple2<SCR_InputButtonComponent, bool>.Cast(ctx);
532 if (context.param1)
533 context.param1.SetVisible(context.param2, false);
534 }
535
536 // --- Join (Find Servers) ---
537 //------------------------------------------------------------------------------------------------
538 static void UpdateJoinMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible = true)
539 {
540 if (!button)
541 return;
542
543 visible = visible && entryFocused && IsMultiplayer(mission);
544
545 button.SetVisible(visible);
546 if (visible)
547 SCR_ListEntryHelper.UpdateMouseButtonColor(button, GetJoinHighestPriorityIssue(mission) != SCR_EScenarioIssues.NONE, entryFocused);
548 }
549
550 //------------------------------------------------------------------------------------------------
555
556 //------------------------------------------------------------------------------------------------
557 static void UpdateJoinInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible = true)
558 {
559 if (!button)
560 return;
561
562 visible = visible && IsMultiplayer(mission);
563 button.SetVisible(visible, false);
564
565 if (visible)
567 }
568
569 // --- Host ---
570 //------------------------------------------------------------------------------------------------
571 static void UpdateHostMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible = true)
572 {
573 if (!button)
574 return;
575
576 visible = visible && entryFocused && IsMultiplayer(mission) && !GetGame().IsPlatformGameConsole();
577
578 button.SetVisible(visible);
579 if (visible)
580 SCR_ListEntryHelper.UpdateMouseButtonColor(button, GetHostHighestPriorityIssue(mission) != SCR_EScenarioIssues.NONE, entryFocused);
581 }
582
583 //------------------------------------------------------------------------------------------------
588
589 //------------------------------------------------------------------------------------------------
590 static void UpdateHostInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible = true)
591 {
592 if (!button)
593 return;
594
595 visible = visible && IsMultiplayer(mission) && !GetGame().IsPlatformGameConsole();
596 button.SetVisible(visible, false);
597
598 if (visible)
600 }
601
602 // --- Input Buttons ---
603 //------------------------------------------------------------------------------------------------
604 static void UpdateInputButtons(MissionWorkshopItem mission, array<SCR_InputButtonComponent> buttons, bool visible = true)
605 {
606 Widget root;
607
608 foreach (SCR_InputButtonComponent button : buttons)
609 {
610 root = button.GetRootWidget();
611 if (!root)
612 continue;
613
614 switch (root.GetName())
615 {
616 case SCR_ConfigurableDialogUi.BUTTON_CONFIRM: UpdatePlayInputButton(button, mission, visible); break;
617 case BUTTON_PLAY: UpdatePlayInputButton(button, mission, visible); break;
618 case BUTTON_CONTINUE: UpdateContinueInputButton(button, mission, visible); break;
619 case BUTTON_RESTART: UpdateRestartInputButton(button, mission, visible); break;
620 case BUTTON_FIND_SERVERS: UpdateJoinInputButton(button, mission, visible); break;
621 case BUTTON_HOST: UpdateHostInputButton(button, mission, visible); break;
622 }
623 }
624 }
625
626 // --- Tooltips ---
627 //------------------------------------------------------------------------------------------------
629 {
630 if (!tooltip)
631 return;
632
633 if (tooltip.IsValid(BUTTON_PLAY) || tooltip.IsValid(BUTTON_CONTINUE) || tooltip.IsValid(BUTTON_RESTART))
634 UpdatePlayMouseButtonTooltip(tooltip, mission);
635
636 else if (tooltip.IsValid(BUTTON_FIND_SERVERS))
637 UpdateJoinMouseButtonTooltip(tooltip, mission);
638
639 else if (tooltip.IsValid(BUTTON_HOST))
640 UpdateHostMouseButtonTooltip(tooltip, mission);
641 }
642
643 //---- REFACTOR NOTE END ----
644}
645
646enum SCR_EScenarioIssues
647{
656 DEPENDENCIES_AVAILABILITY_ISSUE
657}
class RestAPIHelper< JsonApiStruct T > content
ChimeraMenuPreset
Menu presets.
ArmaReforgerScripted GetGame()
Definition game.c:1398
class SCR_ScenarioUICommon DEPENDENCIES_VERSION_MISMATCH
class SCR_ScenarioUICommon ADDON_DISABLED
class SCR_ScenarioUICommon ADDON_NOT_DOWNLOADED
class SCR_ScenarioUICommon MISSION_MISSING
class SCR_ScenarioUICommon CONNECTION_ISSUE
class SCR_ScenarioUICommon ADDON_AVAILABILITY_ISSUE
class SCR_ScenarioUICommon DEPENDENCIES_MISSING
Definition Color.c:13
int CountOfEnabledAddons()
Return int count of all enabled mods.
static SCR_ERevisionAvailability ItemAvailability(notnull WorkshopItem item)
static SCR_AddonManager GetInstance()
static string GetConnectionIssuesMessage()
static string GetConnectionIssuesIcon()
void GetDownloadQueueState(out int nCompleted, out int nTotal)
Might get delayed by a frame! Just use it for UI.
static SCR_DownloadManager GetInstance()
static void CreateDialog(MissionWorkshopItem scenario, SCR_DSConfig config)
override void SetEnabled(bool enabled, bool animate=true)
void SetTexture(string imagePath, string image=string.Empty, Color color=Color.FromInt(Color.WHITE), SCR_EButtonSize buttonType=SCR_EButtonSize.KEYBOARD_MEDIUM)
static void UpdateHostMouseButtonTooltip(SCR_ScriptedWidgetTooltip tooltip, MissionWorkshopItem mission)
static void ProcessLoadSave(bool success, array< SaveGame > saves, MissionWorkshopItem scenario)
static void UpdateJoinMouseButtonTooltip(SCR_ScriptedWidgetTooltip tooltip, MissionWorkshopItem mission)
static SCR_EScenarioIssues GetPlayHighestPriorityIssue(MissionWorkshopItem mission)
static SCR_EScenarioIssues GetJoinHighestPriorityIssue(MissionWorkshopItem mission)
static bool RestartScenario(MissionWorkshopItem scenario)
static void UpdateContinueMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible=true)
static void UpdateMouseButtonTooltips(SCR_ScriptedWidgetTooltip tooltip, MissionWorkshopItem mission)
static void UpdateInputButtons(MissionWorkshopItem mission, array< SCR_InputButtonComponent > buttons, bool visible=true)
static bool CanJoin(MissionWorkshopItem mission)
static bool IsEnabled(MissionWorkshopItem mission)
static void UpdateJoinInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible=true)
static void UpdatePlayInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible=true)
static bool IsMissingDependencies(MissionWorkshopItem mission)
static bool IsMultiplayer(MissionWorkshopItem mission)
static void UpdateMouseButtonTooltip(SCR_ScriptedWidgetTooltip tooltip, SCR_EScenarioIssues issue, SCR_ERevisionAvailability availability)
static bool CanHost(MissionWorkshopItem mission)
static void UpdateSaveRelatedMouseButton(bool success, array< SaveGame > saves, Managed ctx)
static string GetErrorMessage(SCR_EScenarioIssues issue, SCR_ERevisionAvailability availability)
static void UpdateJoinMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible=true)
static bool IsOwnerRestricted(MissionWorkshopItem mission)
static void UpdateHostMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible=true)
static SCR_EScenarioIssues GetHostHighestPriorityIssue(MissionWorkshopItem mission)
static void UpdateRestartMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible=true)
static bool AreDependenciesAvailable(MissionWorkshopItem mission)
static void UpdateContinueInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible=true)
static void UpdatePlayMouseButtonTooltip(SCR_ScriptedWidgetTooltip tooltip, MissionWorkshopItem mission)
static void UpdatePlayMouseButton(SCR_ModularButtonComponent button, MissionWorkshopItem mission, bool entryFocused, bool visible=true)
static bool IsAddonDownloaded(MissionWorkshopItem mission)
static void UpdateHostInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible=true)
static SCR_ERevisionAvailability GetOwnerRevisionAvailability(MissionWorkshopItem mission)
static string GetErrorTexture(SCR_EScenarioIssues issue, SCR_ERevisionAvailability availability)
static bool CanPlay(MissionWorkshopItem mission)
static MissionWorkshopItem GetInGameScenario(ResourceName resource)
static bool IsReady(MissionWorkshopItem mission)
static void SetInputButtonEnabled(SCR_InputButtonComponent button, SCR_EScenarioIssues issue, SCR_ERevisionAvailability availability)
static void UpdateSaveRelatedInputButton(bool success, array< SaveGame > saves, Managed ctx)
static void UpdateRestartInputButton(SCR_InputButtonComponent button, MissionWorkshopItem mission, bool visible=true)
bool IsValid(string tag, Widget hoverWidget=null, ResourceName presets=string.Empty)
SCR_ScriptedWidgetTooltipContentBase GetContent()
static string GetRevisionAvailabilityErrorMessage(WorkshopItem item)
static string GetRevisionAvailabilityErrorTexture(WorkshopItem item)
Workshop Item instance.
@ NONE
When Shape is created and not initialized yet.
Definition ShapeType.c:15
int IsEnabled()
Returns true if the light is enabled.
ERevisionAvailability