80 lines
2.0 KiB
C#
80 lines
2.0 KiB
C#
|
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<VisualElement>(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<string,List<string>> _Prompts=new();
|
||
|
private static readonly ConcurrentDictionary<string, UXContainer> _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();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|