bool IsValidSubSceneDropTarget(int dropTargetGameObjectOrSceneInstanceID, DropPosition dropPosition, Object[] draggedObjects) { if (draggedObjects == null || draggedObjects.Length == 0) { return(false); } Transform parentForDrop = GetTransformParentForDrop(dropTargetGameObjectOrSceneInstanceID, dropPosition); if (parentForDrop == null) { // Drop is on a root scene which is always allowed return(true); } foreach (var obj in draggedObjects) { var gameObject = obj as GameObject; if (gameObject == null) { continue; } // Require all dragged objects to be valid (since native cannot filter out invalid sub scene drags currently) if (SubSceneGUI.IsChildOrSameAsOtherTransform(parentForDrop, gameObject.transform)) { return(false); } } // Valid drop target for current dragged objects return(true); }
private static bool CanSetParent(Transform transform, Transform target) { bool canSetParent = transform != target; if (target != null) { canSetParent = canSetParent && !transform.IsChildOf(target) && !target.IsChildOf(transform); } if (SubSceneGUI.IsSubSceneHeader(transform.gameObject)) { canSetParent = canSetParent && !SubSceneGUI.IsChildOrSameAsOtherTransform(transform, target) && !SubSceneGUI.IsChildOrSameAsOtherTransform(target, transform); } return(canSetParent); }
public static bool CanSetNewParent(Transform transform, Transform newParent) { if (transform == null) { throw new ArgumentNullException("transform"); } if (newParent == null) { return(true); } RefreshSubSceneInfo(); var parentIsChild = SubSceneGUI.IsChildOrSameAsOtherTransform(newParent, transform); return(!parentIsChild); }