#if UNITY_2021_1_OR_NEWER // Copyright (c) Pixel Crushers. All rights reserved. using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; namespace PixelCrushers.DialogueSystem.UIToolkit { /// /// Top-level dialogue panel for UIToolkitDialogueUI. Manages subtitle panels and response menus. /// [Serializable] public class UIToolkitDialogueElements : AbstractDialogueUIControls { [SerializeField] private UIDocument document; [Tooltip("Name of document's root container.")] [SerializeField] private string rootContainerName; [SerializeField] private string dialoguePanelName; [Tooltip("Index (starting from 0) into Subtitle Panel Elements of the default NPC subtitle panel.")] [SerializeField] int npcSubtitlePanelIndex = 0; [Tooltip("Index (starting from 0) into Subtitle Panel Elements of the default PC subtitle panel.")] [SerializeField] int pcSubtitlePanelIndex = 1; [SerializeField] private List subtitlePanelElements; [SerializeField] private UIToolkitResponseMenuElements responseMenuElements; public List SubtitlePanelElements => subtitlePanelElements; public UIToolkitSubtitleElements NPCSubtitleElements => GetSubtitleElements(npcSubtitlePanelIndex); public UIToolkitSubtitleElements PCSubtitleElements => GetSubtitleElements(pcSubtitlePanelIndex); public UIToolkitSubtitleElements GetSubtitleElements(int index) { return (0 <= index && index < subtitlePanelElements.Count) ? subtitlePanelElements[index] : null; } protected UIDocument Document => document; protected VisualElement RootContainer => UIToolkitDialogueUI.GetVisualElement(Document, rootContainerName); protected VisualElement DialoguePanel => UIToolkitDialogueUI.GetVisualElement(Document, dialoguePanelName); public override AbstractUISubtitleControls npcSubtitleControls => NPCSubtitleElements; public override AbstractUISubtitleControls pcSubtitleControls => NPCSubtitleElements; public override AbstractUIResponseMenuControls responseMenuControls => responseMenuElements; public void Initialize(System.Action clickedContinueAction, System.Action clickedResponseAction) { responseMenuElements.Initialize(Document, clickedResponseAction); subtitlePanelElements.ForEach(x => x.Initialize(Document, clickedContinueAction)); } public override void ShowPanel() { UIToolkitDialogueUI.SetInteractable(RootContainer, false); UIToolkitDialogueUI.SetDisplay(DialoguePanel, true); } public override void SetActive(bool value) { UIToolkitDialogueUI.SetInteractable(RootContainer, value); UIToolkitDialogueUI.SetDisplay(DialoguePanel, value); base.SetActive(value); } } } #endif