15 [
Attribute(defvalue:
"{F7138F20BD16D89A}UI/layouts/Menus/DeployMenu/DebriefingScreenFourUnevenTiles.layout")]
16 protected ResourceName m_sFourUnevenTilesLayout;
19 protected ref SCR_WelcomeScreenBaseContent m_TopLeftTile;
22 protected ref SCR_WelcomeScreenBaseContent m_TopRightTile;
25 protected ref SCR_WelcomeScreenBaseContent m_BottomLeftTile;
28 protected ref SCR_WelcomeScreenBaseContent m_BottomRightTile;
32 protected const string TOP_LEFT_TILE =
"TopLeftTile";
33 protected const string TOP_RIGHT_TILE =
"TopRightTile";
34 protected const string BOTTOM_LEFT_TILE =
"BottomLeftTile";
35 protected const string BOTTOM_RIGHT_TILE =
"BottomRightTile";
37 protected const string TOP_LEFT_TILE_BUTTON =
"TopLeftTileButton";
38 protected const string TOP_RIGHT_TILE_BUTTON =
"TopRightTileButton";
39 protected const string BOTTOM_LEFT_TILE_BUTTON =
"BottomLeftTileButton";
40 protected const string BOTTOM_RIGHT_TILE_BUTTON =
"BottomRightTileButton";
43 override void InitContent(SCR_WelcomeScreenMenu menu)
45 Widget targetColumn = menu.GetRootWidget().FindAnyWidget(
WELCOME_CONTENT);
49 GetGame().GetWorkspace().CreateWidgets(m_sFourUnevenTilesLayout, targetColumn);
53 m_aScreenBaseContents.Insert(m_TopLeftTile);
54 m_TopLeftTile.InitContent(menu, TOP_LEFT_TILE, TOP_LEFT_TILE_BUTTON);
59 m_aScreenBaseContents.Insert(m_TopRightTile);
60 m_TopRightTile.InitContent(menu, TOP_RIGHT_TILE, TOP_RIGHT_TILE_BUTTON);
65 m_aScreenBaseContents.Insert(m_BottomLeftTile);
66 m_BottomLeftTile.InitContent(menu, BOTTOM_LEFT_TILE, BOTTOM_LEFT_TILE_BUTTON);
69 if (m_BottomRightTile)
71 m_aScreenBaseContents.Insert(m_BottomRightTile);
72 m_BottomRightTile.InitContent(menu, BOTTOM_RIGHT_TILE, BOTTOM_RIGHT_TILE_BUTTON);
79class SCR_DebriefingScreenBigImageContent : SCR_WelcomeScreenBaseContent
81 [
Attribute(
"", UIWidgets.ResourcePickerThumbnail,
"Big image to be shown",
params:
"edds")]
82 protected ResourceName m_sContentImage;
84 [
Attribute(defvalue:
"{6CD5DC3DE2C54BBE}UI/layouts/Menus/DeployMenu/DebriefingScreenBigImageTile.layout")]
85 protected ResourceName m_sBigImageLayout;
92 override void InitContent(SCR_WelcomeScreenMenu menu,
string column,
string columnButton)
94 Widget targetTile = menu.GetRootWidget().FindAnyWidget(column);
98 Widget bigImageWidget =
GetGame().GetWorkspace().CreateWidgets(m_sBigImageLayout, targetTile);
102 ImageWidget imageWidget = ImageWidget.Cast(bigImageWidget.FindAnyWidget(
"ImageWidget"));
103 if (imageWidget && m_sContentImage)
104 imageWidget.LoadImageTexture(0, m_sContentImage,
false,
false);
110 ResourceName GetImage()
112 return m_sContentImage;
118class SCR_DebriefingScreenSummaryContent : SCR_WelcomeScreenBaseContent
121 protected string m_sTitleText;
127 protected string m_sSubtitleLostText;
132 [
Attribute(defvalue:
"{10A7983E48474CB2}UI/layouts/Menus/DeployMenu/DebriefingScreenSummaryTile.layout")]
133 protected ResourceName m_sSummaryLayout;
135 protected Widget m_wSummaryWidget;
142 override void InitContent(SCR_WelcomeScreenMenu menu,
string column,
string columnButton)
144 m_sContentName = column;
146 Widget targetTile = menu.GetRootWidget().FindAnyWidget(column);
150 m_wSummaryWidget =
GetGame().GetWorkspace().CreateWidgets(m_sSummaryLayout, targetTile);
151 if (!m_wSummaryWidget)
163 protected void FillSummaryWidget()
165 string characterRank =
"";
166 string subtitle = GetSubtitleLostText();
167 IEntity player =
GetGame().GetPlayerController().GetControlledEntity();
172 characterRank = rankComponent.GetCharacterRankName(player);
183 Faction faction = factionManager.GetLocalPlayerFaction();
190 array<int> winnerIds = {};
191 array<int> winnerFactionIds = {};
192 endData.GetWinnerIds(winnerIds);
193 endData.GetFactionWinnerIds(winnerFactionIds);
194 if (!winnerFactionIds.IsEmpty())
196 if (winnerFactionIds.Contains(factionManager.GetFactionIndex(faction)))
199 else if (!winnerIds.IsEmpty())
201 int playerID =
GetGame().GetPlayerController().GetPlayerId();
202 if (winnerIds.Contains(playerID))
207 RichTextWidget subtitleText = RichTextWidget.Cast(m_wSummaryWidget.FindAnyWidget(
"SubtitleText"));
209 subtitleText.SetTextFormat(subtitle, characterRank,
string.Format(
"<color rgba=%1>%2</color>", UIColors.FormatColor(UIColors.CONTRAST_COLOR), SCR_PlayerNamesFilterCache.GetInstance().GetPlayerDisplayName(
GetGame().
GetPlayerController().
GetPlayerId())));
211 RichTextWidget descriptionText = RichTextWidget.Cast(m_wSummaryWidget.FindAnyWidget(
"DescriptionText"));
212 if (!descriptionText)
215 descriptionText.SetText(GetDescriptionText());
217 if (SCR_StringHelper.IsEmptyOrWhiteSpace(GetDescriptionText()))
219 SCR_GameOverScreenManagerComponent gameOverScreenMgr = SCR_GameOverScreenManagerComponent.Cast(gamemode.FindComponent(SCR_GameOverScreenManagerComponent));
220 if (!gameOverScreenMgr)
223 SCR_GameOverScreenConfig gameOverConfig = gameOverScreenMgr.GetGameOverConfig();
227 SCR_BaseGameOverScreenInfo gameOverScreenInfo;
228 gameOverConfig.
GetGameOverScreenInfo(gameOverScreenMgr.GetCurrentGameOverType(), gameOverScreenInfo);
229 if (!gameOverScreenInfo)
232 if (!SCR_StringHelper.IsEmptyOrWhiteSpace(gameOverScreenInfo.
GetDebriefing(faction, null)))
233 descriptionText.SetText(gameOverScreenInfo.
GetDebriefing(faction, null));
235 descriptionText.SetText(gameOverScreenInfo.
GetSubtitle(faction, null));
242 void UpdateSummarySubtitle(
string subtitle)
245 RichTextWidget subtitleText = RichTextWidget.Cast(m_wSummaryWidget.FindAnyWidget(
"SubtitleText"));
247 subtitleText.SetText(subtitle);
253 void UpdateSummaryDescription(
string description)
256 RichTextWidget descriptionText = RichTextWidget.Cast(m_wSummaryWidget.FindAnyWidget(
"DescriptionText"));
258 descriptionText.SetText(description);
263 string GetTitleText()
277 string GetSubtitleLostText()
279 return m_sSubtitleLostText;
284 string GetDescriptionText()
292class SCR_DebriefingScreenFinishedObjectivesContent : SCR_WelcomeScreenBaseContent
295 protected string m_sTitleText;
297 [
Attribute(defvalue:
"{0B7DDF77E24F0C63}UI/layouts/Menus/DeployMenu/DebriefingScreenFinishedObjectivesTile.layout")]
298 protected ResourceName m_sFinishedObjectivesTileLayout;
300 [
Attribute(defvalue:
"{6B9E63C758849B7F}UI/layouts/Menus/DeployMenu/DebriefingScreenMissionObjective.layout")]
301 protected ResourceName m_sFinishedObjectivesLayout;
303 [
Attribute(defvalue:
"7",
desc:
"Max number of objectives that can be shown on a single page",
params:
"1 inf")]
304 protected int m_iMaxNumberOfObjectives;
306 [
Attribute(defvalue:
"false",
desc:
"Use Task Finish History Manager for getting the list of Task Info")]
307 protected bool m_bUseTaskFinishHistoryManager;
309 protected Widget m_wFinishedObjectivesWidget;
310 protected ButtonWidget m_wColumnButton;
311 protected ref array<Widget> m_aFinishedObjectivesWidgets = {};
313 protected int m_iFinishedTasksCount;
314 protected ref array<ref SCR_TaskUIInfo> m_aFinishedTasksUIInfo;
321 override void InitContent(SCR_WelcomeScreenMenu menu,
string column,
string columnButton)
323 m_sContentName = column;
325 Widget targetTile = menu.GetRootWidget().FindAnyWidget(column);
329 m_wFinishedObjectivesWidget =
GetGame().GetWorkspace().CreateWidgets(m_sFinishedObjectivesTileLayout, targetTile);
330 if (!m_wFinishedObjectivesWidget)
333 Widget finishedObjectivesContent = m_wFinishedObjectivesWidget.FindAnyWidget(
"FinishedObjectivesLayout");
334 if (!finishedObjectivesContent)
337 m_wColumnButton = ButtonWidget.Cast(menu.GetRootWidget().FindAnyWidget(columnButton));
338 if (!m_wColumnButton)
341 FillFinishedObjectivesWidget(finishedObjectivesContent);
343 HandlePagination(m_iFinishedTasksCount > m_iMaxNumberOfObjectives);
349 override void ToggleInteractions(
bool enabled)
351 HandlePagination(enabled);
359 if (!m_aFinishedTasksUIInfo)
360 m_aFinishedTasksUIInfo = {};
362 m_aFinishedTasksUIInfo.Clear();
364 if (m_bUseTaskFinishHistoryManager)
366 int playerId =
GetGame().GetPlayerController().GetPlayerId();
371 foreach (SCR_TaskFinishEntry entry : finishedTasks)
373 if (!entry.WasSuccessful())
377 entry.GetUIInfo(info);
378 m_aFinishedTasksUIInfo.Insert(info);
383 SCR_TaskSystem taskSystem = SCR_TaskSystem.GetInstance();
391 Faction faction = factionManager.GetLocalPlayerFaction();
395 array<SCR_Task> completedTasks = {};
396 taskSystem.GetTasksByState(completedTasks,
SCR_ETaskState.COMPLETED, faction.GetFactionKey());
399 m_aFinishedTasksUIInfo.Insert(
task.GetTaskUIInfo());
403 m_iFinishedTasksCount = m_aFinishedTasksUIInfo.Count();
409 void FillFinishedObjectivesWidget(Widget
content)
411 RichTextWidget titleText = RichTextWidget.Cast(m_wFinishedObjectivesWidget.FindAnyWidget(
"TitleText"));
413 titleText.SetText(GetTitleText());
418 if (m_iFinishedTasksCount < m_iMaxNumberOfObjectives)
420 Widget paginationWidget = m_wFinishedObjectivesWidget.FindAnyWidget(
"BottomTitleSizeLayout");
421 paginationWidget.SetVisible(
false);
427 protected void InitPagination()
429 Widget previousButtonWidget = m_wFinishedObjectivesWidget.FindAnyWidget(
"PrevButton");
430 if (!previousButtonWidget)
433 SCR_PagingButtonComponent previousButton = SCR_PagingButtonComponent.Cast(previousButtonWidget.FindHandler(SCR_PagingButtonComponent));
435 previousButton.m_OnClicked.Insert(ButtonClicked);
437 Widget nextButtonWidget = m_wFinishedObjectivesWidget.FindAnyWidget(
"NextButton");
438 if (!nextButtonWidget)
441 SCR_PagingButtonComponent nextButton = SCR_PagingButtonComponent.Cast(nextButtonWidget.FindHandler(SCR_PagingButtonComponent));
443 nextButton.m_OnClicked.Insert(ButtonClicked);
448 protected void ButtonClicked()
450 GetGame().GetWorkspace().SetFocusedWidget(m_wColumnButton);
456 protected void HandlePagination(
bool enabled =
false)
458 Widget previousButtonWidget = m_wFinishedObjectivesWidget.FindAnyWidget(
"PrevButton");
459 if (!previousButtonWidget)
462 SCR_PagingButtonComponent previousButton = SCR_PagingButtonComponent.Cast(previousButtonWidget.FindHandler(SCR_PagingButtonComponent));
467 previousButton.
m_OnActivated.Insert(PreviousButtonActivated);
469 previousButton.
m_OnActivated.Remove(PreviousButtonActivated);
471 Widget nextButtonWidget = m_wFinishedObjectivesWidget.FindAnyWidget(
"NextButton");
472 if (!nextButtonWidget)
475 SCR_PagingButtonComponent nextButton = SCR_PagingButtonComponent.Cast(nextButtonWidget.FindHandler(SCR_PagingButtonComponent));
487 protected void PreviousButtonActivated()
489 int currentPage = GetCurrentPage();
497 FlipPage(currentPage);
502 protected void NextButtonActivated()
504 int currentPage = GetCurrentPage();
506 if (currentPage == Math.Ceil(m_iFinishedTasksCount/6))
509 FlipPage(currentPage);
515 protected void FlipPage(
int currentPage)
521 Widget finishedObjectivesContentHolder;
522 for (
int i = 0; i < m_iMaxNumberOfObjectives - 1; i++)
524 taskId = currentPage * (m_iMaxNumberOfObjectives - 1) + i;
525 if (m_aFinishedObjectivesWidgets.IsIndexValid(i))
526 entry = m_aFinishedObjectivesWidgets[i];
530 if (taskId >= m_iFinishedTasksCount)
533 entry.SetVisible(
false);
540 if (!finishedObjectivesContentHolder)
542 finishedObjectivesContentHolder = m_wFinishedObjectivesWidget.FindAnyWidget(
"FinishedObjectivesLayout");
543 if (!finishedObjectivesContentHolder)
547 entry =
GetGame().GetWorkspace().CreateWidgets(m_sFinishedObjectivesLayout, finishedObjectivesContentHolder);
548 m_aFinishedObjectivesWidgets.Insert(entry);
551 entry.SetVisible(
true);
552 name = RichTextWidget.Cast(entry.FindAnyWidget(
"ObjectiveText"));
553 info = m_aFinishedTasksUIInfo[taskId];
557 SetCurrentPage(currentPage);
559 Widget pages = m_wFinishedObjectivesWidget.FindAnyWidget(
"Pages");
563 SCR_SelectionHintComponent pagesVisualised = SCR_SelectionHintComponent.Cast(pages.FindHandler(SCR_SelectionHintComponent));
564 if (!pagesVisualised)
583 void SetCurrentPage(
int page)
590 string GetTitleText()
598class SCR_DebriefingScreenStatisticsContent : SCR_WelcomeScreenBaseContent
601 protected string m_sTitleText;
604 protected ref array<ref SCR_DebriefingScreenStatisticBaseClass> m_aStatistics;
606 [
Attribute(defvalue:
"{64B98222099C391E}UI/layouts/Menus/DeployMenu/DebriefingScreenStatisticsTile.layout")]
607 protected ResourceName m_sStatisticsTileLayout;
609 [
Attribute(defvalue:
"{F2B6C48FDA2E261E}UI/layouts/Menus/DeployMenu/DebriefingScreenStatistic.layout")]
610 protected ResourceName m_sStatisticsLayout;
612 protected Widget m_wStatisticsWidget;
619 override void InitContent(SCR_WelcomeScreenMenu menu,
string column,
string columnButton)
621 m_sContentName = column;
623 Widget targetTile = menu.GetRootWidget().FindAnyWidget(column);
627 m_wStatisticsWidget =
GetGame().GetWorkspace().CreateWidgets(m_sStatisticsTileLayout, targetTile);
628 if (!m_wStatisticsWidget)
631 Widget statisticsContent = m_wStatisticsWidget.FindAnyWidget(
"StatsLayout");
632 if (!statisticsContent)
635 FillStatisticsWidget(statisticsContent);
641 void FillStatisticsWidget(Widget
content)
643 RichTextWidget titleText = RichTextWidget.Cast(m_wStatisticsWidget.FindAnyWidget(
"TitleText"));
644 titleText.SetText(GetTitleText());
646 array<ref SCR_DebriefingScreenStatisticBaseClass> statistics = {};
648 statisticsCount = GetStatistics(statistics);
651 if (statisticsCount < 7)
652 statsCycleCount = statisticsCount;
656 SCR_PlayerData playerData =
GetGame().GetDataCollector().GetPlayerData(0,
true,
false);
660 for (
int i = 0; i < statsCycleCount; ++i)
663 Widget statistic =
GetGame().GetWorkspace().CreateWidgets(m_sStatisticsLayout,
content);
665 statistics[i].InitStatistic(stats);
666 RichTextWidget name = RichTextWidget.Cast(statistic.FindAnyWidget(
"StatisticResult"));
667 name.SetText(statistics[i].GetStatisticResult());
675 int GetStatistics(out array<ref SCR_DebriefingScreenStatisticBaseClass> statistics)
677 statistics = m_aStatistics;
679 return m_aStatistics.Count();
684 string GetTitleText()
692class SCR_DebriefingScreenStatisticBaseClass
694 protected string m_sStatisticResult;
699 void InitStatistic(notnull array<float> stats);
703 string GetStatisticResult()
705 return m_sStatisticResult;
711class SCR_DebriefingScreenStatisticShotsFired : SCR_DebriefingScreenStatisticBaseClass
714 override void InitStatistic(notnull array<float> stats)
716 m_sStatisticResult =
string.Format(WidgetManager.Translate(
"<b>#AR-DebriefingScreen_Statistics_Rounds</b>", Math.Floor(stats[
SCR_EDataStats.SHOTS])));
722class SCR_DebriefingScreenStatisticKills : SCR_DebriefingScreenStatisticBaseClass
725 override void InitStatistic(notnull array<float> stats)
727 m_sStatisticResult =
string.Format(WidgetManager.Translate(
"<b>#AR-DebriefingScreen_Statistics_Kills</b>", Math.Floor(stats[
SCR_EDataStats.AI_KILLS] + stats[
SCR_EDataStats.KILLS])));
733class SCR_DebriefingScreenStatisticDeaths : SCR_DebriefingScreenStatisticBaseClass
737 override void InitStatistic(notnull array<float> stats)
739 m_sStatisticResult =
string.Format(WidgetManager.Translate(
"<b>#AR-DebriefingScreen_Statistics_Deaths</b>", Math.Floor(stats[
SCR_EDataStats.DEATHS])));
745class SCR_DebriefingScreenStatisticDistanceWalked : SCR_DebriefingScreenStatisticBaseClass
748 override void InitStatistic(notnull array<float> stats)
750 m_sStatisticResult =
string.Format(WidgetManager.Translate(
"<b>#AR-DebriefingScreen_Statistics_DistanceWalked</b>", Math.Floor(stats[
SCR_EDataStats.DISTANCE_WALKED]/1000)));
756class SCR_DebriefingScreenStatisticDistanceDriven : SCR_DebriefingScreenStatisticBaseClass
759 override void InitStatistic(notnull array<float> stats)
761 m_sStatisticResult =
string.Format(WidgetManager.Translate(
"<b>#AR-DebriefingScreen_Statistics_DistanceDriven</b>", Math.Floor(stats[
SCR_EDataStats.DISTANCE_DRIVEN]/1000)));
class RestAPIHelper< JsonApiStruct T > content
ArmaReforgerScripted GetGame()
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
string m_sDescriptionText
SCR_BaseGameMode GetGameMode()
void SCR_CharacterRankComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
SCR_DebriefingScreenComponentClass SCR_DeployMenuBaseScreenComponentClass BaseContainerProps()
Debriefing screen component intended to be added to the GameMode.
Get all prefabs that have the spawner the given labels and are valid in the editor mode param catalogType Type to catalog to get prefabs from param editorMode Editor mode to get valid entries from param faction Faction(Optional)
void SCR_FactionManager(IEntitySource src, IEntity parent)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
void SCR_Task(IEntitySource src, IEntity parent)
void SCR_TaskFinishHistoryManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
const string WELCOME_CONTENT
override void InitContent(SCR_WelcomeScreenMenu menu)
SCR_WelcomeScreenComponentClass SCR_DeployMenuBaseScreenComponent
Welcome screen component intended to be added to the GameMode.
enum EVehicleType IEntity
proto external Managed FindComponent(typename typeName)
SCR_GameModeEndData GetEndGameData()
string GetSubtitle(Faction factionPlayer, array< Faction > factionsOther)
string GetDebriefing(Faction factionPlayer, array< Faction > factionsOther)
bool GetGameOverScreenInfo(EGameOverTypes infoId, out SCR_BaseGameOverScreenInfo gameOverScreenInfo)
sealed array< float > CalculateStatsDifference()
void SetCurrentItem(int index, bool animate=true)
void SetItemCount(int count, bool animate=true)
override bool SetNameTo(TextWidget textWidget)
SCR_DeployMenuBaseScreenComponentClass SCR_BaseGameModeComponentClass Attribute()] protected string m_sHeaderTitle
Base class for Deploy menu components.
proto external PlayerController GetPlayerController()
proto external int GetPlayerId()