using System; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace UnityEditor.Timeline { static class PickerUtils { public static List pickedElements { get; private set; } public static void DoPick(WindowState state, Vector2 mousePosition) { if (state.GetWindow().sequenceHeaderRect.Contains(mousePosition)) { pickedElements = state.headerSpacePartitioner.GetItemsAtPosition(mousePosition).ToList(); } else if (state.GetWindow().sequenceContentRect.Contains(mousePosition)) { pickedElements = state.spacePartitioner.GetItemsAtPosition(mousePosition).ToList(); } else { if (pickedElements != null) pickedElements.Clear(); else pickedElements = new List(); } } public static ILayerable TopmostPickedItem() { return PickedItemsSortedByZOrderOfType().FirstOrDefault(); } public static T TopmostPickedItemOfType() where T : class, ILayerable { return PickedItemsSortedByZOrderOfType().FirstOrDefault(); } public static T TopmostPickedItemOfType(Func predicate) where T : class, ILayerable { return PickedItemsSortedByZOrderOfType().FirstOrDefault(predicate); } static IEnumerable PickedItemsSortedByZOrderOfType() where T: class, ILayerable { return pickedElements.OfType().OrderByDescending(x => x.zOrder); } public static T FirstPickedElementOfType() where T : class, IBounds { return pickedElements.FirstOrDefault(e => e is T) as T; } } }