Browse Source

Change `CoreService` to work with Acedia's loader

pull/8/head
Anton Tarasenko 3 years ago
parent
commit
e9cb6f1bd5
  1. 69
      sources/CoreService.uc

69
sources/CoreService.uc

@ -33,7 +33,16 @@ var private array< class<AcediaActor> > usedActorClasses;
// the rest of the classes.
var private array< class<Singleton> > usedSingletonClasses;
var array<string> packagesToLoad;
var private array< class<_manifest> > availableManifests;
var private array<string> packagesToLoad;
struct FeatureConfigPair
{
var public class<Feature> featureClass;
var public Text configName;
};
var private array<FeatureConfigPair> automaticConfigs;
var private LoggerAPI.Definition infoLoadingPackage;
var private LoggerAPI.Definition infoBootingUp, infoBootingUpFinished;
@ -138,6 +147,7 @@ private final function BootUp()
_.logger.Auto(errorNoManifest).Arg(nextPackageName.Copy());
continue;
}
availableManifests[availableManifests.length] = nextManifest;
LoadManifest(nextManifest);
_.memory.Free(nextPackageName);
}
@ -153,14 +163,21 @@ private final function BootUp()
private final function LoadManifest(class<_manifest> manifestClass)
{
local int i;
local FeatureConfigPair nextPair;
for (i = 0; i < manifestClass.default.aliasSources.length; i += 1)
{
if (manifestClass.default.aliasSources[i] == none) continue;
_.memory.Allocate(manifestClass.default.aliasSources[i]);
}
LaunchServicesAndFeatures(manifestClass);
if (class'Commands_Feature'.static.IsEnabled()) {
RegisterCommands(manifestClass);
LaunchManifestServices(manifestClass);
for (i = 0; i < manifestClass.default.features.length; i += 1)
{
if (manifestClass.default.features[i] == none) continue;
manifestClass.default.features[i].static.LoadConfigs();
nextPair.featureClass = manifestClass.default.features[i];
nextPair.configName = manifestClass.default.features[i].static
.GetAutoEnabledConfig();
automaticConfigs[automaticConfigs.length] = nextPair;
}
for (i = 0; i < manifestClass.default.testCases.length; i += 1)
{
@ -169,46 +186,34 @@ private final function LoadManifest(class<_manifest> manifestClass)
}
}
private final function class<_manifest> LoadManifestClass(string packageName)
{
return class<_manifest>(DynamicLoadObject( packageName $ manifestSuffix,
class'Class', true));
}
private final function RegisterCommands(class<_manifest> manifestClass)
public final function array<FeatureConfigPair> GetAutoConfigurationInfo()
{
local int i;
local Commands_Feature commandsFeature;
commandsFeature =
Commands_Feature(class'Commands_Feature'.static.GetInstance());
for (i = 0; i < manifestClass.default.commands.length; i += 1)
local array<FeatureConfigPair> result;
for (i = 0; i < automaticConfigs.length; i += 1)
{
if (manifestClass.default.commands[i] == none) continue;
commandsFeature.RegisterCommand(manifestClass.default.commands[i]);
result[i] = automaticConfigs[i];
if (result[i].configName != none) {
result[i].configName = result[i].configName.Copy();
}
}
return result;
}
private final function class<_manifest> LoadManifestClass(string packageName)
{
return class<_manifest>(DynamicLoadObject( packageName $ manifestSuffix,
class'Class', true));
}
private final function LaunchServicesAndFeatures(class<_manifest> manifestClass)
private final function LaunchManifestServices(class<_manifest> manifestClass)
{
local int i;
local Text autoConfigName;
// Services
for (i = 0; i < manifestClass.default.services.length; i += 1)
{
if (manifestClass.default.services[i] == none) continue;
if (manifestClass.default.services[i] != none) {
manifestClass.default.services[i].static.Require();
}
// Features
for (i = 0; i < manifestClass.default.features.length; i += 1)
{
if (manifestClass.default.features[i] == none) continue;
manifestClass.default.features[i].static.LoadConfigs();
autoConfigName =
manifestClass.default.features[i].static.GetAutoEnabledConfig();
if (autoConfigName != none) {
manifestClass.default.features[i].static.EnableMe(autoConfigName);
}
_.memory.Free(autoConfigName);
}
}

Loading…
Cancel
Save