From ea3a8f0cac33d54fb7d65d678e5699ee95ea073f Mon Sep 17 00:00:00 2001 From: Hakoyu Date: Wed, 1 Nov 2023 18:33:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AE=A0=E7=89=A9Id=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VPet.ModMaker/Models/ModMaker.cs | 3 ++- VPet.ModMaker/Models/ModMakerInfo.cs | 3 +++ VPet.ModMaker/Models/ModModel/ModInfoModel.cs | 18 ++++++++++++++---- VPet.ModMaker/Models/ModModel/PetModel.cs | 11 +++++++++++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/VPet.ModMaker/Models/ModMaker.cs b/VPet.ModMaker/Models/ModMaker.cs index a36830c..2e195ba 100644 --- a/VPet.ModMaker/Models/ModMaker.cs +++ b/VPet.ModMaker/Models/ModMaker.cs @@ -53,7 +53,8 @@ public class ModMaker : MainPlugin foreach (var pet in MW.Pets) { var petModel = new PetModel(); - petModel.Id.Value = pet.Name; + petModel.SourceId = pet.Name; + petModel.Id.Value = pet.Name + " (来自本体)".Translate(); ModMakerInfo.Pets.Add(petModel); } //Maker.ModMaker = this; diff --git a/VPet.ModMaker/Models/ModMakerInfo.cs b/VPet.ModMaker/Models/ModMakerInfo.cs index a6f127f..787adfa 100644 --- a/VPet.ModMaker/Models/ModMakerInfo.cs +++ b/VPet.ModMaker/Models/ModMakerInfo.cs @@ -32,5 +32,8 @@ public static class ModMakerInfo /// public static int GameVersion { get; set; } = 100; + /// + /// 本体的宠物 + /// public static List Pets { get; } = new(); } diff --git a/VPet.ModMaker/Models/ModModel/ModInfoModel.cs b/VPet.ModMaker/Models/ModModel/ModInfoModel.cs index 87296b4..5c589d0 100644 --- a/VPet.ModMaker/Models/ModModel/ModInfoModel.cs +++ b/VPet.ModMaker/Models/ModModel/ModInfoModel.cs @@ -96,7 +96,7 @@ public class ModInfoModel : I18nModel /// /// 宠物 /// - public ObservableCollection Pets { get; } = new(ModMakerInfo.Pets); + public ObservableCollection Pets { get; } = new(); /// /// 其它I18n数据 @@ -139,15 +139,25 @@ public class ModInfoModel : I18nModel LowTexts.Add(new(lowText)); foreach (var selectText in loader.SelectTexts) SelectTexts.Add(new(selectText)); + // 缓存pets + var pets = new List(); foreach (var pet in loader.Pets) { var petModel = new PetModel(pet); - Pets.Add(petModel); + pets.Add(petModel); foreach (var p in pet.path) - { LoadAnime(petModel, p); - } } + // 先载入本体宠物 + foreach (var pet in ModMakerInfo.Pets) + { + // 确保Id不重复 + if (pets.All(i => i.Id.Value != pet.SourceId)) + Pets.Add(pet); + } + // 再载入模组宠物 + foreach (var pet in pets) + Pets.Add(pet); foreach (var lang in loader.I18nDatas) I18nDatas.Add(lang.Key, lang.Value); diff --git a/VPet.ModMaker/Models/ModModel/PetModel.cs b/VPet.ModMaker/Models/ModModel/PetModel.cs index 22e8059..7dacebe 100644 --- a/VPet.ModMaker/Models/ModModel/PetModel.cs +++ b/VPet.ModMaker/Models/ModModel/PetModel.cs @@ -1,6 +1,7 @@ using HKW.HKWViewModels.SimpleObservable; using LinePutScript; using LinePutScript.Converter; +using LinePutScript.Localization.WPF; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -20,6 +21,11 @@ namespace VPet.ModMaker.Models; /// public class PetModel : I18nModel { + /// + /// 显示的Id 若不为空则判断为来自本体的宠物 + /// + public string? SourceId { get; set; } = null; + /// /// Id /// @@ -92,6 +98,7 @@ public class PetModel : I18nModel public PetModel() { + PetNameId.Value = $"{Id.Value}_{nameof(PetNameId)}"; DescriptionId.Value = $"{Id.Value}_{nameof(DescriptionId)}"; Id.ValueChanged += (o, n) => { @@ -208,6 +215,8 @@ public class PetModel : I18nModel /// 路径 public void Save(string path) { + if (SourceId is not null) + Id.Value = SourceId; if (IsSimplePetModel) { SaveSimplePetInfo(path); @@ -242,6 +251,8 @@ public class PetModel : I18nModel anime.Save(petAnimePath); foreach (var anime in FoodAnimes) anime.Save(petAnimePath); + if (SourceId is not null) + Id.Value = SourceId + " (来自本体)".Translate(); } private void SaveSimplePetInfo(string path)