int GetDropTargetInstanceID(GameObjectTreeViewItem hierarchyTargetItem, DropPosition dropPosition) { if (SubSceneGUI.IsUsingSubScenes()) { var gameObjectDropTarget = hierarchyTargetItem.objectPPTR as GameObject; if (gameObjectDropTarget != null) { if (dropPosition == DropPosition.Above) { return(hierarchyTargetItem.id); } if (SubSceneGUI.IsSubSceneHeader(gameObjectDropTarget)) { Scene subScene = SubSceneGUI.GetSubScene(gameObjectDropTarget); if (subScene.IsValid()) { return(subScene.handle); } else { return(0); } } } } return(hierarchyTargetItem.id); }
internal static bool CanPasteAsChild() { bool canPaste = (Unsupported.CanPasteGameObjectsFromPasteboard() || CutBoard.hasCutboardData) && ((SceneHierarchyWindow.lastInteractedHierarchyWindow != null && SceneHierarchyWindow.lastInteractedHierarchyWindow.sceneHierarchy != null) || SceneView.lastActiveSceneView != null) && Selection.transforms.Length == 1; var activeGO = Selection.activeGameObject; if (activeGO != null && SubSceneGUI.IsSubSceneHeader(activeGO)) { return(canPaste && SubSceneGUI.GetSubScene(activeGO).IsValid()); } return(canPaste); }
internal static void PasteGOAsChild() { Transform[] selected = Selection.transforms; // paste as a child if a gameObject is selected if (selected.Length == 1) { Scene subScene = new Scene(); bool pasteToSubScene = false; bool isSubScene = false; // If target is subScene make sure we just move objects under subScene if (SubSceneGUI.IsSubSceneHeader(selected[0].gameObject)) { subScene = SubSceneGUI.GetSubScene(selected[0].gameObject); isSubScene = subScene.isSubScene; pasteToSubScene = subScene.IsValid(); } // handle paste after cut if (CutBoard.hasCutboardData) { if (pasteToSubScene) { if (subScene.handle != 0) { CutBoard.PasteToScene(subScene, selected[0]); pastedGameObjects?.Invoke(Selection.gameObjects); } } else if (!isSubScene) { CutBoard.PasteAsChildren(selected[0]); pastedGameObjects?.Invoke(Selection.gameObjects); } } // paste after copy else if (pasteToSubScene || !isSubScene) { Unsupported.PasteGameObjectsFromPasteboard(selected[0], pasteToSubScene ? subScene.handle : 0); pastedGameObjects?.Invoke(Selection.gameObjects); } } RepaintHierarchyWindowsAfterPaste(); }