private void Construct(string path) { if (path == "") { return; } m_fileInfo = new FileInfo(path); Name = Path.GetFileNameWithoutExtension(m_fileInfo.Name); Type = FindType(m_fileInfo); // Data directory wasn't found. The user has to manually select the directory. bool updateExistingPrefabWithDirectoryId = false; if (Type == FileType.Unknown && PrefabInstance != null && PrefabInstance.GetComponent <AGXUnity.IO.RestoredAGXFile>() != null) { if (EditorUtility.DisplayDialog("Data directory for prefab not found", "Would you like to manually select directory for the given prefab?", "Yes", "No")) { var dataDirectory = EditorUtility.OpenFolderPanel("Data directory for: " + PrefabInstance.name, m_fileInfo.Directory.FullName, ""); var relDataDirectory = Utils.MakeRelative(dataDirectory, Application.dataPath).Replace('\\', '/'); if (AssetDatabase.IsValidFolder(relDataDirectory)) { Type = FileType.AGXPrefab; PrefabInstance.GetComponent <AGXUnity.IO.RestoredAGXFile>().DataDirectoryId = AssetDatabase.AssetPathToGUID(relDataDirectory); updateExistingPrefabWithDirectoryId = true; } } } RootDirectory = Utils.MakeRelative(m_fileInfo.Directory.FullName, Application.dataPath).Replace('\\', '/'); // If the file is located in the root Assets folder the relative directory // is the empty string and Unity requires the relative path to include "Assets". if (RootDirectory == string.Empty) { RootDirectory = "Assets"; } if (Type == FileType.AGXPrefab) { DataDirectory = AssetDatabase.GUIDToAssetPath(PrefabInstance.GetComponent <AGXUnity.IO.RestoredAGXFile>().DataDirectoryId); } else { DataDirectory = RootDirectory + "/" + Name + "_Data"; } ExistingPrefab = AssetDatabase.LoadAssetAtPath <GameObject>(PrefabPath); if (ExistingPrefab && updateExistingPrefabWithDirectoryId) { ExistingPrefab.GetComponent <AGXUnity.IO.RestoredAGXFile>().DataDirectoryId = PrefabInstance.GetComponent <AGXUnity.IO.RestoredAGXFile>().DataDirectoryId; Save(); } }
/// <summary> /// Returns true if file is an existing prefab with corresponding .agx/.aagx file. /// </summary> /// <param name="info">File info.</param> /// <returns>True if the .prefab file is has a corresponding .agx/.aagx file.</returns> public bool IsExistingAGXPrefab(FileInfo info) { if (info == null || !info.Exists || PrefabInstance == null) { return(false); } var restoredFileInfo = PrefabInstance.GetComponent <AGXUnity.IO.RestoredAGXFile>(); return(restoredFileInfo != null && AssetDatabase.IsValidFolder(AssetDatabase.GUIDToAssetPath(restoredFileInfo.DataDirectoryId))); }