static void ShowFolderInfo(CustomFolderInfo item) //ShowFolderInfo - метод, показывающий информацию о папках { item.PrintFolderInfo(); //item - текущая позиция курсора. Каждый раз вызываем функцию PrintFolderinfo ConsoleKeyInfo pressedKey = Console.ReadKey(); //считывает нажатые клавиши if (pressedKey.Key == ConsoleKey.UpArrow) //если пользователь нажал вверх, то текущий индекс уменьшается { item.DecreaseIndex(); ShowFolderInfo(item); //снова вызываем этот метод для папки с текущий индексом } else if (pressedKey.Key == ConsoleKey.DownArrow) { item.IncreaseIndex(); //если пользователь нажал вниз, то индекс возрастае, снова вызываем метод ShowFolderInfo рекурсивно ShowFolderInfo(item); } else if (pressedKey.Key == ConsoleKey.Enter) //если пользователь нажал Enter, то создаем новый item и переходим к его папкам(переходим к след элементам { CustomFolderInfo newItem = item.GetNextItem(); ShowFolderInfo(newItem); //вызываем метод, показывающий списов папок } else if (pressedKey.Key == ConsoleKey.Escape) //если пользователь ввел Escape, то возвращаемся к предыдущему списку { CustomFolderInfo newItem = item.GetPrevItem(); ShowFolderInfo(newItem); } }
public override void LoadNestedItems(object[] objectsToLoad = null) { CustomFolderInfo parent = null; AddFolder <CustomLevelFolderInfo>("Easy Day", null, NestedItems, ref parent); CustomFolderInfo easyDayFolder = NestedItems.FirstOrDefault(x => x.GetName() == "\\Easy Day" && x.GetPath() == null) as CustomFolderInfo; parent = null; CustomFolderInfo modIoFolder = null; var modIoMaps = LevelManager.Instance.ModLevels.Any(x => x.path.IsSubPathOf(PluginSettings.INSTALLATION_DIRECTORY)); if (modIoMaps) { AddFolder <CustomLevelFolderInfo>("mod.io", null, NestedItems, ref parent); modIoFolder = NestedItems.FirstOrDefault(x => x.GetName() == "\\mod.io" && x.GetPath() == null) as CustomFolderInfo; } foreach (var level in LevelManager.Instance.ModLevels) { AddLevel(level, easyDayFolder, modIoFolder, ref parent); } parent = null; foreach (var level in LevelManager.Instance.CommunityLevels) { AddLevel(level, easyDayFolder, modIoFolder, ref parent); } NestedItems = SortList(NestedItems); }
public void LoadNestedHairItems(GearInfo[] objectsToLoad = null) { NestedOfficialItems.Clear(); var gearToLoad = (GearInfo[])objectsToLoad; if (gearToLoad == null) { return; } foreach (var gear in gearToLoad) { CustomFolderInfo parent = null; var nameSplit = gear.name.Split(' '); if (string.IsNullOrEmpty(nameSplit.FirstOrDefault())) { continue; } var hairStyle = nameSplit.FirstOrDefault(); if (hairStyle.ToLower() == "long" || hairStyle.ToLower() == "short" || hairStyle.ToLower() == "curly") { hairStyle = $"{hairStyle} {nameSplit[1]}"; } AddFolder <CustomGearFolderInfo>(hairStyle, null, NestedOfficialItems, ref parent); AddItem(gear, parent.Children, ref parent); } NestedOfficialItems = SortList(NestedOfficialItems); }
public CustomGearFolderInfo(string name, string path, CustomFolderInfo parent) : base(name, "Folder", true, new string[] {}) { Info = new CustomFolderInfo(name, path, parent) { ParentObject = this }; if (name != "..\\") { var backFolder = FolderInfo.Children.First(); backFolder.ParentObject = new CustomGearFolderInfo("..\\", backFolder.GetPath(), parent); } }
public CustomLevelFolderInfo(string name, string path, CustomFolderInfo parent) : base(path, false) { this.name = name; this.path = path; FolderInfo = new CustomFolderInfo(name, path, parent) { ParentObject = this }; if (name != "..\\") { var backFolder = FolderInfo.Children.First(); backFolder.ParentObject = new CustomLevelFolderInfo("..\\", backFolder.GetPath(), parent); } }
static void Main(string[] args) { CustomFolderInfo test = new CustomFolderInfo(null, 0, new DirectoryInfo(@"C:\").GetDirectories()); //изначально список папок пуст, 0 индекс, отображаем папки с методом GetDirectories, который показывает все папки Console.CursorVisible = false; //сделать курсор невидимым) ShowFolderInfo(test); DirectoryInfo dr = new DirectoryInfo("C:\\Python27"); //отображает файлы в папке питон FileSystemInfo[] list = dr.GetFileSystemInfos(); //GetFileSystemInfos - отображает не только папки, но и файлы. for (int i = 0; i < list.Length; i++) { Console.WriteLine(list[i]); } Console.ReadKey(); }
public CustomLevelInfo(LevelInfo level, CustomFolderInfo parent) : this(level) { Info.Parent = parent; }
DirectoryInfo[] dirs; //DirectoryInfo - предоставляет методы экземпляра класса для создания, перемещения и перечисления в каталогах и подкаталогах public CustomFolderInfo(CustomFolderInfo prev, int index, DirectoryInfo[] directoryInfo) //конструктор с параметрами предыдущая папка, индекс текущей папки и информация о каталогах { this.prev = prev; this.index = index; this.dirs = directoryInfo; }
private void AddLevel(LevelInfo level, CustomFolderInfo easyDayFolder, CustomFolderInfo modIoFolder, ref CustomFolderInfo parent) { if (string.IsNullOrEmpty(level.path)) { return; } var extension = Path.GetExtension(level.path).ToLower(); if (extension == ".zip" || extension == ".rar" || extension == ".json") { return; } if (!level.isAssetBundle) { AddItem(level, easyDayFolder.Children, ref easyDayFolder); return; } if (level.path.IsSubPathOf(PluginSettings.INSTALLATION_DIRECTORY)) { AddItem(level, modIoFolder.Children, ref modIoFolder); return; } string levelSubPath = level.path.Replace(SaveManager.Instance.CustomLevelsDir + '\\', string.Empty); if (string.IsNullOrEmpty(levelSubPath)) { return; } var folders = levelSubPath.Split('\\').ToList(); if (!folders.Any()) { return; } parent = null; if (folders.Count == 1) { // This level is at the root AddItem(LevelManager.Instance.LevelInfoForPath(level.path), NestedItems, ref parent); return; } parent = null; var folderPath = SaveManager.Instance.CustomLevelsDir; for (int i = 0; i < folders.Count; i++) { var folder = folders.ElementAt(i); if (folder == null) { continue; } if (folder == folders.Last()) { AddItem(LevelManager.Instance.LevelInfoForPath(level.path), parent == null ? NestedItems : parent.Children, ref parent); } else { folderPath = Path.Combine(folderPath, folder); AddFolder <CustomLevelFolderInfo>(folder, folderPath, parent == null ? NestedItems : parent.Children, ref parent); } } }
public void LoadNestedOfficialItems(GearInfo[] gearToLoad = null) { NestedOfficialItems.Clear(); if (gearToLoad == null) { return; } List <string> unbrandedItems = new List <string> { #region Decks "Tie Dye Light", "Skater XL Obstacles Deck", #endregion #region Grip "Black", "Camo Grey", "Easy Day Logo", #endregion #region Trucks "Black", "Silver", "White", #endregion #region Wheels "Purple", "Red/Blue Swirl", "White", #endregion }; CustomFolderInfo parent = null; var easyDayItemsExist = gearToLoad.Any(x => x.name.StartsWith("Blank") || x.name.StartsWith("Unbranded") || x.name.StartsWith("Denim") || unbrandedItems.Contains(x.name)); if (easyDayItemsExist) { AddFolder <CustomGearFolderInfo>("Easy Day", null, NestedOfficialItems, ref parent); } parent = null; var easyDayFolder = NestedOfficialItems.FirstOrDefault(x => x.GetName() == "\\Easy Day" && x.GetPath() == null) as CustomFolderInfo; foreach (var gear in gearToLoad) { parent = null; if (gear.name.StartsWith("Blank") || gear.name.StartsWith("Unbranded") || gear.name.StartsWith("Denim") || unbrandedItems.Contains(gear.name)) { AddItem(gear, easyDayFolder.Children, ref easyDayFolder); } else { var nameSplit = gear.name.Split(' '); if (string.IsNullOrEmpty(nameSplit.FirstOrDefault())) { continue; } var brand = nameSplit.FirstOrDefault(); if (brand == "Old" || brand == "New" || brand == "Santa" || brand == "Grimple") { brand = $"{nameSplit[0]} {nameSplit[1]}"; } else if (brand == "The") { brand = $"{nameSplit[0]} {nameSplit[1]} {nameSplit[2]}"; } else if (brand == "TWS") { brand = "Transworld"; } AddFolder <CustomGearFolderInfo>(brand, null, NestedOfficialItems, ref parent); AddItem(gear, parent.Children, ref parent); } } NestedOfficialItems = SortList(NestedOfficialItems); }
public override void LoadNestedItems(object[] objectsToLoad = null) { var gearToLoad = (GearInfo[])objectsToLoad; if (gearToLoad == null) { return; } if (LastLoaded != null && LastLoaded == gearToLoad) { return; } LastLoaded = gearToLoad; NestedItems.Clear(); CustomFolderInfo modIoFolder = null; foreach (var gear in gearToLoad) { GearInfo newGear = null; TextureChange textureChange = null; if (gear is GearInfoSingleMaterial singleMaterialGear) { textureChange = singleMaterialGear?.textureChanges?.FirstOrDefault(); newGear = singleMaterialGear; } else if (gear is CharacterBodyInfo characterBodyInfo) { var materialChange = characterBodyInfo.materialChanges.FirstOrDefault(); textureChange = materialChange?.textureChanges?.FirstOrDefault(); newGear = characterBodyInfo; } if (textureChange == null || string.IsNullOrEmpty(textureChange.texturePath)) { continue; } var isGearFolder = textureChange.texturePath.IsSubPathOf(SaveManager.Instance.CustomGearDir); var isModIo = textureChange.texturePath.IsSubPathOf(PluginSettings.INSTALLATION_DIRECTORY); CustomFolderInfo parent = null; if (isModIo) { AddFolder <CustomGearFolderInfo>("mod.io", null, NestedItems, ref parent); modIoFolder = NestedItems.FirstOrDefault(x => x.GetName() == "\\mod.io" && x.GetPath() == null) as CustomFolderInfo; var mod = InstalledGearMods.FirstOrDefault(x => textureChange.texturePath.IsSubPathOf(x.Key)); AddFolder <CustomGearFolderInfo>(mod.Value, null, modIoFolder.Children, ref parent); AddItem(newGear, parent.Children, ref modIoFolder); continue; } if (!isGearFolder && !isModIo) { continue; } string textureSubPath = string.Empty; string folderPath = string.Empty; if (isGearFolder) { textureSubPath = textureChange.texturePath.Replace(SaveManager.Instance.CustomGearDir + '\\', string.Empty); folderPath = SaveManager.Instance.CustomGearDir; } else if (isModIo) { textureSubPath = textureChange.texturePath.Replace(PluginSettings.INSTALLATION_DIRECTORY + '\\', string.Empty); folderPath = PluginSettings.INSTALLATION_DIRECTORY; } if (string.IsNullOrEmpty(textureSubPath) || string.IsNullOrEmpty(folderPath)) { continue; } var folders = textureSubPath.Split('\\').ToList(); if (!folders.Any()) { continue; } parent = null; if (folders.Count == 1 || IsImage(folders.First())) { // This gear item is at the root. AddItem(newGear, NestedItems, ref parent); continue; } parent = null; foreach (var folder in folders) { if (IsImage(folder)) { AddItem(newGear, parent == null ? NestedItems : parent.Children, ref parent); } else { folderPath = Path.Combine(folderPath, folder); AddFolder <CustomGearFolderInfo>(folder, folderPath, parent == null ? NestedItems : parent.Children, ref parent); } } } NestedItems = SortList(NestedItems); }