/// <summary>
        /// Replaces all the references in all scenes.
        /// </summary>
        /// <param name="spriteInfoList">Sprite info list.</param>
        /// <param name="spriteRenderersOnly">If set to <c>true</c> sprite renderers only.</param>
        /// <param name="skipCurrent">If set to <c>true</c> skip current scene.</param>
        /// <returns>The replaced references count.</returns>
        public static int ReplaceReferencesInAllScenes(List <SPSpriteInfo> spriteInfoList,
                                                       SPReferenceReplacerWindow.ReplaceMode replaceMode, bool spriteRenderersOnly, bool skipCurrent)
        {
            int  count        = 0;
            bool replaceAtlas = (replaceMode == SPReferenceReplacerWindow.ReplaceMode.AtlasWithSource);

            // Grab the current scene name
            string startingScene = EditorApplication.currentScene;

            // Get all scene names
            string[] sceneNames = SPTools.GetAllScenesNames();

            if (sceneNames.Length == 0)
            {
                return(count);
            }

            foreach (string sceneName in sceneNames)
            {
                // Check if we should skip the scene
                if (skipCurrent && sceneName.Equals(startingScene))
                {
                    continue;
                }

                // Try opening the scene
                if (EditorApplication.OpenScene(sceneName))
                {
                    Component[] comps = Object.FindObjectsOfType <Component>();

                    foreach (SPSpriteInfo spriteInfo in spriteInfoList)
                    {
                        if (spriteInfo.source == null || !(spriteInfo.source is Sprite) ||
                            spriteInfo.targetSprite == null)
                        {
                            continue;
                        }

                        count += SPTools.ReplaceReferences(comps,
                                                           (replaceAtlas ? spriteInfo.targetSprite : (spriteInfo.source as Sprite)),
                                                           (replaceAtlas ? (spriteInfo.source as Sprite) : spriteInfo.targetSprite),
                                                           spriteRenderersOnly);
                    }

                    EditorApplication.SaveScene();
                }
            }

            // Load back the original scene
            EditorApplication.OpenScene(startingScene);

            // Return the replaced references count
            return(count);
        }
        /// <summary>
        /// Replaces all the references in the project (does not work with internal properties).
        /// </summary>
        /// <param name="spriteInfoList">Sprite info list.</param>
        /// <param name="spriteRenderersOnly">If set to <c>true</c> sprite renderers only.</param>
        /// <returns>The replaced references count.</returns>
        public static int ReplaceReferencesInProject(List <SPSpriteInfo> spriteInfoList,
                                                     SPReferenceReplacerWindow.ReplaceMode replaceMode, bool spriteRenderersOnly)
        {
            Component[] comps = SPTools.GetProjectPrefabComponents();

            bool replaceAtlas = (replaceMode == SPReferenceReplacerWindow.ReplaceMode.AtlasWithSource);

            int count = 0;

            foreach (SPSpriteInfo spriteInfo in spriteInfoList)
            {
                if (spriteInfo.source == null || !(spriteInfo.source is Sprite) || spriteInfo.targetSprite == null)
                {
                    continue;
                }

                count += SPTools.ReplaceReferences(comps,
                                                   (replaceAtlas ? spriteInfo.targetSprite : (spriteInfo.source as Sprite)),
                                                   (replaceAtlas ? (spriteInfo.source as Sprite) : spriteInfo.targetSprite), spriteRenderersOnly);
            }

            return(count);
        }