/// <summary> /// スピーカー属性ファイルを読み込みキャラクター属性に追加する。 /// </summary> /// <param name="charAttributeFile">キャラクター属性</param> /// <param name="path">スピーカー属性ファイル</param> public static void AppendSpeakerAttribute(MieCharacterAttributeFile charAttributeFile, string path) { if (!File.Exists(path)) { var msg = $"File not found."; throw new FileNotFoundException("File not found. path", path); } string jtext = File.ReadAllText(path, Encoding.UTF8); //// JSON中の"$type"はデシリアライズできないため、"MieGameDataTypeTag"にリネームして処理する。詳細はwiki参照。 jtext = jtext.Replace("$type", "MieGameDataTypeTag"); //// デシリアライズ var oeSpeakers = JsonConvert.DeserializeObject <MieOESpeakers>(jtext); foreach (var gameDataObject in oeSpeakers.GameDataObjects) { var tag = GetGameDataTypeTag(gameDataObject.MieGameDataTypeTag); switch (tag) { case "SpeakerGameData": var component = gameDataObject.Components[0]; //// スピーカー属性 var gender = GetGender(component.Gender); MieSpeakerAttributeEntry attrEntry = new MieSpeakerAttributeEntry(new Guid(gameDataObject.ID), gameDataObject.DebugName, gender); charAttributeFile.AddSpeakerEntry(attrEntry); break; default: continue; } } }
public static void LoadFromSystemDB(MieSystemDB systemDB, MieCharacterAttributeFile charAttr) { SQLiteCommand command = systemDB.Connection.CreateCommand(); command.CommandText = @"SELECT * FROM SpeakerAttributes;"; using (SQLiteDataReader sdr = command.ExecuteReader()) { while (sdr.Read() == true) { var byteID = (byte[])sdr["ID"]; var name = (string)sdr["Name"]; var intGender = (long)sdr["Gender"]; Guid id = new Guid(byteID); MieCharacterAttributeFile.NGender gender = (MieCharacterAttributeFile.NGender)Enum.ToObject(typeof(MieCharacterAttributeFile.NGender), intGender); MieSpeakerAttributeEntry speakerEntry = new MieSpeakerAttributeEntry(id, name, gender); charAttr.AddSpeakerEntry(speakerEntry); } } }