MCPcopy Create free account
hub / github.com/BohemiaInteractive/CWR / ParseAllAddonConfigs

Method ParseAllAddonConfigs

engine/Poseidon/Asset/Addon/AddonSystem.cpp:304–379  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

302}
303
304void AddonSystem::ParseAllAddonConfigs()
305{
306 AutoArray<AddonDependency> dependencies;
307
308 for (int i = 0; i < s_addonConfigs.Size(); i++)
309 {
310 const ParamFile& config = *s_addonConfigs.Get(i);
311 AddonDependency& dep = dependencies.Append();
312 dep.addon = &config;
313 dep.preloaded = false;
314
315 const ParamEntry* cfg = config.FindEntry("CfgPatches");
316 if (cfg)
317 {
318 for (int j = 0; j < cfg->GetEntryCount(); j++)
319 {
320 const ParamEntry& entry = cfg->GetEntry(j);
321 if (!entry.IsClass())
322 continue;
323 dep.preloaded = IsPreloadedAddon(entry.GetName());
324 const ParamEntry* required = entry.FindEntry("requiredAddons");
325 if (!required)
326 continue;
327 for (int k = 0; k < required->GetSize(); k++)
328 {
329 RStringB requiredName = (*required)[k];
330 const ParamFile* file = FindAddonConfig(requiredName);
331 if (!file)
332 {
333 WarningMessage("Addon '%s' requires addon '%s'", (const char*)GetAddonName(config),
334 (const char*)requiredName);
335 continue;
336 }
337 dep.dependsOn.Add(file);
338 }
339 }
340 }
341 }
342
343 AutoArray<AddonDependency> resolved;
344 while (dependencies.Size() > 0)
345 {
346 bool someResolved = false;
347 for (int preloaded = 1; preloaded >= 0; preloaded--)
348 {
349 for (int i = 0; i < dependencies.Size(); i++)
350 {
351 const AddonDependency& dep = dependencies[i];
352 if ((int)dep.preloaded != preloaded)
353 continue;
354 if (dep.dependsOn.Size() > 0)
355 continue;
356 resolved.Add(dep);
357 for (int j = 0; j < dependencies.Size(); j++)
358 dependencies[j].Resolved(dep);
359 dependencies.Delete(i--);
360 someResolved = true;
361 }

Callers

nothing calls this directly

Calls 14

WarningMessageFunction · 0.85
ErrorMessageFunction · 0.85
ResolvedMethod · 0.80
SizeMethod · 0.45
GetMethod · 0.45
FindEntryMethod · 0.45
GetEntryCountMethod · 0.45
IsClassMethod · 0.45
GetNameMethod · 0.45
GetSizeMethod · 0.45
AddMethod · 0.45
DeleteMethod · 0.45

Tested by

no test coverage detected