Skip to content
Snippets Groups Projects
WorldSpaceDialogueBox.cs 2.81 KiB
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;
            }
        }
    }
}