diff --git a/VPet.ModMaker/Models/ModModel/AnimeModel.cs b/VPet.ModMaker/Models/ModModel/AnimeModel.cs index 40c67d1..04056d1 100644 --- a/VPet.ModMaker/Models/ModModel/AnimeModel.cs +++ b/VPet.ModMaker/Models/ModModel/AnimeModel.cs @@ -21,6 +21,8 @@ public class AnimeTypeModel public static ObservableCollection ModeTypes { get; } = new(Enum.GetValues(typeof(GameSave.ModeType)).Cast()); + public ObservableValue Id { get; } = new(); + public ObservableValue Name { get; } = new(); public ObservableValue GraphType { get; } = new(); @@ -29,10 +31,18 @@ public class AnimeTypeModel public ObservableCollection PoorConditionAnimes { get; } = new(); public ObservableCollection IllAnimes { get; } = new(); - public AnimeTypeModel() { } + public AnimeTypeModel() + { + Name.ValueChanged += (_, _) => + { + Id.Value = $"{GraphType.Value}_{Name.Value}"; + }; + } public AnimeTypeModel(AnimeTypeModel model) + : this() { + Id.Value = model.Id.Value; Name.Value = model.Name.Value; GraphType.Value = model.GraphType.Value; foreach (var anime in model.HappyAnimes) @@ -60,6 +70,11 @@ public class AnimeTypeModel public AnimeTypeModel(GraphInfo.GraphType graphType, string path) { + Name.Value = Path.GetFileName(path); + if (graphType is GraphInfo.GraphType.Common) + Id.Value = $"{nameof(GraphInfo.GraphType.Common)}_{Name.Value}"; + else + Id.Value = graphType.ToString(); GraphType.Value = graphType; if ( graphType @@ -81,6 +96,7 @@ public class AnimeTypeModel or GraphInfo.GraphType.Raised_Static or GraphInfo.GraphType.StateONE or GraphInfo.GraphType.StateTWO + or GraphInfo.GraphType.Common ) LoadMultiType(path); else @@ -177,13 +193,14 @@ public class AnimeTypeModel AddAnime(IllAnimes, dir, type); } } - else + else if (Enum.TryParse(dirName, true, out var mode)) { // 判断 Happy/A 型文件夹 - var mode = Enum.Parse(typeof(GameSave.ModeType), dirName, true); foreach (var typePath in Directory.EnumerateDirectories(dir)) { - var type = GetAnimatType(Path.GetFileName(typePath)[0]); + var type = GetAnimatType( + Path.GetFileName(typePath).Split(Utils.Separator).First()[0] + ); if (mode is GameSave.ModeType.Happy) { AddAnime(HappyAnimes, typePath, type); @@ -202,6 +219,36 @@ public class AnimeTypeModel } } } + else + { + var type = GetAnimatType(dirName[0]); + // 判断 A/Happy 文件夹 + foreach (var modePath in Directory.EnumerateDirectories(dir)) + { + mode = (GameSave.ModeType) + Enum.Parse( + typeof(GameSave.ModeType), + Path.GetFileName(modePath).Split(Utils.Separator).First(), + true + ); + if (mode is GameSave.ModeType.Happy) + { + AddAnime(HappyAnimes, modePath, type); + } + else if (mode is GameSave.ModeType.Nomal) + { + AddAnime(NomalAnimes, modePath, type); + } + else if (mode is GameSave.ModeType.PoorCondition) + { + AddAnime(PoorConditionAnimes, modePath, type); + } + else if (mode is GameSave.ModeType.Ill) + { + AddAnime(IllAnimes, modePath, type); + } + } + } } } @@ -254,7 +301,7 @@ public class AnimeTypeModel or GraphInfo.GraphType.Touch_Body or GraphInfo.GraphType.Sleep ) - SaveWithModeType(path, this); + SaveMultiType(path, this); else if ( GraphType.Value is GraphInfo.GraphType.Switch_Up @@ -271,13 +318,22 @@ public class AnimeTypeModel SaveRaise(path, this); else if (GraphType.Value is GraphInfo.GraphType.StateONE or GraphInfo.GraphType.StateTWO) SaveState(path, this); + else if (GraphType.Value is GraphInfo.GraphType.Common) + SaveCommon(path, this); + } + + void SaveCommon(string path, AnimeTypeModel animeTypeModel) + { + var animePath = Path.Combine(path, animeTypeModel.Name.Value); + Directory.CreateDirectory(animePath); + SaveWithModeType(animePath, animeTypeModel); } void SaveState(string path, AnimeTypeModel animeTypeModel) { var animePath = Path.Combine(path, "State"); Directory.CreateDirectory(animePath); - SaveWithModeType(animePath, animeTypeModel); + SaveMultiType(animePath, animeTypeModel); } void SaveRaise(string path, AnimeTypeModel animeTypeModel) @@ -287,7 +343,7 @@ public class AnimeTypeModel if (animeTypeModel.GraphType.Value is GraphInfo.GraphType.Raised_Dynamic) SaveDefault(animePath, animeTypeModel); else if (animeTypeModel.GraphType.Value is GraphInfo.GraphType.Raised_Static) - SaveWithModeType(animePath, animeTypeModel); + SaveMultiType(animePath, animeTypeModel); } void SaveSwitch(string path, AnimeTypeModel animeTypeModel) @@ -298,6 +354,30 @@ public class AnimeTypeModel SaveWithAnimeType(Path.Combine(animePath, switchName), animeTypeModel); } + /// + /// 保存成默认样式 + /// + /// + /// + static void SaveDefault(string path, AnimeTypeModel animeTypeModel) + { + var animePath = Path.Combine(path, animeTypeModel.GraphType.ToString()); + Directory.CreateDirectory(animePath); + SaveWithAnimeType(animePath, animeTypeModel); + } + + /// + /// 保存成多类型样式 + /// + /// + /// + static void SaveMultiType(string path, AnimeTypeModel animeTypeModel) + { + var animePath = Path.Combine(path, animeTypeModel.GraphType.ToString()); + Directory.CreateDirectory(animePath); + SaveWithModeType(animePath, animeTypeModel); + } + /// /// 保存为 ModeType 划分的样式 /// /// /// - void SaveWithModeType(string path, AnimeTypeModel animeTypeModel) + static void SaveWithModeType(string path, AnimeTypeModel animeTypeModel) { - var animePath = Path.Combine(path, animeTypeModel.GraphType.ToString()); - Directory.CreateDirectory(animePath); if (animeTypeModel.HappyAnimes.Count > 0) { - var modePath = Path.Combine(animePath, nameof(GameSave.ModeType.Happy)); + var modePath = Path.Combine(path, nameof(GameSave.ModeType.Happy)); SaveAnimes(modePath, animeTypeModel.HappyAnimes); } if (animeTypeModel.NomalAnimes.Count > 0) { - var modePath = Path.Combine(animePath, nameof(GameSave.ModeType.Nomal)); + var modePath = Path.Combine(path, nameof(GameSave.ModeType.Nomal)); SaveAnimes(modePath, animeTypeModel.NomalAnimes); } if (animeTypeModel.PoorConditionAnimes.Count > 0) { - var modePath = Path.Combine(animePath, nameof(GameSave.ModeType.PoorCondition)); + var modePath = Path.Combine(path, nameof(GameSave.ModeType.PoorCondition)); SaveAnimes(modePath, animeTypeModel.PoorConditionAnimes); } if (animeTypeModel.IllAnimes.Count > 0) { - var modePath = Path.Combine(animePath, nameof(GameSave.ModeType.Ill)); + var modePath = Path.Combine(path, nameof(GameSave.ModeType.Ill)); SaveAnimes(modePath, animeTypeModel.IllAnimes); } @@ -371,18 +449,6 @@ public class AnimeTypeModel } } - /// - /// 保存成默认样式 - /// - /// - /// - static void SaveDefault(string path, AnimeTypeModel animeTypeModel) - { - var animePath = Path.Combine(path, animeTypeModel.GraphType.ToString()); - Directory.CreateDirectory(animePath); - SaveWithAnimeType(animePath, animeTypeModel); - } - /// /// 保存为 AnimeType 划分的样式 /// foreach (var animeDir in Directory.EnumerateDirectories(path)) { var dirName = Path.GetFileName(animeDir); - Enum.TryParse(dirName, true, out var animeType); - if (AnimeTypeModel.Create(animeType, animeDir) is AnimeTypeModel model) - petModel.Animes.Add(model); + if (Enum.TryParse(dirName, true, out var animeType)) + { + if (AnimeTypeModel.Create(animeType, animeDir) is AnimeTypeModel model) + petModel.Animes.Add(model); + } else if (dirName.Equals("Switch", StringComparison.InvariantCultureIgnoreCase)) { foreach (var dir in Directory.EnumerateDirectories(animeDir)) @@ -143,6 +145,14 @@ public class ModInfoModel : I18nModel petModel.Animes.Add(switchModel); } } + else if (dirName.Equals("Music", StringComparison.InvariantCultureIgnoreCase)) + { + if ( + AnimeTypeModel.Create(GraphInfo.GraphType.Common, animeDir) + is AnimeTypeModel model1 + ) + petModel.Animes.Add(model1); + } } } } diff --git a/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimeEditWindowVM.cs b/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimeEditWindowVM.cs index 56798d4..172a5d4 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimeEditWindowVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimeEditWindowVM.cs @@ -67,10 +67,11 @@ public class AnimeEditWindowVM is GraphInfo.GraphType.Touch_Body or GraphInfo.GraphType.Touch_Head or GraphInfo.GraphType.Sleep + or GraphInfo.GraphType.Common ) HasMultiType.Value = true; - if (model.GraphType.Value is GraphInfo.GraphType.Idel) + if (model.GraphType.Value is GraphInfo.GraphType.Idel or GraphInfo.GraphType.Common) HasAnimeName.Value = true; } diff --git a/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimePageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimePageVM.cs index feddeb2..93aaf98 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimePageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimePageVM.cs @@ -21,7 +21,7 @@ public class AnimePageVM public ObservableCollection Pets => ModInfoModel.Current.Pets; public ObservableValue CurrentPet { get; } = new(new()); - //public ObservableValue Filter { get; } = new(); + public ObservableValue Search { get; } = new(); #endregion #region Command public ObservableCommand AddCommand { get; } = new(); @@ -32,7 +32,7 @@ public class AnimePageVM { ShowAnimes.Value = Animes; CurrentPet.ValueChanged += CurrentPet_ValueChanged; - //Filter.ValueChanged += Filter_ValueChanged; + Search.ValueChanged += Search_ValueChanged; AddCommand.ExecuteEvent += Add; EditCommand.ExecuteEvent += Edit; @@ -44,18 +44,18 @@ public class AnimePageVM ShowAnimes.Value = newValue.Animes; } - private void Filter_ValueChanged(string oldValue, string newValue) + private void Search_ValueChanged(string oldValue, string newValue) { - //if (string.IsNullOrWhiteSpace(newValue)) - //{ - // ShowAnimes.Value = Animes; - //} - //else - //{ - // ShowAnimes.Value = new( - // Animes.Where(m => m.Id.Value.Contains(newValue, StringComparison.OrdinalIgnoreCase)) - // ); - //} + if (string.IsNullOrWhiteSpace(newValue)) + { + ShowAnimes.Value = Animes; + } + else + { + ShowAnimes.Value = new( + Animes.Where(m => m.Id.Value.Contains(newValue, StringComparison.OrdinalIgnoreCase)) + ); + } } public void Close() { } diff --git a/VPet.ModMaker/ViewModels/ModEdit/ClickTextEdit/ClickTextPageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/ClickTextEdit/ClickTextPageVM.cs index 19913de..44e5229 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/ClickTextEdit/ClickTextPageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/ClickTextEdit/ClickTextPageVM.cs @@ -17,7 +17,7 @@ public class ClickTextPageVM #region Value public ObservableValue> ShowClickTexts { get; } = new(); public ObservableCollection ClickTexts => ModInfoModel.Current.ClickTexts; - public ObservableValue Filter { get; } = new(); + public ObservableValue Search { get; } = new(); #endregion #region Command public ObservableCommand AddCommand { get; } = new(); @@ -28,13 +28,13 @@ public class ClickTextPageVM public ClickTextPageVM() { ShowClickTexts.Value = ClickTexts; - Filter.ValueChanged += Filter_ValueChanged; + Search.ValueChanged += Search_ValueChanged; AddCommand.ExecuteEvent += Add; EditCommand.ExecuteEvent += Edit; RemoveCommand.ExecuteEvent += Remove; } - private void Filter_ValueChanged(string oldValue, string newValue) + private void Search_ValueChanged(string oldValue, string newValue) { if (string.IsNullOrWhiteSpace(newValue)) { diff --git a/VPet.ModMaker/ViewModels/ModEdit/FoodEdit/FoodPageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/FoodEdit/FoodPageVM.cs index c2ca671..863ce30 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/FoodEdit/FoodPageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/FoodEdit/FoodPageVM.cs @@ -19,7 +19,7 @@ public class FoodPageVM #region Value public ObservableValue> ShowFoods { get; } = new(); public ObservableCollection Foods => ModInfoModel.Current.Foods; - public ObservableValue Filter { get; } = new(); + public ObservableValue Search { get; } = new(); #endregion #region Command public ObservableCommand AddCommand { get; } = new(); @@ -29,14 +29,14 @@ public class FoodPageVM public FoodPageVM() { ShowFoods.Value = Foods; - Filter.ValueChanged += Filter_ValueChanged; + Search.ValueChanged += Search_ValueChanged; AddCommand.ExecuteEvent += Add; EditCommand.ExecuteEvent += Edit; RemoveCommand.ExecuteEvent += Remove; } - private void Filter_ValueChanged(string oldValue, string newValue) + private void Search_ValueChanged(string oldValue, string newValue) { if (string.IsNullOrWhiteSpace(newValue)) { diff --git a/VPet.ModMaker/ViewModels/ModEdit/LowTextEdit/LowTextPageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/LowTextEdit/LowTextPageVM.cs index 2900c7d..91784f2 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/LowTextEdit/LowTextPageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/LowTextEdit/LowTextPageVM.cs @@ -20,7 +20,7 @@ public class LowTextPageVM #region Value public ObservableValue> ShowLowTexts { get; } = new(); public ObservableCollection LowTexts => ModInfoModel.Current.LowTexts; - public ObservableValue Filter { get; } = new(); + public ObservableValue Search { get; } = new(); #endregion #region Command public ObservableCommand AddCommand { get; } = new(); @@ -31,13 +31,13 @@ public class LowTextPageVM public LowTextPageVM() { ShowLowTexts.Value = LowTexts; - Filter.ValueChanged += Filter_ValueChanged; + Search.ValueChanged += Search_ValueChanged; AddCommand.ExecuteEvent += Add; EditCommand.ExecuteEvent += Edit; RemoveCommand.ExecuteEvent += Remove; } - private void Filter_ValueChanged(string oldValue, string newValue) + private void Search_ValueChanged(string oldValue, string newValue) { if (string.IsNullOrWhiteSpace(newValue)) { diff --git a/VPet.ModMaker/ViewModels/ModEdit/MoveEdit/MovePageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/MoveEdit/MovePageVM.cs index 8c8c909..1cb2d18 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/MoveEdit/MovePageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/MoveEdit/MovePageVM.cs @@ -20,7 +20,7 @@ public class MovePageVM public ObservableCollection Pets => ModInfoModel.Current.Pets; public ObservableValue CurrentPet { get; } = new(new()); - public ObservableValue Filter { get; } = new(); + public ObservableValue Search { get; } = new(); #endregion #region Command public ObservableCommand AddCommand { get; } = new(); @@ -31,7 +31,7 @@ public class MovePageVM { ShowMoves.Value = Moves; CurrentPet.ValueChanged += CurrentPet_ValueChanged; - Filter.ValueChanged += Filter_ValueChanged; + Search.ValueChanged += Search_ValueChanged; AddCommand.ExecuteEvent += Add; EditCommand.ExecuteEvent += Edit; @@ -43,7 +43,7 @@ public class MovePageVM ShowMoves.Value = newValue.Moves; } - private void Filter_ValueChanged(string oldValue, string newValue) + private void Search_ValueChanged(string oldValue, string newValue) { //if (string.IsNullOrWhiteSpace(newValue)) //{ diff --git a/VPet.ModMaker/ViewModels/ModEdit/PetEdit/PetPageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/PetEdit/PetPageVM.cs index 1f8e18e..fd4f559 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/PetEdit/PetPageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/PetEdit/PetPageVM.cs @@ -17,7 +17,7 @@ public class PetPageVM #region Value public ObservableValue> ShowPets { get; } = new(); public ObservableCollection Pets => ModInfoModel.Current.Pets; - public ObservableValue Filter { get; } = new(); + public ObservableValue Search { get; } = new(); #endregion #region Command public ObservableCommand AddCommand { get; } = new(); @@ -27,14 +27,14 @@ public class PetPageVM public PetPageVM() { ShowPets.Value = Pets; - Filter.ValueChanged += Filter_ValueChanged; + Search.ValueChanged += Search_ValueChanged; AddCommand.ExecuteEvent += Add; EditCommand.ExecuteEvent += Edit; RemoveCommand.ExecuteEvent += Remove; } - private void Filter_ValueChanged(string oldValue, string newValue) + private void Search_ValueChanged(string oldValue, string newValue) { if (string.IsNullOrWhiteSpace(newValue)) { diff --git a/VPet.ModMaker/ViewModels/ModEdit/SelectTextEdit/SelectTextPageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/SelectTextEdit/SelectTextPageVM.cs index 17b6d5b..354f739 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/SelectTextEdit/SelectTextPageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/SelectTextEdit/SelectTextPageVM.cs @@ -17,7 +17,7 @@ public class SelectTextPageVM #region Value public ObservableValue> ShowSelectTexts { get; } = new(); public ObservableCollection SelectTexts => ModInfoModel.Current.SelectTexts; - public ObservableValue Filter { get; } = new(); + public ObservableValue Search { get; } = new(); #endregion #region Command public ObservableCommand AddCommand { get; } = new(); @@ -28,13 +28,13 @@ public class SelectTextPageVM public SelectTextPageVM() { ShowSelectTexts.Value = SelectTexts; - Filter.ValueChanged += Filter_ValueChanged; + Search.ValueChanged += Search_ValueChanged; AddCommand.ExecuteEvent += Add; EditCommand.ExecuteEvent += Edit; RemoveCommand.ExecuteEvent += Remove; } - private void Filter_ValueChanged(string oldValue, string newValue) + private void Search_ValueChanged(string oldValue, string newValue) { if (string.IsNullOrWhiteSpace(newValue)) { diff --git a/VPet.ModMaker/ViewModels/ModEdit/WorkEdit/WorkPageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/WorkEdit/WorkPageVM.cs index f06a001..00eccbb 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/WorkEdit/WorkPageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/WorkEdit/WorkPageVM.cs @@ -20,7 +20,7 @@ public class WorkPageVM public ObservableCollection Pets => ModInfoModel.Current.Pets; public ObservableValue CurrentPet { get; } = new(new()); - public ObservableValue Filter { get; } = new(); + public ObservableValue Search { get; } = new(); #endregion #region Command public ObservableCommand AddCommand { get; } = new(); @@ -31,7 +31,7 @@ public class WorkPageVM { ShowWorks.Value = Works; CurrentPet.ValueChanged += CurrentPet_ValueChanged; - Filter.ValueChanged += Filter_ValueChanged; + Search.ValueChanged += Search_ValueChanged; AddCommand.ExecuteEvent += Add; EditCommand.ExecuteEvent += Edit; @@ -43,7 +43,7 @@ public class WorkPageVM ShowWorks.Value = newValue.Works; } - private void Filter_ValueChanged(string oldValue, string newValue) + private void Search_ValueChanged(string oldValue, string newValue) { if (string.IsNullOrWhiteSpace(newValue)) { diff --git a/VPet.ModMaker/ViewModels/ModMakerWindowVM.cs b/VPet.ModMaker/ViewModels/ModMakerWindowVM.cs index c2b73a1..f8d3051 100644 --- a/VPet.ModMaker/ViewModels/ModMakerWindowVM.cs +++ b/VPet.ModMaker/ViewModels/ModMakerWindowVM.cs @@ -24,7 +24,7 @@ public class ModMakerWindowVM public ModEditWindow ModEditWindow { get; private set; } - public ObservableValue HistoriesFilterText { get; } = new(); + public ObservableValue HistoriesSearchText { get; } = new(); public ObservableCollection Mods { get; } = new(); public ObservableValue> ShowHistories { get; } = new(); @@ -45,7 +45,7 @@ public class ModMakerWindowVM CreateNewModCommand.ExecuteEvent += CreateNewMod; LoadModFromFileCommand.ExecuteEvent += LoadModFromFile; ClearHistoriesCommand.ExecuteEvent += ClearHistories; - HistoriesFilterText.ValueChanged += ModFilterText_ValueChanged; + HistoriesSearchText.ValueChanged += ModSearchText_ValueChanged; } private void LoadHistories() @@ -103,7 +103,7 @@ public class ModMakerWindowVM } } - private void ModFilterText_ValueChanged(string oldValue, string newValue) + private void ModSearchText_ValueChanged(string oldValue, string newValue) { if (string.IsNullOrEmpty(newValue)) ShowHistories.Value = Histories; diff --git a/VPet.ModMaker/Views/ModEdit/AnimeEdit/AnimeEditWindow.xaml b/VPet.ModMaker/Views/ModEdit/AnimeEdit/AnimeEditWindow.xaml index 172bc49..b62d50f 100644 --- a/VPet.ModMaker/Views/ModEdit/AnimeEdit/AnimeEditWindow.xaml +++ b/VPet.ModMaker/Views/ModEdit/AnimeEdit/AnimeEditWindow.xaml @@ -52,7 +52,7 @@ - + @@ -175,19 +175,15 @@