Example #1
0
        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();
            }
        }
Example #2
0
        /// <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)));
        }