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; public class WorldSpaceDialogueBox : MonoBehaviour { private UIDocument uiDocument; [SerializeField] protected VisualTreeAsset visualTree; [SerializeField] protected StyleSheet styleSheet; [SerializeField] Katas.Experimental.WorldSpaceUIDocument worldSpaceUIDocument; private VisualElement root; public Button[] buttons; public string defaultButtonText = "Continue"; public void Awake() { worldSpaceUIDocument.onUIDocumentReady.AddListener(setUIDocument); } public void Update() { if (Input.GetKeyDown("space") && root != null) { Debug.Log(root.Q<Label>("Actor").style.fontSize); Debug.Log(root.Q<TextElement>("Dialogue").style.fontSize); } } private void setUIDocument() { uiDocument = GetComponent<UIDocument>(); 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<WorldSpaceArticyStoryline>().ApplyTransition(index)); } } public void ClearUI() { SetActor(string.Empty); SetText(string.Empty); for (var i = 0; i < buttons.Length; i++) buttons[i].style.display = DisplayStyle.None; } public void SetActor(string actor) { root.Q<Label>("Actor").text = actor; } public void SetActorFontSize(float size) { root.Q<Label>("Actor").style.fontSize = size; } public void SetText(string text) { root.Q<TextElement>("Dialogue").text = text; } public void SetTextFontSize(float size) { root.Q<TextElement>("Dialogue").style.fontSize = size; } 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].style.display = DisplayStyle.Flex; 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].style.display = DisplayStyle.None; } } } }