/// <summary> /// 自分自身のクローンを作成しDialogエントリーを返す。 /// </summary> /// <returns>Dialogエントリー</returns> public UapDialogEntry Clone() { var uapDialogEntry = new UapDialogEntry(this.LineID, this.Character); foreach (var data in this.LanguageEntries.Values) { uapDialogEntry.LanguageEntries.Add(data.LangCode, data); } return(uapDialogEntry); }
/// <summary> /// Dialogエントリーを追加し、そのエントリーを返す。 /// </summary> /// <param name="entry">Dialogエントリー</param> /// <returns>追加されたDialogエントリー</returns> public UapDialogEntry AddEntry(UapDialogEntry entry) { if (this.Items.ContainsKey(entry.LineID)) { throw new Exception($"Duplicate dialog entry({entry.LineID}). FileName({this.FileID})"); } else { this.Items.Add(entry.LineID, entry); return(entry); } }
/// <summary> /// DialogエントリーをStreamに書き出す。 /// </summary> /// <param name="entry">Dialogエントリー</param> /// <param name="bw">Stream</param> private static void WriteEntry(UapDialogEntry entry, BinaryWriter bw) { UapBinaryUtils.WriteString(bw, entry.LineID); UapBinaryUtils.WriteString(bw, entry.Character); bw.Write(entry.LanguageEntries.Count); foreach (var lang in entry.LanguageEntries.Values) { bw.Write(lang.LangCode); UapBinaryUtils.WriteString(bw, lang.Text); UapBinaryUtils.WriteString(bw, lang.Clip); bw.Write(lang.Vol); } }
/// <summary> /// Streamからデータを読み込み、Dialogエントリー返す。 /// </summary> /// <param name="br">Stream</param> /// <returns>Dialogエントリー</returns> private static UapDialogEntry ReadEntry(BinaryReader br) { var lineID = UapBinaryUtils.ReadString(br); var character = UapBinaryUtils.ReadString(br); var result = new UapDialogEntry(lineID, character); var size = br.ReadInt32(); for (int i = 0; i < size; i++) { var langCode = br.ReadInt32(); var text = UapBinaryUtils.ReadString(br); var clip = UapBinaryUtils.ReadString(br); float vol = br.ReadSingle(); result.AddEntry(langCode, text, clip, vol); } return(result); }