Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_RoomModsManager.c
Go to the documentation of this file.
1// Mods callback
2//------------------------------------------------------------------------------------------------
4{
5 protected Room m_Room;
6
7 //-----------------------------------------------------------------------------------------------
9 {
10 return m_Room;
11 }
12
13 //-----------------------------------------------------------------------------------------------
15 {
16 m_Room = room;
17 }
18};
19
20//-----------------------------------------------------------------------------------------------
21void ScriptInvoker_RoomModsDependencies(array<ref SCR_WorkshopItem> dependencies);
23
24//------------------------------------------------------------------------------------------------
28{
29 protected Room m_Room;
31
33
34 protected bool m_bModsMatching = false;
35 protected bool m_bBlockedMods;
36 protected ref array<ref SCR_WorkshopItem> m_aCollidingDependencies = {};
37
38 // Arrays
39 protected ref array<ref SCR_WorkshopItem> m_aRoomItemsScripted = {};
40
41 protected ref array<ref SCR_WorkshopItem> m_aItemsUpdated = {};
42 protected ref array<ref SCR_WorkshopItem> m_aItemsToUpdate = {};
43
44 // Callbacks
46
47
48 //------------------------------------------------------------------------------------------------
49 // Invokers
50 //------------------------------------------------------------------------------------------------
51
53
55
57 protected ref ScriptInvokerBase<ScriptInvoker_RoomModsDependencies> m_OnDependenciesLoadingPrevented;
58
59 //------------------------------------------------------------------------------------------------
64
65 //------------------------------------------------------------------------------------------------
70
71 //------------------------------------------------------------------------------------------------
79
80 //------------------------------------------------------------------------------------------------
81 ScriptInvokerBase<ScriptInvoker_RoomModsDependencies> GetOnDependenciesLoadingPrevented()
82 {
84 m_OnDependenciesLoadingPrevented = new ScriptInvokerBase<ScriptInvoker_RoomModsDependencies>();
85
87 }
88
89 //------------------------------------------------------------------------------------------------
90 // Public
91 //------------------------------------------------------------------------------------------------
92
93 //------------------------------------------------------------------------------------------------
94 void Clear()
95 {
96 // Default for loading mods
97
98 m_bModsMatching = false;
99 m_bBlockedMods = false;
101 m_aRoomItemsScripted.Clear();
102 m_aItemsUpdated.Clear();
103 m_aItemsToUpdate.Clear();
104 m_ModsCallback = null;
105 m_DownloadSequence = null;
107 m_Room = null;
108 }
109
110 //------------------------------------------------------------------------------------------------
113 void ReceiveRoomMods(notnull Room room)
114 {
115 if (room != m_Room)
116 m_Room = room;
117
118 array<Dependency> deps = {};
119 m_Room.GetItems(deps);
120
121 m_bBlockedMods = false;
123
124 // Load full list
128 m_Room.LoadDownloadList(m_ModsCallback);
129 }
130
131 //------------------------------------------------------------------------------------------------
132 // Try to receive scenario data without looking for mods
133 void ReceiveRoomScenario(notnull Room room)
134 {
135 if (room != m_Room)
136 {
137 Debug.Error("Received data for non active room");
138 return;
139 }
141 }
142
143
144 //------------------------------------------------------------------------------------------------
146 protected void OnLoadingModsFail(Room room)
147 {
148 // Don't notify fail if failed is not for current
149 if (room != m_Room)
150 return;
151
152 if (m_OnModsFail)
153 m_OnModsFail.Invoke();
154 }
155
156 //------------------------------------------------------------------------------------------------
157 // Protected
158 //------------------------------------------------------------------------------------------------
159
160 //------------------------------------------------------------------------------------------------
164 protected void UpdatedDependencies(notnull array<ref SCR_WorkshopItem> items)
165 {
166 m_aItemsUpdated.Clear();
167 m_aItemsToUpdate.Clear();
168
169 m_aItemsUpdated = SCR_AddonManager.SelectItemsBasic(items, EWorkshopItemQuery.LOCAL_VERSION_MATCH_DEPENDENCY);
170 m_aItemsToUpdate = SCR_AddonManager.SelectItemsBasic(items, EWorkshopItemQuery.NOT_LOCAL_VERSION_MATCH_DEPENDENCY);
171 }
172
173 //------------------------------------------------------------------------------------------------
174 protected void AllItemsLoaded()
175 {
176 if (!m_Room)
177 return;
178
180
181 // Pass list of updated & outdated mods
183 {
185
186 m_bModsMatching = (m_aItemsToUpdate.IsEmpty());
187 }
188
190 }
191
192 //------------------------------------------------------------------------------------------------
194 protected void LoadScenario()
195 {
196 if (!m_Room)
197 return;
198
199 m_ScenarioDependency = m_Room.HostScenarioMod();
201 }
202
203 //------------------------------------------------------------------------------------------------
206 {
207 /*
208 if (m_DownloadSequence && m_DownloadSequence.GetRestrictedAddons())
209 return m_DownloadSequence.ShowRestrictedDependenciesDialog();
210 */
211
212 array<ref SCR_WorkshopItem> restrictedDependencies = SCR_AddonManager.SelectItemsBasic(m_aRoomItemsScripted, EWorkshopItemQuery.RESTRICTED);
213 SCR_AddonListDialog addonsDialog = SCR_AddonListDialog.CreateRestrictedAddonsJoinServer(restrictedDependencies);
214
215 // Handle cancel reports done
216 SCR_ReportedAddonsDialog reportedDialog = SCR_ReportedAddonsDialog.Cast(addonsDialog);
217 if (reportedDialog)
218 reportedDialog.GetOnAllReportsCanceled().Insert(OnAllReportsCanceled);
219
220 return reportedDialog;
221
222 // All can be downloaded
223 return null;
224 }
225
226 //------------------------------------------------------------------------------------------------
229 {
231
232 m_DownloadSequence.OnAllReportsCanceled(dialog);
233 }
234
235 //------------------------------------------------------------------------------------------------
236 // Callbacks
237 //------------------------------------------------------------------------------------------------
238
239 //------------------------------------------------------------------------------------------------
241 protected void OnScenarioModLoaded()
242 {
243 // Remove callback action
244 LoadScenario();
245 }
246
247 //------------------------------------------------------------------------------------------------
249 protected void OnScenarioDetails()
250 {
251 m_OnGetScenario.Invoke(m_Room);
252 }
253
254 //------------------------------------------------------------------------------------------------
256 {
257 // Load list success
259 }
260
261 //------------------------------------------------------------------------------------------------
263 {
264 // Fail/timeout
265 OnLoadingModsFail(callback.GetRoom());
266 }
267
268 //------------------------------------------------------------------------------------------------
270 protected void OnRoomFullList()
271 {
272 if (!m_Room)
273 {
274 OnLoadingModsFail(null);
275 return;
276 }
277
278 if (!m_Room.IsAuthorized())
279 {
281 return;
282 }
283
284 array<Dependency> deps = new array<Dependency>;
285 m_Room.GetItems(deps);
286
287 array<Dependency> depsItems = new array<Dependency>;
288
289 // Clearup
290 m_aRoomItemsScripted.Clear();
291
292 // Skip loadig of content if none
293 if (deps.IsEmpty())
294 {
296 return;
297 }
298
300
301 // Loaded dependencies as items
302 foreach (Dependency dep : deps)
303 {
304 //ref SCR_WorkshopItem item = SCR_WorkshopItem.Internal_CreateFromDependency(dep);
305 SCR_WorkshopItem item = mngr.Register(dep);
306 item.SetItemTargetRevision(dep.GetRevision());
307 m_aRoomItemsScripted.Insert(item);
308 }
309
310 // Clear previous download sequence reactions
312 {
313 m_DownloadSequence.GetOnReady().Remove(OnDownloadSequenceReady);
314 m_DownloadSequence.GetOnError().Remove(OnDownloadSequenceError);
315 }
316
317 // Setup new download sequence
319 }
320
321 //------------------------------------------------------------------------------------------------
322 protected void InitDownloadSequence()
323 {
325 m_DownloadSequence.GetOnReady().Insert(OnDownloadSequenceReady);
326 m_DownloadSequence.GetOnDependenciesLoadingPrevented().Insert(OnDependenciesLoadingPrevented);
327 m_DownloadSequence.GetOnError().Insert(OnDownloadSequenceError);
328 m_DownloadSequence.GetOnRestrictedDependency().Insert(OnDownloadSequenceRestrictedAddons);
329
330 m_DownloadSequence.Init();
331 }
332
333 //------------------------------------------------------------------------------------------------
335 {
337
338 // Cleanup
339 sequence.GetOnReady().Remove(OnDownloadSequenceReady);
341 sequence.GetOnError().Remove(OnDownloadSequenceError);
343 }
344
345 //------------------------------------------------------------------------------------------------
348 protected void OnDependenciesLoadingPrevented(SCR_DownloadSequence sequence, array<ref SCR_WorkshopItem> dependencies)
349 {
350 m_aCollidingDependencies = dependencies;
351
353 m_OnDependenciesLoadingPrevented.Invoke(dependencies);
354
355 // Cleanup
357 }
358
359 //------------------------------------------------------------------------------------------------
360 array<ref SCR_WorkshopItem> GetCollidingDependencies()
361 {
362 array<ref SCR_WorkshopItem> dependencies = {};
363
365 {
366 dependencies.Insert(item);
367 }
368
369 return dependencies;
370 }
371
372 //------------------------------------------------------------------------------------------------
377
378 //------------------------------------------------------------------------------------------------
386
387 //------------------------------------------------------------------------------------------------
389 {
390 // Cleanup
391 sequence.GetOnReady().Remove(OnDownloadSequenceReady);
393 sequence.GetOnError().Remove(OnDownloadSequenceError);
395 if (m_OnModsFail)
396 m_OnModsFail.Invoke();
397 }
398
399 //------------------------------------------------------------------------------------------------
400 protected void OnDownloadSequenceRestrictedAddons(SCR_DownloadSequence sequence, array<ref SCR_WorkshopItem> items)
401 {
402 m_bBlockedMods = m_DownloadSequence.GetBlockedAddons();
403 }
404
405 //------------------------------------------------------------------------------------------------
406 // Get set
407 //------------------------------------------------------------------------------------------------
408 //------------------------------------------------------------------------------------------------
409 string GetModListSizeString(array<ref SCR_WorkshopItem> items)
410 {
411 float size = GetModsSize(items);
412
413 if (size <= 0)
414 return string.Empty;
415
416 // Size string
417 string str = SCR_ByteFormat.GetReadableSize(size);
418
419 return str;
420 }
421
422 //------------------------------------------------------------------------------------------------
423 float GetModsSize(array<ref SCR_WorkshopItem> items)
424 {
425 return SCR_ModHandlerLib.GetModListSize(items);
426 }
427
428 //------------------------------------------------------------------------------------------------
430 string GetModListPatchSizeString(array<ref SCR_WorkshopItem> items)
431 {
432 float size = GetModListPatchSize(items);
433
434 if (size <= 0)
435 return string.Empty;
436
437 // Size string
438 return SCR_ByteFormat.GetReadableSize(size);
439 }
440
441 //------------------------------------------------------------------------------------------------
442 float GetModListPatchSize(array<ref SCR_WorkshopItem> items)
443 {
444 float size;
445 for (int i = 0, count = items.Count(); i < count; i++)
446 {
447 size += items[i].GetTargetRevisionPatchSize();
448 }
449
450 return size;
451 }
452
453 //------------------------------------------------------------------------------------------------
455 {
456 return m_bBlockedMods;
457 }
458
459 //------------------------------------------------------------------------------------------------
460 array<ref SCR_WorkshopItem> GetRoomItemsScripted()
461 {
462 return m_aRoomItemsScripted;
463 }
464
465 //------------------------------------------------------------------------------------------------
466 array<ref SCR_WorkshopItem> GetRoomItemsUpdated()
467 {
468 return m_aItemsUpdated;
469 }
470
471 //------------------------------------------------------------------------------------------------
472 array<ref SCR_WorkshopItem> GetRoomItemsToUpdate()
473 {
474 array<ref SCR_WorkshopItem> items = {};
475
476 foreach (SCR_WorkshopItem item : m_aItemsToUpdate)
477 {
478 items.Insert(item);
479 }
480
481 return items;
482 }
483
484 //------------------------------------------------------------------------------------------------
486 {
487 return m_bModsMatching;
488 }
489};
int size
EWorkshopItemQuery
func ScriptInvoker_RoomModsDependencies
ScriptInvokerBase< ScriptInvokerVoidMethod > ScriptInvokerVoid
ScriptInvokerBase< ScriptInvokerRoomMethod > ScriptInvokerRoom
Definition Debug.c:13
Definition Room.c:13
Shows a list of addons and some text.
static SCR_AddonListDialog CreateRestrictedAddonsJoinServer(array< ref SCR_WorkshopItem > items)
Dialog when trying to connect to a server with restricted addons.
SCR_WorkshopItem Register(WorkshopItem item)
Returns a SCR_WorkshopItem. If it's not registered, creates a new one and registers it.
static array< ref SCR_WorkshopItem > SelectItemsBasic(array< ref SCR_WorkshopItem > items, EWorkshopItemQuery query)
static SCR_AddonManager GetInstance()
void SCR_BackendCallbackRoomMods(Room room)
static SCR_DownloadManager GetInstance()
ScriptInvokerBase< ScriptInvoker_DownloadSequence > GetOnReady()
ScriptInvokerBase< ScriptInvoker_DownloadSequenceDependencies > GetOnDependenciesLoadingPrevented()
ScriptInvokerBase< ScriptInvoker_DownloadSequenceDependencies > GetOnRestrictedDependency()
static SCR_DownloadSequence Create(array< ref SCR_WorkshopItem > dependencies, SCR_DownloadSequence previous, bool skipDetails=false)
ScriptInvokerBase< ScriptInvoker_DownloadSequence > GetOnError()
Show list of reported mods and provide option to cancel reports.
void ReceiveRoomMods(notnull Room room)
void OnDependenciesLoadingPrevented(SCR_DownloadSequence sequence, array< ref SCR_WorkshopItem > dependencies)
void OnRoomCallbackResponse(SCR_BackendCallbackRoomMods callback)
void OnRoomCallbackError(SCR_BackendCallbackRoomMods callback)
void OnDownloadSequenceRestrictedAddons(SCR_DownloadSequence sequence, array< ref SCR_WorkshopItem > items)
void OnCancelDownloadDialogClose(SCR_ConfigurableDialogUi dialog)
void OnCancelDownloadConfirm(SCR_ConfigurableDialogUi dialog)
string GetModListSizeString(array< ref SCR_WorkshopItem > items)
ref ScriptInvokerRoom m_OnGetAllDependencies
void OnAllReportsCanceled(SCR_ReportedAddonsDialog dialog)
Call when all reports from dialog are cancled to clear invoker actions and display download dialog.
ScriptInvokerVoid GetOnModsFail()
ref array< ref SCR_WorkshopItem > m_aItemsToUpdate
ScriptInvokerBase< ScriptInvoker_RoomModsDependencies > GetOnDependenciesLoadingPrevented()
void OnScenarioModLoaded()
Call this when mod containing scenario is loaded.
ScriptInvokerRoom GetOnGetAllDependencies()
ref array< ref SCR_WorkshopItem > m_aItemsUpdated
ref array< ref SCR_WorkshopItem > m_aRoomItemsScripted
array< ref SCR_WorkshopItem > GetCollidingDependencies()
ref ScriptInvokerRoom m_OnGetScenario
ref array< ref SCR_WorkshopItem > m_aCollidingDependencies
float GetModsSize(array< ref SCR_WorkshopItem > items)
ref SCR_DownloadSequence m_DownloadSequence
float GetModListPatchSize(array< ref SCR_WorkshopItem > items)
void OnRoomFullList()
Call this when room receive list of all mod dependencies.
void ReceiveRoomScenario(notnull Room room)
void OnScenarioDetails()
Call this when scenario has got complete info.
void OnDownloadSequenceError(SCR_DownloadSequence sequence)
void OnDownloadSequenceReady(SCR_DownloadSequence sequence)
ref ScriptInvokerBase< ScriptInvoker_RoomModsDependencies > m_OnDependenciesLoadingPrevented
ScriptInvokerRoom GetOnGetScenario()
void OnLoadingModsFail(Room room)
Invoke mods loading error.
array< ref SCR_WorkshopItem > GetRoomItemsToUpdate()
SCR_ReportedAddonsDialog DisplayRestrictedAddonsList()
Show restricted addons and return true if there are restricted addons in room content.
array< ref SCR_WorkshopItem > GetRoomItemsUpdated()
string GetModListPatchSizeString(array< ref SCR_WorkshopItem > items)
Get size with unit based on pach sizes from addons list.
array< ref SCR_WorkshopItem > GetRoomItemsScripted()
void UpdatedDependencies(notnull array< ref SCR_WorkshopItem > items)
ref SCR_BackendCallbackRoomMods m_ModsCallback
void LoadScenario()
Call this when sceario is loaded.
ref ScriptInvokerVoid m_OnModsFail
void SetItemTargetRevision(Revision revision)