static bool OnOperationStarting(OperationType operationType, VersionControlStatus[] statuses)
        {
            if (operationType == OperationType.Revert || operationType == OperationType.Commit)
            {
                foreach (var status in statuses)
                {
                    // Save Scenes
                    for (int i = 0, length = SceneManager.sceneCount; i < length; i++)
                    {
                        var scene = SceneManager.GetSceneAt(i);
                        if (scene.isLoaded && scene.isDirty)
                        {
                            if (status.assetPath.Contains(new ComposedString(scene.path)))
                            {
                                EditorSceneManager.SaveScene(scene);
                            }
                        }
                    }

                    // Save Prefabs
                    if (PrefabHelper.IsAssetPathOpenAsPrefabStage(status.assetPath.Compose()))
                    {
                        PrefabHelper.SaveOpenPrefabStage();
                    }
                }
            }
            return(true);
        }
Пример #2
0
        public static string GetObjectTypeName(Object obj)
        {
            string objectType = "Unknown Type";

            if (PrefabHelper.IsPrefab(obj, false, true, true))
            {
                objectType = PrefabHelper.IsPrefabParent(obj) ? "Model" : "Model in Scene";
            }
            if (PrefabHelper.IsPrefab(obj, true, false, true))
            {
                objectType = "Prefab";
            }
            if (!PrefabHelper.IsPrefab(obj, true, true, true))
            {
                objectType = "Scene";
            }

            if (PrefabHelper.IsPrefab(obj, true, false, true))
            {
                if (PrefabHelper.IsPrefabParent(obj))
                {
                    objectType += " Asset";
                }
                else if (PrefabHelper.IsPrefabRoot(obj))
                {
                    objectType += " Root";
                }
                else
                {
                    objectType += " Child";
                }
            }

            return(objectType);
        }
        internal static void RefreshEditableObject(GameObject gameObject)
        {
            if (!EditorUtility.IsPersistent(gameObject))
            {
                bool editable           = ShouleBeEditable(gameObject);
                bool parentEditable     = gameObject.transform.parent ? ShouleBeEditable(gameObject.transform.parent.gameObject) : VCUtility.HaveAssetControl(SceneManagerUtilities.GetCurrentScenePath());
                bool prefabHeadEditable = PrefabHelper.IsPrefabRoot(gameObject) && parentEditable;

                if (prefabHeadEditable)
                {
                    SetEditable(gameObject, true);
                }
                else
                {
                    SetEditable(gameObject, editable);
                }

                foreach (var componentIt in gameObject.GetComponents <Component>())
                {
                    if (prefabHeadEditable && componentIt == gameObject.transform)
                    {
                        SetEditable(gameObject.transform, true);
                    }
                    else
                    {
                        RefreshEditableComponent(gameObject, componentIt);
                    }
                }
            }
        }
Пример #4
0
 public static string ObjectToAssetPath(Object obj, bool includingPrefabs = true)
 {
     obj = GetObjectIndirection(obj);
     if (includingPrefabs && PrefabHelper.IsPrefab(obj) && !PrefabHelper.IsPrefabParent(obj))
     {
         return(AssetDatabase.GetAssetPath(PrefabHelper.GetPrefabParent(obj)));
     }
     return(AssetDatabase.GetAssetOrScenePath(obj));
 }
Пример #5
0
        public static bool ShouldVCRevert(Object obj)
        {
            var assetStatus = obj.GetAssetStatus();
            var material    = obj as Material;

            return
                (material && ManagedByRepository(assetStatus) ||
                 ((assetStatus.lockStatus == VCLockStatus.LockedHere || assetStatus.ModifiedOrLocalEditAllowed()) && VCCommands.Instance.Ready) &&
                 PrefabHelper.IsPrefab(obj, true, false, true));
        }
Пример #6
0
        public static Object Revert(Object obj)
        {
            var gameObject = obj as GameObject;

            if (gameObject && PrefabHelper.IsPrefab(gameObject, true, false, true) && !PrefabHelper.IsPrefabParent(gameObject))
            {
                return(RevertPrefab(gameObject));
            }
            return(RevertObject(obj));
        }
Пример #7
0
        public static Object Revert(Object obj)
        {
            var gameObject = obj as GameObject;

            if (gameObject && PrefabHelper.IsPartofPrefabStage(gameObject))
            {
                PrefabHelper.SaveOpenPrefabStage();
            }
            return(RevertObject(obj));
        }
Пример #8
0
        private static GameObject RevertPrefab(GameObject gameObject)
        {
            PrefabHelper.ReconnectToLastPrefab(gameObject);
            PrefabUtility.RevertPrefabInstance(gameObject);

            if (ShouldVCRevert(gameObject))
            {
                bool success = VCCommands.Instance.Revert(gameObject.ToAssetPaths());
                if (success && onHierarchyReverted != null)
                {
                    onHierarchyReverted(gameObject);
                }
            }

            return(gameObject);
        }
Пример #9
0
        public static void ApplyAndCommit(Object obj, string commitMessage = "", bool showCommitDialog = false)
        {
            var gameObject = obj as GameObject;

            if (ObjectUtilities.ChangesStoredInScene(obj))
            {
                SceneManagerUtilities.SaveActiveScene();
            }
            if (PrefabHelper.IsPrefab(gameObject, true, false) && !PrefabHelper.IsPrefabParent(obj))
            {
                PrefabHelper.ApplyPrefab(gameObject);
            }
            if (onHierarchyCommit != null)
            {
                onHierarchyCommit(obj);
            }
            VCCommands.Instance.CommitDialog(obj.ToAssetPaths(), showCommitDialog, commitMessage);
        }
Пример #10
0
        public static void ApplyAndCommit(Object obj, string commitMessage = "", bool showCommitDialog = false)
        {
            var gameObject = obj as GameObject;

            if (ObjectUtilities.ChangesStoredInScene(obj))
            {
                SceneManagerUtilities.SaveActiveScene();
            }
            if (PrefabHelper.IsPartofPrefabStage(gameObject))
            {
                PrefabHelper.SaveOpenPrefabStage();
            }
            if (onHierarchyCommit != null)
            {
                onHierarchyCommit(obj);
            }
            VCCommands.Instance.CommitDialog(obj.ToAssetPaths(), includeDependencies: true, showUserConfirmation: showCommitDialog, commitMessage: commitMessage);
        }
Пример #11
0
 public static void SetEditable(Object obj, bool editable)
 {
     //Debug.Log("Setting '" + obj + "' to " + (editable ? "editable" : "readonly"));
     if (AvoidGUILock(obj))
     {
         editable = true;
     }
     if (obj != null && !IsBuiltinAsset(obj.GetAssetPath()) && !EditorUtility.IsPersistent(obj) &&
         !(obj is GameObject && PrefabHelper.IsPrefabParent(obj))) // Do not modify object flags for Project-Prefab GameObjects
     {
         if (editable && !IsEditable(obj))
         {
             obj.hideFlags &= ~HideFlags.NotEditable;
         }
         if (!editable && IsEditable(obj))
         {
             obj.hideFlags |= HideFlags.NotEditable;
         }
     }
 }
Пример #12
0
 public static bool ChangesStoredInPrefab(Object obj)
 {
     obj = GetObjectIndirection(obj);
     return(PrefabHelper.IsPrefabParent(obj) || PrefabHelper.IsPrefab(obj, true, false, true));
 }