protected int FindDropAtIndex(TreeView.DragAndDropArgs args) { int num = args.insertAtIndex; if (num < 0 || num > base.rootItem.children.Count) { num = base.rootItem.children.Count; } return(num); }
protected override DragAndDropVisualMode HandleDragAndDrop(TreeView.DragAndDropArgs args) { var target = args.parentItem; if (target == null) { return(DragAndDropVisualMode.Rejected); } var targetData = this.idToDataMap[target.id]; // Eventually handle moving to other DataSets, but not yet if (!(targetData is TransformData)) { return(DragAndDropVisualMode.Rejected); } if (!args.performDrop) { return(DragAndDropVisualMode.Link); } foreach (var item in DragAndDrop.GetGenericData("Items") as List <int> ) { var data = this.idToDataMap[item] as TransformData; // Unity gets mad if we swap parent and child, so don't allow that. if (data == (targetData as TransformData).Parent) { return(DragAndDropVisualMode.Rejected); } data.Parent = targetData as TransformData; var sceneProxy = this.getSceneProxy(data.DataSetGuid, data.Name); if (sceneProxy == null) { continue; } var parentSceneProxy = this.getSceneProxy(data.Parent.DataSetGuid, data.Parent.Name); if (parentSceneProxy == null) { continue; } sceneProxy.transform.SetParent(parentSceneProxy.transform); } this.Reload(); DragAndDrop.AcceptDrag(); return(DragAndDropVisualMode.Link); }
protected override DragAndDropVisualMode HandleDragAndDrop(TreeView.DragAndDropArgs args) { DragAndDropVisualMode result = DragAndDropVisualMode.None; List <int> list = DragAndDrop.GetGenericData("BuildPlayerSceneTreeViewItem") as List <int>; if (list != null && list.Count > 0) { result = DragAndDropVisualMode.Move; if (args.performDrop) { int num = this.FindDropAtIndex(args); List <TreeViewItem> list2 = new List <TreeViewItem>(); int num2 = 0; foreach (TreeViewItem current in base.rootItem.children) { if (num2 == num) { foreach (int current2 in list) { list2.Add(base.FindItem(current2, base.rootItem)); } } num2++; if (!list.Contains(current.id)) { list2.Add(current); } } if (list2.Count < base.rootItem.children.Count) { foreach (int current3 in list) { list2.Add(base.FindItem(current3, base.rootItem)); } } base.rootItem.children = list2; EditorBuildSettings.scenes = this.GetSceneList(); this.ReloadAndSelect(list); base.Repaint(); } } else if (DragAndDrop.paths != null && DragAndDrop.paths.Length > 0) { result = DragAndDropVisualMode.Copy; if (args.performDrop) { List <EditorBuildSettingsScene> list3 = new List <EditorBuildSettingsScene>(EditorBuildSettings.scenes); List <EditorBuildSettingsScene> list4 = new List <EditorBuildSettingsScene>(); List <int> list5 = new List <int>(); string[] paths = DragAndDrop.paths; for (int i = 0; i < paths.Length; i++) { string text = paths[i]; if (AssetDatabase.GetMainAssetTypeAtPath(text) == typeof(SceneAsset)) { GUID gUID = new GUID(AssetDatabase.AssetPathToGUID(text)); list5.Add(gUID.GetHashCode()); bool flag = true; foreach (EditorBuildSettingsScene current4 in list3) { if (current4.path == text) { flag = false; break; } } if (flag) { list4.Add(new EditorBuildSettingsScene(text, true)); } } } int index = this.FindDropAtIndex(args); list3.InsertRange(index, list4); EditorBuildSettings.scenes = list3.ToArray(); this.ReloadAndSelect(list5); base.Repaint(); } } return(result); }