// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2026 Kybernetik // #if UNITY_EDITOR using Animancer.TransitionLibraries; using Animancer.Units; using Animancer.Units.Editor; using System; using UnityEngine; namespace Animancer.Editor.TransitionLibraries { /// [Editor-Only] /// A for editing transition modifiers. /// /// https://kybernetik.com.au/animancer/api/Animancer.Editor.TransitionLibraries/TransitionLibraryModifiersPage [Serializable] public abstract class TransitionLibraryModifiersPage : TransitionLibraryWindowPage { /************************************************************************************************************************/ [SerializeField] private TransitionModifierTableGUI _TableGUI; /************************************************************************************************************************/ /// The drawer used for time fields on this page. public readonly AnimationTimeAttributeDrawer TimeDrawer = new(); /// Creates a new . public TransitionLibraryModifiersPage(AnimationTimeAttribute.Units units) { TimeDrawer.Initialize(new AnimationTimeAttribute(units)); TimeDrawer.Attribute.Rule = Validate.Value.IsFiniteOrNaN; TimeDrawer.Attribute.IsOptional = true; } /// Configures this page to display a single field or not. public virtual void ConfigureForSingleField(bool singleField, ref float value) { } /************************************************************************************************************************/ /// Gets the value controlled by this page. public abstract float GetValue(ITransition transition); /// Gets the value controlled by this page. public abstract float GetValue(TransitionModifierDefinition modifier); /// Sets the value controlled by this page. public abstract void SetValue(ref TransitionModifierDefinition modifier, float value); /************************************************************************************************************************/ /// public override void OnGUI(Rect area) { _TableGUI ??= new(); _TableGUI.Page = this; if (Window.Data.Transitions.Length == 0) { area = new Rect( area.x + AnimancerGUI.StandardSpacing, area.y + AnimancerGUI.StandardSpacing, area.width - AnimancerGUI.StandardSpacing * 2, AnimancerGUI.LineHeight); GUI.Label( area, "Library contains no Transitions." + " Drag and Drop Transition Assets into this window or use the Create Transition button."); AnimancerGUI.NextVerticalArea(ref area); if (GUI.Button(area, "Create Transition")) TransitionLibraryOperations.CreateTransition(Window); } else { _TableGUI.DoGUI(area, Window); } TransitionLibraryOperations.HandleBackgroundInput(area, Window); } /************************************************************************************************************************/ } } #endif