1
This commit is contained in:
70
Src/Unity/Scripts/UX/SnackBar/UXSnackBar.cs
Normal file
70
Src/Unity/Scripts/UX/SnackBar/UXSnackBar.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using BITKit;
|
||||
using BITKit.Tween;
|
||||
using BITKit.UX;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Net.BITKit.UX.SnackBar
|
||||
{
|
||||
public class UXSnackBar<TPanel> : UIToolkitSubPanel<TPanel>,ISnackBar where TPanel :IUXPanel
|
||||
{
|
||||
[UXBindPath("snack_bar-container")] private VisualElement _snackBarContainer;
|
||||
|
||||
private VisualTreeAsset _template;
|
||||
|
||||
private readonly ValidHandle _waitHandle = new ValidHandle();
|
||||
|
||||
public UXSnackBar(IServiceProvider serviceProvider) : base(serviceProvider)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnInitiated()
|
||||
{
|
||||
base.OnInitiated();
|
||||
_template = _snackBarContainer.Q<TemplateContainer>().templateSource;
|
||||
|
||||
_snackBarContainer.Clear();
|
||||
|
||||
BITAppForUnity.AllowCursor.AddListener(OnAllowCursor);
|
||||
}
|
||||
|
||||
private void OnAllowCursor(bool obj)
|
||||
{
|
||||
if (obj)
|
||||
{
|
||||
_waitHandle.AddElement(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
_waitHandle.RemoveElement(this);
|
||||
}
|
||||
}
|
||||
|
||||
public async void Add(string message, Severity severity = Severity.Normal)
|
||||
{
|
||||
var ve = _snackBarContainer.Create(_template);
|
||||
|
||||
ve.AddToClassList($"severity-{severity.ToString().ToLower()}");
|
||||
|
||||
ve.Get<Label>().text = message;
|
||||
|
||||
if (ve.Q("VisualElement--1") is { } bar)
|
||||
{
|
||||
await BITween.Lerp(x => bar.style.width = new StyleLength(Length.Percent(x)), 0f, 100, 5, Mathf.Lerp);
|
||||
}
|
||||
else
|
||||
{
|
||||
await UniTask.Delay(5000);
|
||||
}
|
||||
|
||||
await _waitHandle;
|
||||
|
||||
ve.RemoveFromHierarchy();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user