Exemplo n.º 1
0
        private static void SaveModifiedAssets()
        {
            // The index value should always be good but making sure we don't crash and burn in case something is wrong.
            if (m_ConversionHelper.m_CurrentIndex >= m_ConversionHelper.m_ProjectAssetsToConvert.Count)
            {
                if (m_ConversionHelper.m_ShowUIDialogs)
                {
                    EditorUtility.DisplayDialog(kAssetGUIDConverterName,
                                                "Error saving assets.", "OK", null);
                }
                m_CurrentTask.Stop("Error saving assets", true);
                m_CurrentTask      = null;
                m_ConversionHelper = null;
                return;
            }

            var currentAsset = m_ConversionHelper.m_ProjectAssetsToConvert[m_ConversionHelper.m_CurrentIndex++];

            try
            {
                File.WriteAllText(Path.Combine(m_ConversionHelper.m_ProjectPath, currentAsset.m_AssetFilePath), currentAsset.m_AssetDataFile);
            }
            catch (Exception e)
            {
                Debug.LogError($"{ kAssetGUIDConverterName } - Unable to write file { currentAsset.m_AssetFilePath }: " + e);

                m_ConversionHelper.m_AssetNamesToShowInUI.Remove(currentAsset.m_AssetNameForUI);
                m_ConversionHelper.m_ErrorsFound = true;
            }

            if (m_ConversionHelper.m_CurrentIndex == m_ConversionHelper.m_ProjectAssetsToConvert.Count)
            {
                m_CurrentTask.Stop("Assets saved!");

                m_ConversionHelper.m_AssetEditingStarted = false;
                AssetDatabase.StopAssetEditing();
                AssetDatabase.Refresh();

                if (m_ConversionHelper.m_ShowUIDialogs)
                {
                    string conversionDoneMessage = m_ConversionHelper.m_Inverted ?
                                                   "The following assets were reverted and will only function with the UI Toolkit package installed:" :
                                                   "The following assets were converted and will function without the UI Toolkit package installed:";

                    if (m_ConversionHelper.m_ErrorsFound)
                    {
                        conversionDoneMessage =
                            "Assets saved but some errors were found. Check the Console for details.\n\n" +
                            conversionDoneMessage;
                    }

                    GUIDConverterListDialog.OpenListDialog(kAssetGUIDConverterName, conversionDoneMessage,
                                                           m_ConversionHelper.m_AssetNamesToShowInUI, "OK");
                }
                m_CurrentTask      = null;
                m_ConversionHelper = null;
            }
            else
            {
                m_CurrentTask.SetProgress((float)m_ConversionHelper.m_CurrentIndex / m_ConversionHelper.m_ProjectAssetsToConvert.Count);
            }
        }
Exemplo n.º 2
0
        private static void ScanProjectFiles()
        {
            // The index value should always be good but making sure we don't crash and burn in case something is wrong.
            if (m_ConversionHelper.m_CurrentIndex >= m_ConversionHelper.m_ProjectAssetsGUIDs.Count)
            {
                if (m_ConversionHelper.m_ShowUIDialogs)
                {
                    EditorUtility.DisplayDialog(kAssetGUIDConverterName,
                                                "Error scanning project files.", "OK", null);
                }
                m_CurrentTask.Stop("Error scanning project files", true);
                m_CurrentTask      = null;
                m_ConversionHelper = null;
                return;
            }

            var currGUID = m_ConversionHelper.m_ProjectAssetsGUIDs[m_ConversionHelper.m_CurrentIndex++];

            string assetFilePath = AssetDatabase.GUIDToAssetPath(currGUID);

            // Filter out file types we have no interest in searching
            if (!ShouldIgnoreFile(assetFilePath))
            {
                string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath);

                // Read the asset data file
                string assetDataFile = string.Empty;

                try
                {
                    assetDataFile = File.ReadAllText(Path.Combine(m_ConversionHelper.m_ProjectPath, assetFilePath));
                }
                catch
                {
                    // Continue to the next asset if we can't read the current one.
                    Debug.LogError($"{kAssetGUIDConverterName} - Unable to open file {assetFilePath}; file skipped.");
                    return;
                }

                // Read the asset meta data file
                string assetMetaFile = File.ReadAllText(Path.Combine(m_ConversionHelper.m_ProjectPath, assetMetaFilePath));

                bool hasFileChanged     = false;
                bool hasMetaFileChanged = false;

                foreach (AssetConversionRecord record in m_ConversionHelper.m_ConversionData)
                {
                    if (assetDataFile.Contains(record.target))
                    {
                        hasFileChanged = true;
                        assetDataFile  = assetDataFile.Replace(record.target, record.replacement);
                    }

                    // Check meta file
                    if (assetMetaFile.Contains(record.target))
                    {
                        hasMetaFileChanged = true;
                        assetMetaFile      = assetMetaFile.Replace(record.target, record.replacement);
                    }
                }

                if (hasFileChanged)
                {
                    m_ConversionHelper.m_ProjectAssetsToConvert.Add(
                        new GUIDConversionHelper.AssetInfo()
                    {
                        m_AssetFilePath = assetFilePath, m_AssetDataFile = assetDataFile, m_AssetNameForUI = assetFilePath
                    });
                    m_ConversionHelper.m_AssetNamesToShowInUI.Add(assetFilePath);
                }

                if (hasMetaFileChanged)
                {
                    m_ConversionHelper.m_ProjectAssetsToConvert.Add(
                        new GUIDConversionHelper.AssetInfo()
                    {
                        m_AssetFilePath = assetMetaFilePath, m_AssetDataFile = assetMetaFile, m_AssetNameForUI = assetFilePath
                    });

                    if (!m_ConversionHelper.m_AssetNamesToShowInUI.Contains(assetFilePath))
                    {
                        m_ConversionHelper.m_AssetNamesToShowInUI.Add(assetFilePath);
                    }
                }
            }

            if (m_ConversionHelper.m_CurrentIndex == m_ConversionHelper.m_ProjectAssetsGUIDs.Count)
            {
                m_CurrentTask.Stop("Project asset scan done!");
                m_CurrentTask = null;

                if (m_ConversionHelper.m_ProjectAssetsToConvert.Count > 0)
                {
                    if (m_ConversionHelper.m_ShowUIDialogs)
                    {
                        string confirmButtonText, message;
                        if (m_ConversionHelper.m_Inverted)
                        {
                            confirmButtonText = "Revert";
                            message           = "The following assets were identified for reversion. Revert assets?";
                        }
                        else
                        {
                            confirmButtonText = "Convert";
                            message           = "The following assets were identified for conversion. Convert assets?";
                        }
                        m_CurrentListDialog = GUIDConverterListDialog.OpenListDialog(kAssetGUIDConverterName,
                                                                                     message, m_ConversionHelper.m_AssetNamesToShowInUI, confirmButtonText, true, OnConfirmUpdateProjectFiles,
                                                                                     () => CancelConversion());
                    }
                    else
                    {
                        OnConfirmUpdateProjectFiles();
                    }
                }
                else
                {
                    if (m_ConversionHelper.m_ShowUIDialogs)
                    {
                        EditorUtility.DisplayDialog(kAssetGUIDConverterName,
                                                    "No UI Toolkit package asset found to convert.", "OK", null);
                    }

                    m_CurrentTask      = null;
                    m_ConversionHelper = null;
                }
            }
            else
            {
                m_CurrentTask.SetProgress((float)m_ConversionHelper.m_CurrentIndex / m_ConversionHelper.m_ProjectAssetsGUIDs.Count);
            }
        }