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