using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Runtime.InteropServices; using BITKit; using BITKit.UX; using UnityEngine; using UnityEngine.UIElements; namespace BITFALL.UX { public class UXOnScreenPrompts : MonoBehaviour { [RuntimeInitializeOnLoadMethod] private static void Reload() { _Prompts.Clear(); _OnScreenPrompts.Clear(); } public static void Get(string path,string text) { var list =_Prompts.GetOrCreate(path); list.TryAdd(text); var label = _OnScreenPrompts.GetOrAdd(path,CreateLabel); label.visualElement.SetActive(true); label.contextLabel.text = string.Join("\\",list); } public static void Release(string path, string text) { var list = _Prompts.GetOrCreate(path); list.TryRemove(text); var label = _OnScreenPrompts.GetOrAdd(path, CreateLabel); if (list.Count is 0) { label.visualElement.SetActive(false); } } public static void Release(string path) { var list = _Prompts.GetOrCreate(path); list.Clear(); var label = _OnScreenPrompts.GetOrAdd(path, CreateLabel); label.visualElement.SetActive(false); } private static UXContainer CreateLabel(string arg) { var clone = RootVisualElement.Create(VisualTreeAsset.CloneTree); var label =new UXContainer(clone); label.titleLabel.text = arg; return label; } private static VisualElement RootVisualElement; private static VisualTreeAsset VisualTreeAsset; private static readonly ConcurrentDictionary> _Prompts=new(); private static readonly ConcurrentDictionary _OnScreenPrompts = new(); [SerializeField] private UIDocument document; [SerializeField] private VisualTreeAsset visualTreeAsset; [UXBindPath("prompts-container")] private VisualElement container; private void Start() { BITKit.UX.UXUtils.Inject(this); RootVisualElement = container; VisualTreeAsset = visualTreeAsset; container.Clear(); } } }