public static void InitializeLevels()
        {
            MonoMain.loadMessage = "Loading Levels";
            DuckGame.Content.SearchDirLevels("Content/levels", LevelLocation.Content);
            DuckGame.Content.SearchDirLevels(DuckFile.levelDirectory, LevelLocation.Custom);
            if (!Steam.IsInitialized())
            {
                return;
            }
            bool done = false;
            WorkshopQueryUser queryUser = Steam.CreateQueryUser(Steam.user.id, WorkshopList.Subscribed, WorkshopType.UsableInGame, WorkshopSortOrder.TitleAsc);

            queryUser.requiredTags.Add("Map");
            queryUser.onlyQueryIDs   = true;
            queryUser.QueryFinished += (WorkshopQueryFinished)(sender => done = true);
            queryUser.ResultFetched += (WorkshopQueryResultFetched)((sender, result) =>
            {
                WorkshopItem publishedFile = result.details.publishedFile;
                if ((publishedFile.stateFlags & WorkshopItemState.Installed) == WorkshopItemState.None)
                {
                    return;
                }
                DuckGame.Content.SearchDirLevels(publishedFile.path, LevelLocation.Workshop);
            });
            queryUser.Request();
            while (!done)
            {
                Steam.Update();
                Thread.Sleep(13);
            }
        }
        internal static void LoadMods(string dir)
        {
            ModLoader.modDirectory = dir;
            ModLoader.LoadConfig();
            Stack <string> modLoadStack = new Stack <string>();

            ModLoader.loadableMods = new Dictionary <string, ModConfiguration>();
            if (Directory.Exists(ModLoader.modDirectory))
            {
                if (Steam.IsInitialized())
                {
                    bool done = false;
                    WorkshopQueryUser queryUser = Steam.CreateQueryUser(Steam.user.id, WorkshopList.Subscribed, WorkshopType.UsableInGame, WorkshopSortOrder.TitleAsc);
                    queryUser.requiredTags.Add("Mod");
                    queryUser.onlyQueryIDs   = true;
                    queryUser.QueryFinished += (WorkshopQueryFinished)(sender => done = true);
                    queryUser.ResultFetched += new WorkshopQueryResultFetched(ModLoader.ResultFetched);
                    queryUser.Request();
                    while (!done)
                    {
                        Steam.Update();
                        Thread.Sleep(13);
                    }
                }
                List <string> directoriesNoCloud = DuckFile.GetDirectoriesNoCloud(ModLoader.modDirectory);
                MonoMain.totalLoadyBits += directoriesNoCloud.Count <string>() * 2;
                foreach (string folder in directoriesNoCloud)
                {
                    ModConfiguration modConfiguration = ModLoader.AttemptModLoad(folder);
                    MonoMain.loadyBits += 2;
                    if (modConfiguration != null)
                    {
                        if (ModLoader.loadableMods.ContainsKey(modConfiguration.uniqueID))
                        {
                            if (ModLoader.loadableMods[modConfiguration.uniqueID].disabled && !modConfiguration.disabled)
                            {
                                ModLoader.loadableMods.Remove(modConfiguration.uniqueID);
                            }
                            else
                            {
                                continue;
                            }
                        }
                        ModLoader.loadableMods.Add(modConfiguration.uniqueID, modConfiguration);
                    }
                }
            }
            MonoMain.totalLoadyBits += ModLoader.loadableMods.Count * 2;
            int num = 0;

            foreach (ModConfiguration modConfig in ModLoader.loadableMods.Values)
            {
                try
                {
                    ModLoader.currentModLoadString = modConfig.name;
                    MonoMain.loadMessage           = "LOADING MOD " + ModLoader.currentModLoadString;
                    ModLoader.GetOrLoad(modConfig, ref modLoadStack, ref ModLoader.loadableMods);
                    MonoMain.loadyBits += 2;
                    ++num;
                    if (num == 10)
                    {
                        num = 0;
                        Thread.Sleep(50);
                    }
                }
                catch (Exception ex)
                {
                    ModLoader._modLoadErrors.Add(Tuple.Create <string, Exception>(modConfig.uniqueID, ex));
                    MonoMain.loadyBits += 2;
                }
            }
            ModLoader._sortedMods           = (IList <Mod>)ModLoader._loadedMods.Values.OrderBy <Mod, Priority>((Func <Mod, Priority>)(mod => mod.priority)).ToList <Mod>();
            ModLoader._sortedAccessibleMods = (IList <Mod>)ModLoader._sortedMods.Where <Mod>((Func <Mod, bool>)(mod => !mod.configuration.disabled)).ToList <Mod>();
            foreach (Mod mod in ModLoader._sortedMods.Where <Mod>((Func <Mod, bool>)(a => a.configuration.disabled)))
            {
                if (mod != null && mod.configuration != null)
                {
                    ModLoader._loadedMods.Remove(mod.configuration.uniqueID);
                }
            }
            foreach (Mod sortedAccessibleMod in (IEnumerable <Mod>)ModLoader._sortedAccessibleMods)
            {
                sortedAccessibleMod.InvokeOnPreInitialize();
            }
            ModLoader.modHash = ModLoader.GetModHash();
            foreach (Mod sortedAccessibleMod in (IEnumerable <Mod>)ModLoader._sortedAccessibleMods)
            {
                foreach (System.Type type in sortedAccessibleMod.configuration.assembly.GetTypes())
                {
                    ModLoader._typesByName[ModLoader.SmallTypeName(type)] = type;
                }
            }
        }