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