private Scene[] GetModifiedScenes(List <int> handles)
 {
     return((from handle in handles
             select EditorSceneManager.GetSceneByHandle(handle) into scene
             where scene.isDirty
             select scene).ToArray <Scene>());
 }
Exemple #2
0
        private bool IsValidHierarchyInstanceID(int instanceID)
        {
            bool isScene      = SceneHierarchy.IsSceneHeaderInHierarchyWindow(EditorSceneManager.GetSceneByHandle(instanceID));
            bool isGameObject = InternalEditorUtility.GetTypeWithoutLoadingObject(instanceID) == typeof(GameObject);

            return(isScene || isGameObject);
        }
        private bool IsValidHierarchyInstanceID(int instanceID)
        {
            bool flag  = SceneHierarchyWindow.IsSceneHeaderInHierarchyWindow(EditorSceneManager.GetSceneByHandle(instanceID));
            bool flag2 = InternalEditorUtility.GetClassIDWithoutLoadingObject(instanceID) == this.kGameObjectClassID;

            return(flag || flag2);
        }
        private void SelectSceneAsset(object userData)
        {
            int    handle             = (int)userData;
            string guid               = AssetDatabase.AssetPathToGUID(EditorSceneManager.GetSceneByHandle(handle).path);
            int    instanceIDFromGUID = AssetDatabase.GetInstanceIDFromGUID(guid);

            Selection.activeInstanceID = instanceIDFromGUID;
            EditorGUIUtility.PingObject(instanceIDFromGUID);
        }
        private void SaveSceneAs(object userdata)
        {
            Scene sceneByHandle = EditorSceneManager.GetSceneByHandle((int)userdata);

            if (!sceneByHandle.isLoaded)
            {
                return;
            }
            EditorSceneManager.SaveSceneAs(sceneByHandle);
        }
        private void SaveSceneAs(object userdata)
        {
            int   handle        = (int)userdata;
            Scene sceneByHandle = EditorSceneManager.GetSceneByHandle(handle);

            if (sceneByHandle.isLoaded)
            {
                EditorSceneManager.SaveSceneAs(sceneByHandle);
            }
        }
        private List <int> GetSelectedGameObjects()
        {
            List <int> intList = new List <int>();

            foreach (int handle in this.m_TreeView.GetSelection())
            {
                if (!SceneHierarchyWindow.IsSceneHeaderInHierarchyWindow(EditorSceneManager.GetSceneByHandle(handle)))
                {
                    intList.Add(handle);
                }
            }
            return(intList);
        }
        private void SaveSelectedScenes(object userdata)
        {
            List <int> selectedScenes = this.GetSelectedScenes();

            foreach (int current in selectedScenes)
            {
                Scene sceneByHandle = EditorSceneManager.GetSceneByHandle(current);
                if (sceneByHandle.isLoaded)
                {
                    EditorSceneManager.SaveScene(sceneByHandle);
                }
            }
        }
        private void CloseSelectedScenes(bool removeScenes)
        {
            List <int> selectedScenes = this.GetSelectedScenes();

            if (EditorSceneManager.SaveModifiedScenesIfUserWantsTo(this.GetModifiedScenes(selectedScenes)))
            {
                foreach (int num in selectedScenes)
                {
                    EditorSceneManager.CloseScene(EditorSceneManager.GetSceneByHandle(num), removeScenes);
                }
                EditorApplication.RequestRepaintAllViews();
            }
        }
        private int GetNumLoadedScenesInSelection()
        {
            int num = 0;

            foreach (int current in this.GetSelectedScenes())
            {
                if (EditorSceneManager.GetSceneByHandle(current).isLoaded)
                {
                    num++;
                }
            }
            return(num);
        }
 private void SaveSelectedScenes(object userdata)
 {
     using (List <int> .Enumerator enumerator = this.GetSelectedScenes().GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             Scene sceneByHandle = EditorSceneManager.GetSceneByHandle(enumerator.Current);
             if (sceneByHandle.isLoaded)
             {
                 EditorSceneManager.SaveScene(sceneByHandle);
             }
         }
     }
 }
        private void LoadSelectedScenes(object userdata)
        {
            List <int> selectedScenes = this.GetSelectedScenes();

            foreach (int current in selectedScenes)
            {
                Scene sceneByHandle = EditorSceneManager.GetSceneByHandle(current);
                if (!sceneByHandle.isLoaded)
                {
                    EditorSceneManager.OpenScene(sceneByHandle.path, OpenSceneMode.Additive);
                }
            }
            EditorApplication.RequestRepaintAllViews();
        }
 private void LoadSelectedScenes(object userdata)
 {
     using (List <int> .Enumerator enumerator = this.GetSelectedScenes().GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             Scene sceneByHandle = EditorSceneManager.GetSceneByHandle(enumerator.Current);
             if (!sceneByHandle.isLoaded)
             {
                 EditorSceneManager.OpenScene(sceneByHandle.path, OpenSceneMode.Additive);
             }
         }
     }
     EditorApplication.RequestRepaintAllViews();
 }
        private List <Scene> GetDraggedScenes(List <int> draggedItemIDs)
        {
            List <Scene> list = new List <Scene>();

            foreach (int current in draggedItemIDs)
            {
                Scene sceneByHandle = EditorSceneManager.GetSceneByHandle(current);
                if (!SceneHierarchyWindow.IsSceneHeaderInHierarchyWindow(sceneByHandle))
                {
                    return(null);
                }
                list.Add(sceneByHandle);
            }
            return(list);
        }
        private void ItemContextClick(int contextClickedItemID)
        {
            Event.current.Use();
            GenericMenu menu = new GenericMenu();

            if (SceneHierarchyWindow.IsSceneHeaderInHierarchyWindow(EditorSceneManager.GetSceneByHandle(contextClickedItemID)))
            {
                this.CreateMultiSceneHeaderContextClick(menu, contextClickedItemID);
            }
            else
            {
                this.CreateGameObjectContextClick(menu, contextClickedItemID);
            }
            menu.ShowAsContext();
        }
        private void TreeViewItemDoubleClicked(int instanceID)
        {
            Scene sceneByHandle = EditorSceneManager.GetSceneByHandle(instanceID);

            if (SceneHierarchyWindow.IsSceneHeaderInHierarchyWindow(sceneByHandle))
            {
                if (sceneByHandle.isLoaded)
                {
                    SceneManager.SetActiveScene(sceneByHandle);
                }
            }
            else
            {
                SceneView.FrameLastActiveSceneView();
            }
        }
        private List <int> GetSelectedGameObjects()
        {
            List <int> list = new List <int>();

            int[] selection = this.m_TreeView.GetSelection();
            int[] array     = selection;
            for (int i = 0; i < array.Length; i++)
            {
                int num = array[i];
                if (!SceneHierarchyWindow.IsSceneHeaderInHierarchyWindow(EditorSceneManager.GetSceneByHandle(num)))
                {
                    list.Add(num);
                }
            }
            return(list);
        }
        private List <Scene> GetDraggedScenes(List <int> draggedItemIDs)
        {
            List <Scene> scenes = new List <Scene>();

            foreach (int id in draggedItemIDs)
            {
                Scene scene = EditorSceneManager.GetSceneByHandle(id);
                if (!SceneHierarchy.IsSceneHeaderInHierarchyWindow(scene))
                {
                    return(null);
                }
                scenes.Add(scene);
            }

            return(scenes);
        }
        static bool IsPrefabStageHeader(GameObjectTreeViewItem item)
        {
            if (!item.isSceneHeader)
            {
                return(false);
            }

            Scene scene = EditorSceneManager.GetSceneByHandle(item.id);

            if (!scene.IsValid())
            {
                return(false);
            }

            return(EditorSceneManager.IsPreviewScene(scene));
        }
        private int GetNumLoadedScenesInSelection()
        {
            int num = 0;

            using (List <int> .Enumerator enumerator = this.GetSelectedScenes().GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    if (EditorSceneManager.GetSceneByHandle(enumerator.Current).isLoaded)
                    {
                        ++num;
                    }
                }
            }
            return(num);
        }
        private void CloseSelectedScenes(bool removeScenes)
        {
            List <int> selectedScenes = this.GetSelectedScenes();

            Scene[] modifiedScenes = this.GetModifiedScenes(selectedScenes);
            bool    flag           = !EditorSceneManager.SaveModifiedScenesIfUserWantsTo(modifiedScenes);

            if (flag)
            {
                return;
            }
            foreach (int current in selectedScenes)
            {
                EditorSceneManager.CloseScene(EditorSceneManager.GetSceneByHandle(current), removeScenes);
            }
            EditorApplication.RequestRepaintAllViews();
        }
        private void CloseSelectedScenes(bool removeScenes)
        {
            List <int> selectedScenes = this.GetSelectedScenes();

            if (!EditorSceneManager.SaveModifiedScenesIfUserWantsTo(this.GetModifiedScenes(selectedScenes)))
            {
                return;
            }
            using (List <int> .Enumerator enumerator = selectedScenes.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    EditorSceneManager.CloseScene(EditorSceneManager.GetSceneByHandle(enumerator.Current), removeScenes);
                }
            }
            EditorApplication.RequestRepaintAllViews();
        }
        Transform GetTransformParentForDrop(int gameObjectOrSceneInstanceID, DropPosition dropPosition)
        {
            var obj = EditorUtility.InstanceIDToObject(gameObjectOrSceneInstanceID);

            if (obj != null)
            {
                // Find transform parent from GameObject
                var go = obj as GameObject;
                if (go == null)
                {
                    throw new InvalidOperationException("Unexpected UnityEngine.Object type in Hierarchy " + obj.GetType());
                }

                switch (dropPosition)
                {
                case DropPosition.Upon:
                    return(go.transform);

                case DropPosition.Below:
                case DropPosition.Above:
                    if (go.transform.parent == null)
                    {
                        var subSceneInfo = SubSceneGUI.GetSubSceneInfo(go.scene);
                        if (subSceneInfo.isValid)
                        {
                            return(subSceneInfo.transform);
                        }
                    }
                    return(go.transform.parent);

                default:
                    throw new InvalidOperationException("Unhandled enum " + dropPosition);
                }
            }
            else
            {
                // Find transform parent from Scene
                var scene        = EditorSceneManager.GetSceneByHandle(gameObjectOrSceneInstanceID);
                var subSceneInfo = SubSceneGUI.GetSubSceneInfo(scene);
                if (subSceneInfo.isValid)
                {
                    return(subSceneInfo.transform);
                }
                return(null); // root scene has no transform parent
            }
        }
