-
Sven Gerlach authoredSven Gerlach authored
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;
}
}
}
}