This commit is contained in:
CortexCore
2024-03-31 23:31:00 +08:00
parent e179d2eb53
commit b7b89ee71a
641 changed files with 31286 additions and 22134 deletions

View File

@@ -0,0 +1,70 @@
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace BITKit.UX
{
[Serializable]
public struct UXBarDictionary:IUXBarService
{
public static readonly ConcurrentDictionary<string, IUXBarService> BarDictionary =new();
[SerializeReference, SubclassSelector] private IReference path;
public void SetOrCreate(int id, string name, float value, object data = null)
{
BarDictionary[path.Value].SetOrCreate(id, name, value, data);
}
public void Remove(int id)
{
BarDictionary[path.Value].Remove(id);
}
}
public class UXBarService : MonoBehaviour, IUXBarService
{
[SerializeField] private UIDocument document;
[SerializeReference, SubclassSelector] private IReference path;
[SerializeReference, SubclassSelector] private IReference containerPath;
[SerializeField] private VisualTreeAsset template;
private VisualElement _container;
private readonly ConcurrentDictionary<int, UXContainer> _bars = new();
private void Start()
{
_container = document.rootVisualElement.Q<VisualElement>(containerPath.Value);
_container.Clear();
UXBarDictionary.BarDictionary.GetOrAdd(path.Value, this);
destroyCancellationToken.Register(() =>
{
UXBarDictionary.BarDictionary.TryRemove(path.Value, out _);
});
}
public void SetOrCreate(int id, string name, float value, object data = null)
{
var bar = _bars.GetOrAdd(id, Create);
var label = bar.Get<Label>(0);
if(label is not null)
label.text = name;
bar.SetProcess(value);
}
private UXContainer Create(int arg)
{
var element = new UXContainer(_container.Create(template));
return element;
}
public void Remove(int id)
{
if (_bars.TryRemove(id, out var bar))
{
bar.visualElement.RemoveFromHierarchy();
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 13a0fd39c05238f4e8537e85e254f541
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: