public void LoadMods(string modsDirectory) { List <string> modDirectories = Directory.GetDirectories(modsDirectory).ToList(); LoadingBar.Load(modDirectories.Map(modDirectory => { ModInfo modInfo = null; Assembly assembly = null; return(new Task($"Загружаем моды: мод из папки {modDirectory}", () => { MyConsole.MoveCursorDown(3); LoadingBar.Load( new Task($"Загружаем JSON для мода из папки {modDirectory}...", () => { string modJSON = $"{modDirectory}/mod.json"; modInfo = JsonConvert.DeserializeObject <ModInfo>(File.ReadAllText(modJSON)); modInfo.modDirectory = modDirectory; }), new Task(() => $"Загружаем код для мода '{modInfo.name}'", () => { assembly = Assembly.LoadFrom($"{modDirectory}/{modInfo.dllName}"); }), new Task(() => $"Инициализируем мод '{modInfo.name}...'", () => { Type modDescriptorType = assembly.GetType(modInfo.descriptorClass); ConstructorInfo modDescriptorConstructor = modDescriptorType.GetConstructor(new[] { typeof(ModInfo) }); var modDescriptor = (ModDescriptor)modDescriptorConstructor.Invoke(new[] { modInfo }); modDescriptors.Add(modDescriptor); MyConsole.MoveCursorDown(3); modDescriptor.OnLoadBy(this); MyConsole.MoveCursorUp(3); }) ); MyConsole.MoveCursorUp(3); })); })); }
static void DoLoading() { Task[] realTasks = { new Task("Загружаем ассеты...", () => { Assets = new AssetContainer("assets"); }), new Task("Загружаем классическую кампанию...", () => { MyConsole.MoveCursorDown(3); Campaigns.Add(Campaign.LoadFrom(Assets, "classic-campaign")); MyConsole.MoveCursorUp(3); }), new Task("Загружаем моды...", () => { MyConsole.MoveCursorDown(3); ModLoader.LoadMods("mods"); MyConsole.MoveCursorUp(3); }) }; #if DEBUG LoadingBar.Load(realTasks); #else Task[] funnyTasks = FunnyTasksLoader.Load(); Task[] allTasks = realTasks.Concat(funnyTasks).ToArray(); LoadingBar.Load(allTasks); #endif }