private T[] ShowDropButton <T>(bool isEnabled, IsValidAssetDelegate IsValidAsset) where T : UnityEngine.Object { T[] returnValue = null; Rect drop_area = GUILayoutUtility.GetRect(0.0f, 80.0f, GUILayout.ExpandWidth(true)); GUI.enabled = isEnabled; GUI.Box(drop_area, "Drop Animation files here", _dropBoxStyle); GUI.enabled = true; if (!isEnabled) { return(null); } Event evt = Event.current; switch (evt.type) { case EventType.DragUpdated: case EventType.DragPerform: if (!drop_area.Contains(evt.mousePosition) || !DraggedObjectsContainValidObject <T>(IsValidAsset)) { return(null); } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; if (evt.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); List <T> validObjects = new List <T>(); foreach (UnityEngine.Object dragged_object in DragAndDrop.objectReferences) { var assetPath = AssetDatabase.GetAssetPath(dragged_object); if (dragged_object is T && IsValidAsset(assetPath)) { validObjects.Add(dragged_object as T); } } returnValue = validObjects.ToArray(); } evt.Use(); break; } return(returnValue); }
private bool DraggedObjectsContainValidObject <T>(IsValidAssetDelegate IsValidAsset) where T : UnityEngine.Object { foreach (UnityEngine.Object dragged_object in DragAndDrop.objectReferences) { var assetPath = AssetDatabase.GetAssetPath(dragged_object); if (dragged_object is T && IsValidAsset(assetPath)) { return(true); } } return(false); }