| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 | 
							- // Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
 
- #if UNITY_EDITOR
 
- using Animancer.TransitionLibraries;
 
- using System;
 
- using System.Collections.Generic;
 
- using UnityEditor;
 
- using UnityEngine;
 
- using static Animancer.Editor.AnimancerGUI;
 
- using static Animancer.Editor.TransitionLibraries.TransitionLibrarySelection;
 
- namespace Animancer.Editor.TransitionLibraries
 
- {
 
-     /// <summary>[Editor-Only]
 
-     /// A <see cref="TransitionLibraryWindowPage"/> for editing transition aliases.
 
-     /// </summary>
 
-     /// https://kybernetik.com.au/animancer/api/Animancer.Editor.TransitionLibraries/TransitionLibraryAliasesPage
 
-     [Serializable]
 
-     public class TransitionLibraryAliasesPage : TransitionLibraryWindowPage
 
-     {
 
-         /************************************************************************************************************************/
 
-         [SerializeField]
 
-         private Vector2 _ScrollPosition;
 
-         [NonSerialized]
 
-         private bool _HasSorted;
 
-         /************************************************************************************************************************/
 
-         /// <inheritdoc/>
 
-         public override string DisplayName
 
-             => "Transition Aliases";
 
-         /// <inheritdoc/>
 
-         public override string HelpTooltip
 
-             => "Aliases are custom names which can be used to refer to transitions instead of direct references.";
 
-         /// <inheritdoc/>
 
-         public override int Index
 
-             => 1;
 
-         /************************************************************************************************************************/
 
-         private static readonly List<Rect>
 
-             TransitionAreas = new();
 
-         /************************************************************************************************************************/
 
-         /// <inheritdoc/>
 
-         public override void OnGUI(Rect area)
 
-         {
 
-             var definition = Window.Data;
 
-             if (!_HasSorted)
 
-             {
 
-                 _HasSorted = true;
 
-                 definition.SortAliases();
 
-             }
 
-             var currentEvent = Event.current;
 
-             var isRepaint = currentEvent.type == EventType.Repaint;
 
-             if (isRepaint)
 
-                 TransitionAreas.Clear();
 
-             area.yMin += StandardSpacing;
 
-             area.xMin += StandardSpacing;
 
-             area.xMax -= StandardSpacing;
 
-             var transitions = definition.Transitions;
 
-             var aliases = definition.Aliases;
 
-             var viewArea = new Rect(
 
-                 0,
 
-                 0,
 
-                 area.width,
 
-                 CalculateHeight(1 + transitions.Length + aliases.Length) + StandardSpacing);
 
-             if (viewArea.height > area.height)
 
-                 viewArea.width -= GUI.skin.verticalScrollbar.fixedWidth;
 
-             _ScrollPosition = GUI.BeginScrollView(area, _ScrollPosition, viewArea);
 
-             viewArea.height = LineHeight;
 
-             DoAliasAllGUI(viewArea);
 
-             NextVerticalArea(ref viewArea);
 
-             var aliasIndex = 0;
 
-             for (int i = 0; i < transitions.Length; i++)
 
-             {
 
-                 var totalTransitionArea = viewArea;
 
-                 if (isRepaint)
 
-                     TransitionAreas.Add(viewArea);
 
-                 DoTransitionGUI(viewArea, transitions[i], i);
 
-                 NextVerticalArea(ref viewArea);
 
-                 while (aliasIndex < aliases.Length)
 
-                 {
 
-                     var alias = aliases[aliasIndex];
 
-                     if (alias.Index != i)
 
-                     {
 
-                         if (alias.Index < i && currentEvent.type != EventType.Used)
 
-                         {
 
-                             Debug.LogError("Aliases aren't properly sorted.");
 
-                             definition.SortAliases();
 
-                             GUIUtility.ExitGUI();
 
-                         }
 
-                         break;
 
-                     }
 
-                     DoAliasGUI(viewArea, alias, aliasIndex++);
 
-                     NextVerticalArea(ref viewArea);
 
-                 }
 
-                 // Highlights.
 
-                 totalTransitionArea.yMax = viewArea.yMin - StandardSpacing;
 
-                 var selected = Window.Selection.FromIndex == i || Window.Selection.ToIndex == i;
 
-                 var hover = totalTransitionArea.Contains(currentEvent.mousePosition);
 
-                 Window.Highlighter.DrawHighlightGUI(totalTransitionArea, selected, hover);
 
-             }
 
-             GUI.EndScrollView();
 
-         }
 
-         /************************************************************************************************************************/
 
-         /// <summary>Draws <see cref="TransitionLibraryDefinition.AliasAllTransitions"/>.</summary>
 
-         private void DoAliasAllGUI(Rect area)
 
-         {
 
-             var definition = Window.Data;
 
-             using (var label = PooledGUIContent.Acquire(
 
-                 "Alias All Transitions",
 
-                 TransitionLibraryDefinition.AliasAllTransitionsTooltip))
 
-                 definition.AliasAllTransitions = EditorGUI.Toggle(area, label, definition.AliasAllTransitions);
 
-             if (TryUseClickEvent(area, 0))
 
-                 definition.AliasAllTransitions = !definition.AliasAllTransitions;
 
-         }
 
-         /************************************************************************************************************************/
 
-         /// <summary>Draws a `transition`.</summary>
 
-         private void DoTransitionGUI(Rect area, TransitionAssetBase transition, int index)
 
-         {
 
-             var addArea = StealFromLeft(ref area, LineHeight * 5, StandardSpacing);
 
-             TransitionModifierTableGUI.HandleTransitionLabelInput(
 
-                 ref area,
 
-                 Window,
 
-                 transition,
 
-                 index,
 
-                 SelectionType.ToTransition,
 
-                 CalculateTargetTransitionIndex);
 
-             var typeArea = StealFromRight(ref area, area.width * 0.5f, StandardSpacing);
 
-             var label = transition.GetCachedName();
 
-             GUI.Label(area, label);
 
-             var wrappedTransition = transition.GetTransition();
 
-             var type = wrappedTransition != null
 
-                 ? wrappedTransition.GetType().GetNameCS(false)
 
-                 : "Null";
 
-             GUI.Label(typeArea, type);
 
-             if (GUI.Button(addArea, "Add"))
 
-             {
 
-                 var alias = new NamedIndex(null, index);
 
-                 Window.RecordUndo().AddAlias(alias);
 
-             }
 
-         }
 
-         /************************************************************************************************************************/
 
-         /// <summary>Calculates the transition index for a drag and drop operation.</summary>
 
-         private static int CalculateTargetTransitionIndex(
 
-             Rect area,
 
-             int index,
 
-             Event currentEvent)
 
-         {
 
-             var y = currentEvent.mousePosition.y;
 
-             for (int i = 0; i < TransitionAreas.Count; i++)
 
-                 if (y <= TransitionAreas[i].yMax)
 
-                     return i;
 
-             return TransitionAreas.Count;
 
-         }
 
-         /************************************************************************************************************************/
 
-         /// <summary>Draws an `alias`.</summary>
 
-         private void DoAliasGUI(Rect area, NamedIndex alias, int index)
 
-         {
 
-             var removeArea = StealFromLeft(ref area, LineHeight * 5, StandardSpacing);
 
-             EditorGUI.BeginChangeCheck();
 
-             var name = StringAssetDrawer.DrawGUI(area, GUIContent.none, alias.Name, Window.SourceObject, out _);
 
-             if (EditorGUI.EndChangeCheck())
 
-             {
 
-                 Window.RecordUndo().Aliases[index] = alias.With(name as StringAsset);
 
-             }
 
-             if (GUI.Button(removeArea, "Remove"))
 
-             {
 
-                 Window.RecordUndo().RemoveAlias(index);
 
-             }
 
-         }
 
-         /************************************************************************************************************************/
 
-     }
 
- }
 
- #endif
 
 
  |