private void ReCalculateDialogGroups() { chatDialogGroups.Clear(); taskDialogGroups.Clear(); for (int i = 0; i < dialogGroups.Count; i++) { DialogGroup dg = dialogGroups [i]; bool normalDg = true; for (int j = 0; j < npc.tasks.Count; j++) { if (!normalDg) { break; } normalDg = normalDg && dg != npc.tasks [j].taskDialogGroup; } if (!normalDg) { taskDialogGroups.Add(dg); } else { chatDialogGroups.Add(dg); } } }
public void SetUpChatPlane() { mainNPCPlane.gameObject.SetActive(false); currentDialogId = 0; DialogGroup dg = null; for (int i = 0; i < currentEnteredNpc.chatDialogGroups.Count; i++) { if (currentEnteredNpc.chatDialogGroups [i].accordGameLevel == currentLevelIndex) { dg = currentEnteredNpc.chatDialogGroups [i]; } } if (dg == null) { Debug.LogError(string.Format("第{0}关没有npc{1}", currentLevelIndex, currentEnteredNpc.npcName)); } currentDialogGroup = dg; SetUpDialogPlane(currentDialogGroup.dialogs [0]); }
public Task(DialogGroup taskDialogGroup, string taskDescription, TaskType taskType, int accordMonsterOrItemId, int accordMonsterOrItemCount, int dialogIdWhenTaskAccomplished, int accordGameLevel) { this.taskDialogGroup = taskDialogGroup; this.taskDescription = taskDescription; this.taskType = taskType; this.accordMonsterOrItemId = accordMonsterOrItemId; this.accordMonsterOrItemCount = accordMonsterOrItemCount; this.dialogIdWhenTaskAccomplished = dialogIdWhenTaskAccomplished; this.accordGameLevel = accordGameLevel; }
private void CreateDialogGroupGUI(DialogGroup dg, List <bool> foldoutList, List <int> rewardTypeCountList) { EditorGUILayout.Separator(); EditorGUILayout.LabelField("************************对话组编辑区*************************", new GUILayoutOption[] { GUILayout.Height(20), GUILayout.Width(600) }); // 对话组对应关卡id编辑行 EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("对话组对应关卡id:", labelLayouts); dg.accordGameLevel = EditorGUILayout.IntField(dg.accordGameLevel, normalInputLayouts); EditorGUILayout.EndHorizontal(); List <Dialog> dialogs = dg.dialogs; // 对话组内部对话编辑区 EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("____"); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); bool createNewDialog = GUILayout.Button("新建对话", new GUILayoutOption[] { GUILayout.Height(20), GUILayout.Width(150) }); bool removeLastDialog = GUILayout.Button("删除尾部对话", new GUILayoutOption[] { GUILayout.Height(20), GUILayout.Width(150) }); EditorGUILayout.EndHorizontal(); if (createNewDialog) { Dialog dialog = new Dialog(); dialogs.Add(dialog); bool foldout = true; foldoutList.Add(foldout); int rewardIdCount = 0; rewardTypeCountList.Add(rewardIdCount); dialog.choices = new List <Choice> { new Choice(), new Choice() }; } if (removeLastDialog && dialogs.Count > 0) { dialogs.RemoveAt(dialogs.Count - 1); foldoutList.RemoveAt(foldoutList.Count - 1); } for (int i = 0; i < dialogs.Count; i++) { Dialog dialog = dialogs [i]; int dialogGroupIndex = dialogGroups.FindIndex(delegate(DialogGroup obj) { return(obj == dg); }); int dialogIndex = 0; for (int j = 0; j < dialogGroupIndex; j++) { dialogIndex += dialogGroups [j].dialogs.Count; } dialogIndex += i; dialog.dialogId = dialogIndex; foldoutList[i] = EditorGUILayout.Foldout(foldoutList[i], "对话编辑区"); if (foldoutList [i]) { CreateDialogGUI(dialog, rewardTypeCountList, i); } } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.LabelField("************************对话组编辑区*************************", new GUILayoutOption[] { GUILayout.Height(20), GUILayout.Width(600) }); EditorGUILayout.Separator(); }
public void OnGUI() { Rect windowRect = npcEditor.position; scrollPos = EditorGUILayout.BeginScrollView(scrollPos, new GUILayoutOption[] { GUILayout.Height(windowRect.height), GUILayout.Width(windowRect.width) }); EditorGUILayout.LabelField("please input information of npc"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("npc数据源", labelLayouts); rect = EditorGUILayout.GetControlRect(GUILayout.Width(300)); npcDataPath = EditorGUI.TextField(rect, npcDataPath); //如果鼠标正在拖拽中或拖拽结束时,并且鼠标所在位置在文本输入框内 if ((UnityEngine.Event.current.type == UnityEngine.EventType.DragUpdated || UnityEngine.Event.current.type == UnityEngine.EventType.DragExited) && rect.Contains(UnityEngine.Event.current.mousePosition)) { //改变鼠标的外表 DragAndDrop.visualMode = DragAndDropVisualMode.Generic; if (DragAndDrop.paths != null && DragAndDrop.paths.Length > 0) { npcDataPath = DragAndDrop.paths [0]; } } EditorGUILayout.EndHorizontal(); bool loadNpcData = GUILayout.Button("加载npc数据", new GUILayoutOption[] { GUILayout.Height(20), GUILayout.Width(150) }); if (loadNpcData) { dialogGroups.Clear(); chatDialogGroups.Clear(); taskDialogGroups.Clear(); dialogGroupFoldoutList.Clear(); dialogFoldoutList.Clear(); rewardTypeCountList.Clear(); taskFoldoutList.Clear(); string npcDataFileName = Path.GetFileName(npcDataPath); npcDataPath = string.Format("{0}/NPCs/{1}", CommonData.originDataPath, npcDataFileName); string npcTypeStr = npcDataFileName.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries)[0]; npc = DataHandler.LoadDataToSingleModelWithPath <MyNpc> (npcDataPath); switch (npcTypeStr) { case "Normal": npcType = NPCType.Normal; break; case "Trader": npcType = NPCType.Trader; goodsIdsInString = TransferGoodsIdsToString(npc); break; } Debug.Log(npcDataPath); for (int i = 0; i < npc.chatDialogGroups.Count; i++) { dialogGroups.Add(npc.chatDialogGroups [i]); chatDialogGroups.Add(npc.chatDialogGroups [i]); bool foldout = false; dialogGroupFoldoutList.Add(foldout); List <bool> foldoutList = new List <bool> (); dialogFoldoutList.Add(foldoutList); List <int> rewardTypeCounts = new List <int> (); rewardTypeCountList.Add(rewardTypeCounts); for (int j = 0; j < npc.chatDialogGroups [i].dialogs.Count; j++) { Dialog d = npc.chatDialogGroups [i].dialogs [j]; bool dialogFoldout = false; foldoutList.Add(dialogFoldout); rewardTypeCounts.Add(d.rewardIds.Length); } } for (int i = 0; i < npc.tasks.Count; i++) { dialogGroups.Add(npc.tasks [i].taskDialogGroup); bool foldout = false; taskFoldoutList.Add(foldout); dialogGroupFoldoutList.Add(dialogGroupFoldout); List <bool> foldoutList = new List <bool> (); dialogFoldoutList.Add(foldoutList); List <int> rewardTypeCounts = new List <int> (); rewardTypeCountList.Add(rewardTypeCounts); for (int j = 0; j < npc.tasks [i].taskDialogGroup.dialogs.Count; j++) { Dialog d = npc.tasks [i].taskDialogGroup.dialogs [j]; bool dialogFoldout = false; foldoutList.Add(dialogFoldout); rewardTypeCounts.Add(d.rewardIds.Length); } } for (int i = 0; i < npc.attachedFunctions.Length; i++) { if (npc.attachedFunctions [i] == NPCAttachedFunctionType.SkillPromotion) { skillPromotionFunction = true; } if (npc.attachedFunctions [i] == NPCAttachedFunctionType.PropertyPromotion) { propertyPromotionFunction = true; } if (npc.attachedFunctions [i] == NPCAttachedFunctionType.Task) { taskFunction = true; } if (npc.attachedFunctions [i] == NPCAttachedFunctionType.CharactersTrade) { characterTradeFunction = true; } } } CreateNPCBaseInformationGUI(); EditorGUILayout.BeginHorizontal(); bool createNewDialogGroup = GUILayout.Button("新建对话组", new GUILayoutOption[] { GUILayout.Height(20), GUILayout.Width(200) }); bool removeLastDialogGroup = GUILayout.Button("删除尾部对话组", new GUILayoutOption[] { GUILayout.Height(20), GUILayout.Width(200) }); EditorGUILayout.EndHorizontal(); if (createNewDialogGroup) { DialogGroup chatDialogGroup = new DialogGroup(); dialogGroups.Add(chatDialogGroup); bool foldout = true; dialogGroupFoldoutList.Add(foldout); List <bool> foldoutList = new List <bool> (); dialogFoldoutList.Add(foldoutList); List <int> rewardTypeCounts = new List <int> (); rewardTypeCountList.Add(rewardTypeCounts); ReCalculateDialogGroups(); } if (removeLastDialogGroup && chatDialogGroups.Count > 0) { DialogGroup dg = chatDialogGroups [chatDialogGroups.Count - 1]; int index = dialogGroups.FindIndex(delegate(DialogGroup obj) { return(obj == dg); }); dialogGroupFoldoutList.RemoveAt(index); dialogFoldoutList.RemoveAt(index); rewardTypeCountList.RemoveAt(index); chatDialogGroups.Remove(dg); dialogGroups.Remove(dg); ReCalculateDialogGroups(); } for (int i = 0; i < chatDialogGroups.Count; i++) { DialogGroup dg = chatDialogGroups [i]; int index = dialogGroups.FindIndex(delegate(DialogGroup obj) { return(obj == dg); }); List <bool> currentDialogFoldoutList = dialogFoldoutList [index]; List <int> currentDialogRewardTypeCountList = rewardTypeCountList [index]; dialogGroupFoldoutList [index] = EditorGUILayout.Foldout(dialogGroupFoldoutList [index], "对话组编辑区"); if (dialogGroupFoldoutList [index]) { CreateDialogGroupGUI(dg, currentDialogFoldoutList, currentDialogRewardTypeCountList); } } EditorGUILayout.BeginHorizontal(); bool createNewTask = GUILayout.Button("新建任务", new GUILayoutOption[] { GUILayout.Height(20), GUILayout.Width(200) }); bool removeLastTask = GUILayout.Button("删除尾部任务", new GUILayoutOption[] { GUILayout.Height(20), GUILayout.Width(200) }); EditorGUILayout.EndHorizontal(); if (createNewTask) { Task task = new Task(); npc.tasks.Add(task); DialogGroup taskDialogGroup = new DialogGroup(); dialogGroups.Add(taskDialogGroup); task.taskDialogGroup = taskDialogGroup; bool foldout = true; taskFoldoutList.Add(foldout); dialogGroupFoldoutList.Add(dialogGroupFoldout); List <bool> foldoutList = new List <bool> (); dialogFoldoutList.Add(foldoutList); List <int> rewardIdsCount = new List <int> (); rewardTypeCountList.Add(rewardIdsCount); ReCalculateDialogGroups(); } if (removeLastTask && npc.tasks.Count > 0) { Task task = npc.tasks [npc.tasks.Count - 1]; npc.tasks.RemoveAt(npc.tasks.Count - 1); taskFoldoutList.RemoveAt(taskFoldoutList.Count - 1); int index = dialogGroups.FindIndex(delegate(DialogGroup obj) { return(obj == task.taskDialogGroup); }); dialogGroupFoldoutList.RemoveAt(index); dialogFoldoutList.RemoveAt(index); rewardTypeCountList.RemoveAt(index); taskDialogGroups.Remove(task.taskDialogGroup); dialogGroups.Remove(task.taskDialogGroup); ReCalculateDialogGroups(); } for (int i = 0; i < npc.tasks.Count; i++) { Task task = npc.tasks [i]; taskFoldoutList [i] = EditorGUILayout.Foldout(taskFoldoutList [i], "任务编辑区"); if (taskFoldoutList [i]) { CreateTaskGUI(task); } } // EditorGUILayout.Separator (); // EditorGUILayout.LabelField ("************************结束*************************", new GUILayoutOption[] { // GUILayout.Height (20), // GUILayout.Width (600) // }); bool saveNpcData = GUILayout.Button("保存NPC数据", new GUILayoutOption[] { GUILayout.Width(500), GUILayout.Height(20) }); if (saveNpcData) { SaveNpcData(); } EditorGUILayout.EndScrollView(); }