예제 #1
0
        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);
                }));
            }));
        }
예제 #2
0
파일: Main.cs 프로젝트: dmitmel/ASCIIWars
        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
        }