Exemple #24
0
        private List <Scene> GetDraggedScenes(List <int> draggedItemIDs)
        {
            List <Scene> sceneList = new List <Scene>();

            using (List <int> .Enumerator enumerator = draggedItemIDs.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    Scene sceneByHandle = EditorSceneManager.GetSceneByHandle(enumerator.Current);
                    if (!SceneHierarchyWindow.IsSceneHeaderInHierarchyWindow(sceneByHandle))
                    {
                        return((List <Scene>)null);
                    }
                    sceneList.Add(sceneByHandle);
                }
            }
            return(sceneList);
        }
 internal static void PasteGameObjects(Transform fallbackParent)
 {
     // Paste as a sibling of a active transform
     if (Selection.activeTransform != null)
     {
         PasteAsSiblings(Selection.activeTransform);
     }
     // If nothing selected, paste as child of the fallback parent if present
     else if (fallbackParent != null)
     {
         PasteAsChildren(fallbackParent);
     }
     // Otherwise, move to the scene of the active object
     else
     {
         Scene targetScene = EditorSceneManager.GetSceneByHandle(Selection.activeInstanceID);
         PasteToScene(targetScene);
     }
 }
        private bool IsValidHierarchyInstanceID(int instanceID)
        {
            //Get is persistent without loading object
            var obj = InternalEditorUtility.GetObjectFromInstanceID(instanceID);

            if (obj != null ? EditorUtility.IsPersistent(obj) : AssetDatabase.Contains(instanceID))
            {
                return(false);
            }

            if (SceneHierarchy.IsSceneHeaderInHierarchyWindow(EditorSceneManager.GetSceneByHandle(instanceID)))
            {
                return(true);
            }

            if (InternalEditorUtility.GetTypeWithoutLoadingObject(instanceID) == typeof(GameObject))
            {
                return(true);
            }

            return(false);
        }
        private void SetSceneActive(object userData)
        {
            int handle = (int)userData;

            SceneManager.SetActiveScene(EditorSceneManager.GetSceneByHandle(handle));
        }
 private Scene[] GetModifiedScenes(List <int> handles)
 {
     return(handles.Select <int, Scene>((Func <int, Scene>)(handle => EditorSceneManager.GetSceneByHandle(handle))).Where <Scene>((Func <Scene, bool>)(scene => scene.isDirty)).ToArray <Scene>());
 }
        private void SelectSceneAsset(object userData)
        {
            int instanceIdFromGuid = AssetDatabase.GetInstanceIDFromGUID(AssetDatabase.AssetPathToGUID(EditorSceneManager.GetSceneByHandle((int)userData).path));

            Selection.activeInstanceID = instanceIdFromGuid;
            EditorGUIUtility.PingObject(instanceIdFromGuid);
        }
        private void CreateMultiSceneHeaderContextClick(GenericMenu menu, int contextClickedItemID)
        {
            Scene sceneByHandle = EditorSceneManager.GetSceneByHandle(contextClickedItemID);

            if (!SceneHierarchyWindow.IsSceneHeaderInHierarchyWindow(sceneByHandle))
            {
                Debug.LogError("Context clicked item is not a scene");
                return;
            }
            if (sceneByHandle.isLoaded)
            {
                menu.AddItem(EditorGUIUtility.TextContent("Set Active Scene"), false, new GenericMenu.MenuFunction2(this.SetSceneActive), contextClickedItemID);
                menu.AddSeparator(string.Empty);
            }
            if (sceneByHandle.isLoaded)
            {
                if (!EditorApplication.isPlaying)
                {
                    menu.AddItem(EditorGUIUtility.TextContent("Save Scene"), false, new GenericMenu.MenuFunction2(this.SaveSelectedScenes), contextClickedItemID);
                    menu.AddItem(EditorGUIUtility.TextContent("Save Scene As"), false, new GenericMenu.MenuFunction2(this.SaveSceneAs), contextClickedItemID);
                    menu.AddItem(EditorGUIUtility.TextContent("Save All"), false, new GenericMenu.MenuFunction2(this.SaveAllScenes), contextClickedItemID);
                }
                else
                {
                    menu.AddDisabledItem(EditorGUIUtility.TextContent("Save Scene"));
                    menu.AddDisabledItem(EditorGUIUtility.TextContent("Save Scene As"));
                    menu.AddDisabledItem(EditorGUIUtility.TextContent("Save All"));
                }
                menu.AddSeparator(string.Empty);
            }
            bool flag = EditorSceneManager.loadedSceneCount != this.GetNumLoadedScenesInSelection();

            if (sceneByHandle.isLoaded)
            {
                bool flag2 = flag && !EditorApplication.isPlaying && !string.IsNullOrEmpty(sceneByHandle.path);
                if (flag2)
                {
                    menu.AddItem(EditorGUIUtility.TextContent("Unload Scene"), false, new GenericMenu.MenuFunction2(this.UnloadSelectedScenes), contextClickedItemID);
                }
                else
                {
                    menu.AddDisabledItem(EditorGUIUtility.TextContent("Unload Scene"));
                }
            }
            else
            {
                bool flag3 = !EditorApplication.isPlaying;
                if (flag3)
                {
                    menu.AddItem(EditorGUIUtility.TextContent("Load Scene"), false, new GenericMenu.MenuFunction2(this.LoadSelectedScenes), contextClickedItemID);
                }
                else
                {
                    menu.AddDisabledItem(EditorGUIUtility.TextContent("Load Scene"));
                }
            }
            bool flag4 = this.GetSelectedScenes().Count == SceneManager.sceneCount;
            bool flag5 = flag && !flag4 && !EditorApplication.isPlaying;

            if (flag5)
            {
                menu.AddItem(EditorGUIUtility.TextContent("Remove Scene"), false, new GenericMenu.MenuFunction2(this.RemoveSelectedScenes), contextClickedItemID);
            }
            else
            {
                menu.AddDisabledItem(EditorGUIUtility.TextContent("Remove Scene"));
            }
            menu.AddSeparator(string.Empty);
            if (!string.IsNullOrEmpty(sceneByHandle.path))
            {
                menu.AddItem(EditorGUIUtility.TextContent("Select Scene Asset"), false, new GenericMenu.MenuFunction2(this.SelectSceneAsset), contextClickedItemID);
            }
            else
            {
                menu.AddDisabledItem(new GUIContent("Select Scene Asset"));
            }
            if (sceneByHandle.isLoaded)
            {
                menu.AddSeparator(string.Empty);
                this.AddCreateGameObjectItemsToMenu(menu, (from t in Selection.transforms
                                                           select t.gameObject).ToArray <GameObject>(), false, true, sceneByHandle.handle);
            }
        }