BITFALL/Assets/Artists/Scripts/UX/UXOnScreenPrompts.cs

80 lines
2.0 KiB
C#
Raw Normal View History

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();
}
}
}