private static void CreateChatterInfo(string ctext, MieChatterNodeInfo mieChatterInfo, MieFileList fileList) { //// デシリアライズ var oeChatter = JsonConvert.DeserializeObject <MieOEChatter>(ctext); foreach (var chatterFile in oeChatter.ChatterFiles) { var fileID = chatterFile.Filename.Replace(".chatter", string.Empty); //// FileIDを統一形式に変換する。 fileID = MieFileUtils.ConvertFileIDToCommon(fileID); fileID = MieStringUtils.NormalizedFileID(fileID); MieChatterNodeFile chatterNodeFile = null; var fileCode = fileList.GetHashByFileID(fileID); if (fileCode == 0) { //// 言語情報から生成されたFileListに含まれないものは無視する。 continue; } else { chatterNodeFile = new MieChatterNodeFile(fileCode); mieChatterInfo.AddFile(chatterNodeFile); } foreach (var node in chatterFile.Nodes) { var dataType = node.MieChatterNodeDataTypeTag; var nodeID = node.NodeID; var isQuestionNode = node.IsQuestionNode; bool isRootNode = node.NodeID == 0 ? true : false; //// チャッターエントリー MieChatterNodeEntry.NNodeType nodeType = MieChatterNodeEntry.NNodeType.Unknown; MieChatterNodeEntry nodeEntry = new MieChatterNodeEntry(nodeType, nodeID, isRootNode); chatterNodeFile.AddFlatNodeEntry(nodeEntry); //// Link情報の登録 foreach (var link in node.Links) { MieChatterLink mieChatterLink = new MieChatterLink(link.FromNodeID, link.ToNodeID); chatterNodeFile.AddLinkEntry(mieChatterLink); } } } }
/// <summary> /// クエスト付加情報ファイルを読み込み、クエストノード情報を返す。 /// クエスト付加情報は1ファイルの中に複数ファイルの情報が格納されている。 /// </summary> /// <param name="path">クエスト付加情報ファイルのパス</param> /// <param name="fileList">FileList</param> /// <returns>クエストノード情報</returns> public static MieQuestsNodeInfo LoadFromJson(string path, MieFileList fileList) { MieQuestsNodeInfo mieQuestsNodeInfo = new MieQuestsNodeInfo(); string jtext = LoadJson(path); jtext = jtext.Replace("$type", "MieQuestsNodeDataTypeTag"); var oeQuests = JsonConvert.DeserializeObject <MieOEQuests>(jtext); foreach (var questFile in oeQuests.Quests) { var questTypeNumber = questFile.QuestType; //// QuestsFileの処理 MieQuestsNodeFile mieQuestsNodeFile = null; var fileID = questFile.Filename.Replace(".quest", string.Empty); //// FileIDを統一形式に変換する。 fileID = MieFileUtils.ConvertFileIDToCommon(fileID); fileID = MieStringUtils.NormalizedFileID(fileID); var fileCode = fileList.GetHashByFileID(fileID); if (fileCode == 0) { //// 言語情報から生成されたFileListに含まれないものは無視する。 continue; } else { mieQuestsNodeFile = new MieQuestsNodeFile(fileCode); mieQuestsNodeInfo.AddFile(mieQuestsNodeFile); } //// QuestEntryの処理 foreach (var node in questFile.Nodes) { var nodeType = GetQuestNodeDataTypeTag(node.MieQuestsNodeDataTypeTag); bool isRootNode = node.NodeID == 0 ? true : false; var questsNode = new MieQuestsNodeEntry( nodeType, node.NodeID, isRootNode); mieQuestsNodeFile.AddFlatNodeEntry(questsNode); //// EndStatusNodeを追加する。 AddEndStatusNode(mieQuestsNodeFile, node); //// リンク情報作成 foreach (var link in node.Links) { MieQuestsLink mieQuestsLinks = new MieQuestsLink(link.FromNodeID, link.ToNodeID); mieQuestsNodeFile.AddLinkEntry(mieQuestsLinks); } } mieQuestsNodeFile.BuildLink(); mieQuestsNodeFile.UpdateDepth(); } return(mieQuestsNodeInfo); }
/// <summary> /// JSON形式の会話ファイルを読み込み、会話ファイルを返す。 /// [非OE DLL] /// </summary> /// <param name="path">会話ファイルのパス</param> /// <param name="fileList">FileLIst</param> /// <returns>会話ファイル</returns> private static MieConversationNodeFile LoadFromJson(string path, MieFileList fileList) { MieConversationNodeFile mieConversationsFile = null; var ctext = LoadJson(path); ctext = ctext.Replace("$type", "MieFlowChartsDataTypeTag"); var oeConversations = JsonConvert.DeserializeObject <MieOEConversations>(ctext); foreach (var conv in oeConversations.Conversations) { var fileID = conv.Filename.Replace(".conversation", string.Empty); //// FileIDを統一形式に変換する。 fileID = MieFileUtils.ConvertFileIDToCommon(fileID); fileID = MieStringUtils.NormalizedFileID(fileID); var fileCode = fileList.GetHashByFileID(fileID); if (fileCode == 0) { //// 言語情報から生成されたFileListに含まれないものは無視する。 continue; } else { mieConversationsFile = new MieConversationNodeFile(fileCode); } //// ノード情報作成 foreach (var node in conv.Nodes) { var nodeType = GetFlowChartsDataTypeTag(node.MieFlowChartsDataTypeTag); MieConversationNodeEntry conversationNode = null; Guid speakerGuid; if (node.SpeakerGuid == null) { speakerGuid = default(Guid); } else { speakerGuid = new Guid(node.SpeakerGuid); } Guid listenerGuid; if (node.ListenerGuid == null) { listenerGuid = default(Guid); } else { listenerGuid = new Guid(node.ListenerGuid); } //// Root node は NodeIDで判断する。 conversationNode = new MieConversationNodeEntry( nodeType, node.NodeID, speakerGuid, listenerGuid, node.NodeID == 0 ? true : false, node.IsQuestionNode); //// リンク情報作成 foreach (var link in node.Links) { MieConversationLink mieConversationLinks = new MieConversationLink(link.FromNodeID, link.ToNodeID); mieConversationsFile.AddLinkEntry(mieConversationLinks); } mieConversationsFile.AddFlatNodeEntry(conversationNode); } //// キャラクターマップ情報作成 foreach (var map in conv.CharacterMappings) { MieCharacterMapEntry mapEntry = new MieCharacterMapEntry(new Guid(map.Guid)); mieConversationsFile.AddCharacterMapEntry(mapEntry); } } if (mieConversationsFile != null) { mieConversationsFile.BuildLink(); mieConversationsFile.UpdateDepth(); } return(mieConversationsFile); }