Arma Reforger Explorer
1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Toggle main menu visibility
Loading...
Searching...
No Matches
SCR_MapJournalUI.c
Go to the documentation of this file.
1
// todo@lk: figure out what to call this, journal is probably not the best choice, idiot
2
class
SCR_MapJournalUI
:
SCR_MapUIBaseComponent
3
{
4
[
Attribute
(
"JournalFrame"
,
desc
:
"Root frame widget name"
)]
5
protected
string
m_sRootWidgetName
;
6
7
[
Attribute
(
"faction"
,
desc
:
"Map task list imageset quad name"
)]
8
protected
string
m_sTaskListToolMenuIconName
;
9
10
[
Attribute
(
"exclamationCircle"
,
desc
:
"Toolmenu imageset quad name"
)]
11
protected
string
m_sToolMenuIconName
;
12
13
[
Attribute
(
"8"
,
desc
:
"Offset substracted from total widget size."
)]
14
protected
int
m_iOffset
;
15
16
protected
SCR_MapToolMenuUI
m_ToolMenu
;
17
protected
SCR_MapToolEntry
m_ToolMenuEntry
;
18
protected
SCR_MapTaskListUI
m_MapTaskList
;
19
protected
SCR_JournalSetupConfig
m_JournalConfig
;
20
protected
SCR_PlayerFactionAffiliationComponent
m_PlyFactionAffilComp
;
21
protected
SCR_MapJournalUIButton
m_LastInteractedEntry
;
22
23
protected
ref array<SCR_MapJournalUIButton>
m_aEntries
= {};
24
protected
int
m_iCurrentEntryId
= -1;
25
26
protected
Widget
m_wJournalFrame
;
27
28
//We'll store the bool in order to know if is it the first opening or not
29
protected
bool
m_bFirstOpening
=
true
;
30
31
protected
ref
SCR_JournalWidgets
m_Widgets
=
new
SCR_JournalWidgets
();
32
33
//------------------------------------------------------------------------------------------------
34
override
void
Init
()
35
{
36
SCR_RespawnBriefingComponent briefingComp = SCR_RespawnBriefingComponent.GetInstance();
37
if
(!briefingComp)
38
return
;
39
40
if
(!briefingComp.LoadJournalConfig())
41
return
;
42
43
m_JournalConfig
= briefingComp.GetJournalSetup();
44
if
(!
m_JournalConfig
)
45
return
;
46
47
m_ToolMenu
=
SCR_MapToolMenuUI
.Cast(
m_MapEntity
.GetMapUIComponent(
SCR_MapToolMenuUI
));
48
if
(
m_ToolMenu
)
49
{
50
m_ToolMenuEntry
=
m_ToolMenu
.RegisterToolMenuEntry(
SCR_MapToolMenuUI
.s_sToolMenuIcons,
m_sToolMenuIconName
, 1,
m_bIsExclusive
);
51
m_ToolMenuEntry
.m_OnClick.Insert(
ToggleVisible
);
52
m_ToolMenuEntry
.GetOnDisableMapUIInvoker().Insert(
DisableMapUIComponent
);
53
m_ToolMenuEntry
.SetEnabled(
true
);
54
}
55
56
m_MapTaskList
=
SCR_MapTaskListUI
.Cast(
m_MapEntity
.GetMapUIComponent(
SCR_MapTaskListUI
));
57
}
58
59
//------------------------------------------------------------------------------------------------
60
override
void
OnMapOpen
(
MapConfiguration
config)
61
{
62
super.OnMapOpen(config);
63
64
if
(!
m_JournalConfig
)
65
return
;
66
67
m_wJournalFrame
=
m_RootWidget
.FindAnyWidget(
m_sRootWidgetName
);
68
if
(!
m_wJournalFrame
)
69
return
;
70
71
if
(!
m_wJournalFrame
.GetChildren())
72
{
73
Widget
journal =
GetGame
().GetWorkspace().CreateWidgets(
m_Widgets
.GetLayout(),
m_wJournalFrame
);
74
if
(!journal)
75
return
;
76
77
m_Widgets
.Init(journal);
78
}
79
80
if
(
m_Widgets
.m_wFocusButton)
81
m_Widgets
.m_FocusButtonComponent.GetOnFocus().Insert(
FocusOnFirstEntry
);
82
83
PlayerController pc =
GetGame
().GetPlayerController();
84
if
(!pc)
85
return
;
86
87
m_PlyFactionAffilComp
=
SCR_PlayerFactionAffiliationComponent
.Cast(pc.FindComponent(
SCR_PlayerFactionAffiliationComponent
));
88
if
(!
m_PlyFactionAffilComp
)
89
return
;
90
91
m_PlyFactionAffilComp
.GetOnPlayerFactionResponseInvoker_O().Insert(
OnPlayerFactionResponse
);
92
93
GetJournalForPlayer
();
94
95
SCR_RespawnBriefingComponent briefingComp = SCR_RespawnBriefingComponent.GetInstance();
96
97
if
(!
m_bFirstOpening
|| !briefingComp || (briefingComp && !briefingComp.ShowJournalOnStart()))
98
ToggleVisible
();
99
100
if
(
m_bFirstOpening
)
101
{
102
//if opened for the first time, use the value from config
103
ShowEntryByID
(
m_JournalConfig
.GetJournalEntryToBeShown());
104
m_bFirstOpening
=
false
;
105
}
106
else
107
{
108
//if opened the second and other times, use the last opened one
109
ShowEntryByID
(
m_iCurrentEntryId
);
110
}
111
112
//## Need to be called in order to wait for widget initialization.
113
GetGame
().GetCallqueue().Call(
UpdateJournalPosition
);
114
}
115
116
//------------------------------------------------------------------------------------------------
118
protected
void
UpdateJournalPosition
()
119
{
120
Widget
toolMenuBackground =
m_ToolMenu
.GetBackgroundWidget();
121
toolMenuBackground.Update();
122
123
float
sizeW, sizeY;
124
toolMenuBackground.GetScreenSize(sizeW, sizeY);
125
126
sizeY =
GetGame
().GetWorkspace().DPIUnscale(sizeY) -
m_iOffset
;
127
128
m_Widgets
.m_wSizeLayout.SetHeightOverride(sizeY);
129
}
130
131
//------------------------------------------------------------------------------------------------
132
protected
void
OnPlayerFactionResponse
(
SCR_PlayerFactionAffiliationComponent
component,
int
factionIndex,
bool
response)
133
{
134
if
(!
m_wJournalFrame
|| !
m_ToolMenu
)
135
return
;
136
137
if
(response)
138
{
139
m_Widgets
.m_wEntryLayout.SetVisible(
false
);
140
GetJournalForPlayer
();
141
}
142
}
143
144
//------------------------------------------------------------------------------------------------
146
protected
void
ToggleVisible
()
147
{
148
if
(!
m_wJournalFrame
|| !
m_ToolMenu
)
149
return
;
150
151
bool
visible =
m_wJournalFrame
.IsVisible();
152
m_wJournalFrame
.SetVisible(!visible);
153
if
(
m_ToolMenuEntry
)
154
m_ToolMenuEntry
.SetActive(!visible);
155
156
if
(!visible)
157
FocusOnFirstEntry
();
158
}
159
160
//------------------------------------------------------------------------------------------------
162
void
SetJournalVisibility
(
bool
visibility)
163
{
164
m_ToolMenuEntry
.SetActive(visibility);
165
m_wJournalFrame
.SetVisible(visibility);
166
167
if
(
m_ToolMenuEntry
)
168
m_ToolMenuEntry
.SetActive(visibility);
169
170
if
(visibility)
171
FocusOnFirstEntry
();
172
}
173
174
//------------------------------------------------------------------------------------------------
175
protected
void
GetJournalForPlayer
()
176
{
177
m_aEntries
.Clear();
178
179
m_iCurrentEntryId
= -1;
180
181
FactionKey
factionKey =
FactionKey
.Empty;
182
if
(
m_PlyFactionAffilComp
)
183
{
184
Faction
plyFaction =
m_PlyFactionAffilComp
.GetAffiliatedFaction();
185
if
(plyFaction)
186
factionKey = plyFaction.GetFactionKey();
187
}
188
189
SCR_JournalConfig
factionJournal =
m_JournalConfig
.GetJournalConfig(factionKey);
190
if
(!factionJournal)
191
return
;
192
193
array<ref SCR_JournalEntry> journalEntries = factionJournal.
GetEntries
();
194
if
(!journalEntries)
195
return
;
196
197
Widget
widget;
198
SCR_MapJournalUIButton
component;
199
WorkspaceWidget
workspace =
GetGame
().GetWorkspace();
200
foreach
(
int
entryId,
SCR_JournalEntry
entry : journalEntries)
201
{
202
entry = journalEntries[entryId];
203
204
widget = workspace.CreateWidgets(entry.GetEntryButtonLayout(),
m_Widgets
.m_wEntriesWrapper);
205
component =
SCR_MapJournalUIButton
.Cast(widget.FindHandler(
SCR_MapJournalUIButton
));
206
if
(!component)
207
continue
;
208
209
component.
SetContent
(entry.GetEntryName());
210
component.
SetEntry
(entry, entryId);
211
212
component.
GetOnToggled
().Insert(
ShowEntry
);
213
m_aEntries
.Insert(component);
214
}
215
}
216
217
//------------------------------------------------------------------------------------------------
220
protected
void
ShowEntryByID
(
int
id
)
221
{
222
if
(
id
< 0)
223
return
;
224
225
SCR_MapJournalUIButton
entryBtn;
226
227
Widget
child =
m_Widgets
.m_wEntriesWrapper.GetChildren();
228
while
(child)
229
{
230
entryBtn =
SCR_MapJournalUIButton
.Cast(child.FindHandler(
SCR_MapJournalUIButton
));
231
if
(!entryBtn)
232
continue
;
233
234
if
(entryBtn.
GetId
() ==
id
)
235
{
236
ShowEntry
(entryBtn);
237
break
;
238
}
239
240
child = child.GetSibling();
241
}
242
}
243
244
//------------------------------------------------------------------------------------------------
247
protected
void
ShowEntry
(
SCR_MapJournalUIButton
journalBtn)
248
{
249
if
(journalBtn.
GetId
() ==
m_iCurrentEntryId
)
250
{
251
journalBtn.
SetToggled
(
false
);
252
m_Widgets
.m_wEntryLayout.SetVisible(!
m_Widgets
.m_wEntryLayout.IsVisible());
253
m_iCurrentEntryId
= -1;
254
}
255
else
256
{
257
Widget
child =
m_Widgets
.m_wEntryLayout.GetChildren();
258
if
(child)
259
delete
child;
260
261
// Toggle off last interacted button
262
if
(
m_LastInteractedEntry
)
263
m_LastInteractedEntry
.SetToggled(
false
);
264
265
m_iCurrentEntryId
= journalBtn.
GetId
();
266
267
journalBtn.
SetToggled
(
true
);
268
journalBtn.
ShowEntry
(
m_Widgets
.m_wEntryLayout);
269
m_Widgets
.m_wEntryLayout.SetVisible(
true
);
270
}
271
272
m_LastInteractedEntry
= journalBtn;
273
}
274
275
//------------------------------------------------------------------------------------------------
276
protected
void
FocusOnFirstEntry
()
277
{
278
if
(!
m_aEntries
.IsEmpty() &&
m_aEntries
[0])
279
GetGame
().GetWorkspace().SetFocusedWidget(
m_aEntries
[0].
GetRootWidget
());
280
}
281
282
//------------------------------------------------------------------------------------------------
283
bool
IsVisible
()
284
{
285
return
m_wJournalFrame
&&
m_wJournalFrame
.IsVisible();
286
}
287
288
//------------------------------------------------------------------------------------------------
289
void
DisableMapUIComponent
()
290
{
291
SetJournalVisibility
(
false
);
292
}
293
294
//------------------------------------------------------------------------------------------------
295
override
void
HandlerDeattached
(
Widget
w)
296
{
297
if
(
m_ToolMenuEntry
)
298
m_ToolMenuEntry
.GetOnDisableMapUIInvoker().Remove(
DisableMapUIComponent
);
299
}
300
}
GetGame
ArmaReforgerScripted GetGame()
Definition
game.c:1398
SCR_MapToolMenuUI
void SCR_MapToolMenuUI()
Definition
SCR_MapToolMenuUI.c:484
GetRootWidget
Widget GetRootWidget()
Definition
SCR_ModularButtonComponent.c:189
desc
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
Definition
SCR_RespawnBriefingComponent.c:17
Faction
Definition
Faction.c:13
FactionKey
Definition
FactionKey.c:3
MapConfiguration
Definition
MapConfiguration.c:3
SCR_JournalConfig
Definition
SCR_JournalConfig.c:46
SCR_JournalConfig::GetEntries
array< ref SCR_JournalEntry > GetEntries()
Definition
SCR_JournalConfig.c:53
SCR_JournalEntry
Definition
SCR_JournalConfig.c:66
SCR_JournalSetupConfig
Definition
SCR_JournalConfig.c:13
SCR_JournalWidgets
Definition
SCR_JournalWidgets.c:4
SCR_MapJournalUIButton
Definition
SCR_MapJournalUIButton.c:2
SCR_MapJournalUIButton::SetToggled
void SetToggled(bool newToggled)
Definition
SCR_MapJournalUIButton.c:70
SCR_MapJournalUIButton::GetId
int GetId()
Definition
SCR_MapJournalUIButton.c:39
SCR_MapJournalUIButton::SetEntry
void SetEntry(SCR_JournalEntry entry, int id)
Definition
SCR_MapJournalUIButton.c:23
SCR_MapJournalUIButton::SetContent
void SetContent(string text)
Definition
SCR_MapJournalUIButton.c:52
SCR_MapJournalUIButton::ShowEntry
void ShowEntry(Widget target)
Definition
SCR_MapJournalUIButton.c:32
SCR_MapJournalUIButton::GetOnToggled
ScriptInvoker GetOnToggled()
Definition
SCR_MapJournalUIButton.c:76
SCR_MapJournalUI
Definition
SCR_MapJournalUI.c:3
SCR_MapJournalUI::ShowEntryByID
void ShowEntryByID(int id)
Definition
SCR_MapJournalUI.c:220
SCR_MapJournalUI::m_bFirstOpening
bool m_bFirstOpening
Definition
SCR_MapJournalUI.c:29
SCR_MapJournalUI::m_PlyFactionAffilComp
SCR_PlayerFactionAffiliationComponent m_PlyFactionAffilComp
Definition
SCR_MapJournalUI.c:20
SCR_MapJournalUI::SetJournalVisibility
void SetJournalVisibility(bool visibility)
Definition
SCR_MapJournalUI.c:162
SCR_MapJournalUI::ShowEntry
void ShowEntry(SCR_MapJournalUIButton journalBtn)
Definition
SCR_MapJournalUI.c:247
SCR_MapJournalUI::IsVisible
bool IsVisible()
Definition
SCR_MapJournalUI.c:283
SCR_MapJournalUI::m_ToolMenuEntry
SCR_MapToolEntry m_ToolMenuEntry
Definition
SCR_MapJournalUI.c:17
SCR_MapJournalUI::FocusOnFirstEntry
void FocusOnFirstEntry()
Definition
SCR_MapJournalUI.c:276
SCR_MapJournalUI::m_iCurrentEntryId
int m_iCurrentEntryId
Definition
SCR_MapJournalUI.c:24
SCR_MapJournalUI::OnPlayerFactionResponse
void OnPlayerFactionResponse(SCR_PlayerFactionAffiliationComponent component, int factionIndex, bool response)
Definition
SCR_MapJournalUI.c:132
SCR_MapJournalUI::m_wJournalFrame
Widget m_wJournalFrame
Definition
SCR_MapJournalUI.c:26
SCR_MapJournalUI::m_sToolMenuIconName
string m_sToolMenuIconName
Definition
SCR_MapJournalUI.c:11
SCR_MapJournalUI::m_sRootWidgetName
string m_sRootWidgetName
Definition
SCR_MapJournalUI.c:5
SCR_MapJournalUI::m_JournalConfig
SCR_JournalSetupConfig m_JournalConfig
Definition
SCR_MapJournalUI.c:19
SCR_MapJournalUI::UpdateJournalPosition
void UpdateJournalPosition()
Adjuts size of journal to match height of tool bar.
Definition
SCR_MapJournalUI.c:118
SCR_MapJournalUI::DisableMapUIComponent
void DisableMapUIComponent()
Definition
SCR_MapJournalUI.c:289
SCR_MapJournalUI::m_Widgets
ref SCR_JournalWidgets m_Widgets
Definition
SCR_MapJournalUI.c:31
SCR_MapJournalUI::HandlerDeattached
override void HandlerDeattached(Widget w)
Definition
SCR_MapJournalUI.c:295
SCR_MapJournalUI::m_iOffset
int m_iOffset
Definition
SCR_MapJournalUI.c:14
SCR_MapJournalUI::Init
override void Init()
Definition
SCR_MapJournalUI.c:34
SCR_MapJournalUI::m_aEntries
ref array< SCR_MapJournalUIButton > m_aEntries
Definition
SCR_MapJournalUI.c:23
SCR_MapJournalUI::GetJournalForPlayer
void GetJournalForPlayer()
Definition
SCR_MapJournalUI.c:175
SCR_MapJournalUI::OnMapOpen
override void OnMapOpen(MapConfiguration config)
Definition
SCR_MapJournalUI.c:60
SCR_MapJournalUI::m_LastInteractedEntry
SCR_MapJournalUIButton m_LastInteractedEntry
Definition
SCR_MapJournalUI.c:21
SCR_MapJournalUI::m_MapTaskList
SCR_MapTaskListUI m_MapTaskList
Definition
SCR_MapJournalUI.c:18
SCR_MapJournalUI::ToggleVisible
void ToggleVisible()
Toggle visibility for the journal.
Definition
SCR_MapJournalUI.c:146
SCR_MapJournalUI::m_sTaskListToolMenuIconName
string m_sTaskListToolMenuIconName
Definition
SCR_MapJournalUI.c:8
SCR_MapJournalUI::m_ToolMenu
SCR_MapToolMenuUI m_ToolMenu
Definition
SCR_MapJournalUI.c:16
SCR_MapTaskListUI
Definition
SCR_MapTaskListUI.c:2
SCR_MapToolEntry
Map tool menu entry data class.
Definition
SCR_MapToolMenuUI.c:3
SCR_MapUIBaseComponent::m_bIsExclusive
bool m_bIsExclusive
Definition
SCR_MapUIBaseComponent.c:9
SCR_MapUIBaseComponent::SCR_MapUIBaseComponent
void SCR_MapUIBaseComponent()
Definition
SCR_MapUIBaseComponent.c:94
SCR_MapUIBaseComponent::m_MapEntity
SCR_MapEntity m_MapEntity
Definition
SCR_MapUIBaseComponent.c:13
SCR_MapUIBaseComponent::m_RootWidget
Widget m_RootWidget
Definition
SCR_MapUIBaseComponent.c:12
SCR_PlayerFactionAffiliationComponent
Definition
SCR_PlayerFactionAffiliationComponent.c:21
Widget
Definition
Widget.c:13
WorkspaceWidget
Definition
WorkspaceWidget.c:16
Attribute
SCR_FieldOfViewSettings Attribute
Definition
SendGoalMessage.c:170
scripts
Game
Map
ComponentsUI
SCR_MapJournalUI.c
Generated by
1.17.0