using UnityEditor; using System.Collections.Generic; using Articy.Unity; using Articy.Unity.Interfaces; using Articy.Unity.Utils; using UnityEngine; using System.Collections; using UnityEngine.EventSystems; using UnityEngine.UIElements; [RequireComponent(typeof(UIDocument))] public class DialogueBox : MonoBehaviour { private UIDocument uiDocument; private VisualElement root; private Button[] buttons; public VisualTreeAsset visualTree; public StyleSheet styleSheet; public string defaultButtonText = "Continue"; public void Awake() { uiDocument = GetComponent<UIDocument>(); } public void OnEnable() { root = uiDocument.rootVisualElement; VisualElement tree = visualTree.CloneTree(); tree.styleSheets.Add(styleSheet); root.Add(tree); buttons = root.Query<Button>().ToList().ToArray(); ClearUI(); for (var i = 0; i < buttons.Length; i++) { var index = i; buttons[i].RegisterCallback<MouseUpEvent>(_ => GetComponent<ArticyStoryline>().ApplyTransition(index)); } } public void ClearUI() { SetActor(string.Empty); SetText(string.Empty); foreach (var button in buttons) { button.visible = false; } } public void SetActor(string actor) { root.Q<Label>("Actor").text = actor; } public void SetText(string text) { root.Q<TextElement>("Dialogue").text = text; } public void SetTransitions(IList<Branch> branches) { for (var i = 0; i < buttons.Length; i++) { buttons[i].text = string.Empty; if (i < branches.Count) { buttons[i].visible = true; var menuText = branches[i].Target as IObjectWithMenuText; if (menuText != null && menuText.MenuText != string.Empty) { buttons[i].text = menuText.MenuText; } else { buttons[i].text = defaultButtonText; } } else { buttons[i].visible = false; } } } }