From 395e054f1323cdb8c5010c611d90a6a78b05de00 Mon Sep 17 00:00:00 2001 From: Hakoyu Date: Sun, 24 Sep 2023 21:28:24 +0800 Subject: [PATCH] =?UTF-8?q?AnimeEdit=20=E5=AE=9E=E8=A3=85=20StateONE=20?= =?UTF-8?q?=E5=92=8C=20StateTWO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VPet.ModMaker/Models/ModModel/AnimeModel.cs | 23 +++++++++++++++---- VPet.ModMaker/Models/ModModel/ModInfoModel.cs | 16 +++++++++++++ .../ModEdit/AnimeEdit/AnimeEditWindowVM.cs | 4 ++++ .../ModEdit/AnimeEdit/AnimeEditWindow.xaml | 13 +++++++++-- 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/VPet.ModMaker/Models/ModModel/AnimeModel.cs b/VPet.ModMaker/Models/ModModel/AnimeModel.cs index 45cae1f..40c67d1 100644 --- a/VPet.ModMaker/Models/ModModel/AnimeModel.cs +++ b/VPet.ModMaker/Models/ModModel/AnimeModel.cs @@ -21,6 +21,7 @@ public class AnimeTypeModel public static ObservableCollection ModeTypes { get; } = new(Enum.GetValues(typeof(GameSave.ModeType)).Cast()); + public ObservableValue Name { get; } = new(); public ObservableValue GraphType { get; } = new(); public ObservableCollection HappyAnimes { get; } = new(); @@ -32,6 +33,7 @@ public class AnimeTypeModel public AnimeTypeModel(AnimeTypeModel model) { + Name.Value = model.Name.Value; GraphType.Value = model.GraphType.Value; foreach (var anime in model.HappyAnimes) HappyAnimes.Add(anime.Copy()); @@ -77,6 +79,8 @@ public class AnimeTypeModel or GraphInfo.GraphType.Touch_Body or GraphInfo.GraphType.Sleep or GraphInfo.GraphType.Raised_Static + or GraphInfo.GraphType.StateONE + or GraphInfo.GraphType.StateTWO ) LoadMultiType(path); else @@ -176,25 +180,25 @@ public class AnimeTypeModel else { // 判断 Happy/A 型文件夹 - var mode = Enum.Parse(typeof(GameSave.ModeType), Path.GetFileName(dirName), true); + var mode = Enum.Parse(typeof(GameSave.ModeType), dirName, true); foreach (var typePath in Directory.EnumerateDirectories(dir)) { var type = GetAnimatType(Path.GetFileName(typePath)[0]); if (mode is GameSave.ModeType.Happy) { - AddAnime(HappyAnimes, dir, type); + AddAnime(HappyAnimes, typePath, type); } else if (mode is GameSave.ModeType.Nomal) { - AddAnime(NomalAnimes, dir, type); + AddAnime(NomalAnimes, typePath, type); } else if (mode is GameSave.ModeType.PoorCondition) { - AddAnime(PoorConditionAnimes, dir, type); + AddAnime(PoorConditionAnimes, typePath, type); } else if (mode is GameSave.ModeType.Ill) { - AddAnime(IllAnimes, dir, type); + AddAnime(IllAnimes, typePath, type); } } } @@ -265,6 +269,15 @@ public class AnimeTypeModel or GraphInfo.GraphType.Raised_Static ) SaveRaise(path, this); + else if (GraphType.Value is GraphInfo.GraphType.StateONE or GraphInfo.GraphType.StateTWO) + SaveState(path, this); + } + + void SaveState(string path, AnimeTypeModel animeTypeModel) + { + var animePath = Path.Combine(path, "State"); + Directory.CreateDirectory(animePath); + SaveWithModeType(animePath, animeTypeModel); } void SaveRaise(string path, AnimeTypeModel animeTypeModel) diff --git a/VPet.ModMaker/Models/ModModel/ModInfoModel.cs b/VPet.ModMaker/Models/ModModel/ModInfoModel.cs index 0bfa584..cf2d379 100644 --- a/VPet.ModMaker/Models/ModModel/ModInfoModel.cs +++ b/VPet.ModMaker/Models/ModModel/ModInfoModel.cs @@ -127,6 +127,22 @@ public class ModInfoModel : I18nModel petModel.Animes.Add(switchModel); } } + else if (dirName.Equals("State", StringComparison.InvariantCultureIgnoreCase)) + { + foreach (var dir in Directory.EnumerateDirectories(animeDir)) + { + Enum.TryParse( + Path.GetFileName(dir), + true, + out var switchType + ); + if ( + AnimeTypeModel.Create(switchType, Path.Combine(animeDir, dir)) + is AnimeTypeModel switchModel + ) + petModel.Animes.Add(switchModel); + } + } } } } diff --git a/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimeEditWindowVM.cs b/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimeEditWindowVM.cs index de93005..56798d4 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimeEditWindowVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/AnimeEdit/AnimeEditWindowVM.cs @@ -25,6 +25,7 @@ public class AnimeEditWindowVM public ObservableValue Loop { get; } = new(); public ObservableValue HasMultiType { get; } = new(false); + public ObservableValue HasAnimeName { get; } = new(false); #region Command public ObservableCommand PlayCommand { get; } = new(); public ObservableCommand StopCommand { get; } = new(); @@ -68,6 +69,9 @@ public class AnimeEditWindowVM or GraphInfo.GraphType.Sleep ) HasMultiType.Value = true; + + if (model.GraphType.Value is GraphInfo.GraphType.Idel) + HasAnimeName.Value = true; } private void CurrentAnimeModel_ValueChanged(AnimeModel oldValue, AnimeModel newValue) diff --git a/VPet.ModMaker/Views/ModEdit/AnimeEdit/AnimeEditWindow.xaml b/VPet.ModMaker/Views/ModEdit/AnimeEdit/AnimeEditWindow.xaml index b663818..172bc49 100644 --- a/VPet.ModMaker/Views/ModEdit/AnimeEdit/AnimeEditWindow.xaml +++ b/VPet.ModMaker/Views/ModEdit/AnimeEdit/AnimeEditWindow.xaml @@ -174,12 +174,21 @@ -