56 lines
1.6 KiB
C#
56 lines
1.6 KiB
C#
|
|
using UnityEngine;
|
||
|
|
using UnityEngine.UIElements;
|
||
|
|
using PrimeTween;
|
||
|
|
using System.Threading.Tasks;
|
||
|
|
|
||
|
|
namespace Hallucinate.UI
|
||
|
|
{
|
||
|
|
public abstract class BaseUIController
|
||
|
|
{
|
||
|
|
protected VisualElement root;
|
||
|
|
protected UIManager uiManager;
|
||
|
|
|
||
|
|
public virtual void Initialize(VisualElement uxmlRoot, UIManager manager)
|
||
|
|
{
|
||
|
|
root = uxmlRoot;
|
||
|
|
uiManager = manager;
|
||
|
|
|
||
|
|
// Default to hidden
|
||
|
|
Hide();
|
||
|
|
}
|
||
|
|
|
||
|
|
public virtual void Show()
|
||
|
|
{
|
||
|
|
if (root != null)
|
||
|
|
root.style.display = DisplayStyle.Flex;
|
||
|
|
}
|
||
|
|
|
||
|
|
public virtual void Hide()
|
||
|
|
{
|
||
|
|
if (root != null)
|
||
|
|
root.style.display = DisplayStyle.None;
|
||
|
|
}
|
||
|
|
|
||
|
|
public virtual async Task PlayTransitionIn()
|
||
|
|
{
|
||
|
|
if (root == null) return;
|
||
|
|
|
||
|
|
Show();
|
||
|
|
// Fly-in from right using Custom tween for style.translate
|
||
|
|
root.style.translate = new StyleTranslate(new Translate(Length.Percent(100), 0));
|
||
|
|
await Tween.Custom(100f, 0f, duration: 0.5f, ease: Ease.OutBack,
|
||
|
|
onValueChange: val => root.style.translate = new StyleTranslate(new Translate(Length.Percent(val), 0)));
|
||
|
|
}
|
||
|
|
|
||
|
|
public virtual async Task PlayTransitionOut()
|
||
|
|
{
|
||
|
|
if (root == null) return;
|
||
|
|
|
||
|
|
// Fly-out to left
|
||
|
|
await Tween.Custom(0f, -100f, duration: 0.5f, ease: Ease.InBack,
|
||
|
|
onValueChange: val => root.style.translate = new StyleTranslate(new Translate(Length.Percent(val), 0)));
|
||
|
|
Hide();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|