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); }
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); } } } }
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)); }
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)); }
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)); }
public static Object Revert(Object obj) { var gameObject = obj as GameObject; if (gameObject && PrefabHelper.IsPartofPrefabStage(gameObject)) { PrefabHelper.SaveOpenPrefabStage(); } return(RevertObject(obj)); }
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); }
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); }
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); }
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; } } }
public static bool ChangesStoredInPrefab(Object obj) { obj = GetObjectIndirection(obj); return(PrefabHelper.IsPrefabParent(obj) || PrefabHelper.IsPrefab(obj, true, false, true)); }