/// <summary> /// 绘制对话Text /// </summary> /// <param name="dialogue"></param> /// <param name="index"></param> private void DrawDialogueText(ScenarioDialogue dialogue, int index) { GUILayout.Space(8); EditorGUILayout.LabelField("Text", EditorStyles.boldLabel); PBEditorUtils.DrawCustomTextArea(ref dialogue.text, "", 0, m_target, 48); OnDialogueTextGUI(dialogue, index); GUILayout.Space(8); // DrawScenarioText(dialogue.text, 6); }
private void DrawCommandGroup(ScenarioDialogue dialogue, int index) { GUILayout.Space(5); Rect rect = EditorGUILayout.BeginVertical(GUILayout.ExpandWidth(true)); rect.width += 9; rect.height += 8; rect.x -= 6; rect.y -= 4; GUI.Box(rect, ""); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Commands", EditorStyles.boldLabel); EditorGUI.BeginChangeCheck(); int _count = EditorGUILayout.DelayedIntField(dialogue.commands.Count, GUILayout.Width(42)); if (EditorGUI.EndChangeCheck()) { PBEditorUtils.ChangeListLength(dialogue.commands, _count, m_target); } EditorGUILayout.EndHorizontal(); for (int i = 0; i < dialogue.commands.Count; i++) { Rect contextRect = DrawCommandItem(dialogue.commands[i], i); PBEditorUtils.ShowContextMenu(contextRect, () => { GenericMenu menu = new GenericMenu(); menu.AddDisabledItem(new GUIContent("Command")); menu.AddSeparator(""); menu.AddItem(new GUIContent("Add"), false, (object idx) => { Undo.RecordObject(m_target, "Add Command"); dialogue.commands.Insert((int)idx + 1, new ScenarioDialogue.Command()); }, i); menu.AddItem(new GUIContent("Delete"), false, (object idx) => { Undo.RecordObject(m_target, "Delete Command"); dialogue.commands.RemoveAt((int)idx); }, i); menu.ShowAsContext(); }); } EditorGUILayout.EndVertical(); }
protected virtual void OnDialogueTextGUI(ScenarioDialogue dialogue, int index) { }
/// <summary> /// 绘制子项 /// </summary> /// <param name="dialogue"></param> /// <param name="index"></param> private void DrawDialogueItem(ScenarioDialogue dialogue, int index) { bool foldOut = GetItemFoldOut(m_dialogueItemFoldOuts, index); if (foldOut) { GUILayout.Space(10); } GUILayout.Space(5); Rect rect = EditorGUILayout.BeginVertical(GUILayout.ExpandWidth(true)); rect.width += 12; rect.height += 10; rect.x -= 9; rect.y -= 4; GUI.Box(rect, ""); //是否展开 SetItemFoldOut(m_dialogueItemFoldOuts, index, EditorGUILayout.Foldout(GetItemFoldOut(m_dialogueItemFoldOuts, index), "", true, EditorStyles.label)); Rect dialogueDisplayRect = new Rect(rect); dialogueDisplayRect.x += 20; dialogueDisplayRect.width -= 30; dialogueDisplayRect.height = 18; dialogueDisplayRect.y += 5; GUI.Label(dialogueDisplayRect, new GUIContent(m_target.GetLocalText(dialogue.text), m_target.GetLocalText(dialogue.text))); Rect menuRect = new Rect(rect); menuRect.height = 25; PBEditorUtils.ShowContextMenu(menuRect, () => { GenericMenu menu = new GenericMenu(); menu.AddDisabledItem(new GUIContent("Dialogue")); menu.AddSeparator(""); menu.AddItem(new GUIContent("Add"), false, OnMenuAddDialogueItem, index + 1); menu.AddItem(new GUIContent("Insert"), false, OnMenuAddDialogueItem, index); menu.AddItem(new GUIContent("Duplicate"), false, OnMenuInsertDialogueItem, index); menu.AddItem(new GUIContent("Delete"), false, OnMenuDeleteDialogueItem, dialogue); menu.ShowAsContext(); }); if (foldOut) { //绘制内部内容 Rect subRect = new Rect(rect); subRect.width -= 3; //subRect.height += 10; subRect.x += 3; subRect.y += 32; subRect.height -= 50; GUI.Box(subRect, ""); GUILayout.Space(15); PBEditorUtils.DrawCustomText(ref dialogue.key, "Key", customLabelWith, m_target); Rect lineRect = new Rect(subRect); lineRect.height = 2; lineRect.y += 24; GUI.Box(lineRect, ""); DrawCharacterGroup(dialogue, index); DrawDialogueText(dialogue, index); DrawSelectionGroup(dialogue, index); DrawCommandGroup(dialogue, index); OnDialogueItemGUI(dialogue, index); GUILayout.Space(3); } EditorGUILayout.EndVertical(); GUILayout.Space(5); if (foldOut) { GUILayout.Space(10); } }