public string GenerateSourceCode(ScenesData data, SceneSearcherPreferences preferences)
        {
            var menuItemTemplate = preferences.ProjectName + "/Scenes/";
            var scenesSorted     = data.Scenes;

            scenesSorted = preferences.SceneOrder == SearcherSceneOrder.Alphabetic ?
                           scenesSorted.OrderBy(x => x.SceneVisibleName.ToLower()).ToList() :
                           scenesSorted.OrderBy(x => x.OrderNumber).ToList();

            var builder = new StringBuilder(GenerateHeader());

            foreach (var scene in scenesSorted)
            {
                builder.Append(MethodTemplate(menuItemTemplate + scene.SceneVisibleName, GenerateMethodName(), scene.SceneVisblePathInProject));
            }
            builder.Append(GenerateFooter());
            return(builder.ToString());
        }
Exemple #2
0
        private void GetPluginData()
        {
            var    seaercherFolder = AssetDatabase.FindAssets("SceneSearcher", null);
            string pluginPath      = "";

            foreach (var s in seaercherFolder)
            {
                var file = AssetDatabase.GUIDToAssetPath(s);
                if (file.Contains('.'))
                {
                    continue;
                }
                pluginPath = file;
            }
            pluginPath += "/";

            if (!Directory.Exists(pluginPath))
            {
                Debug.LogError("Directory " + pluginPath + " does not exist");
                return;
            }
            //Here all the services json files live.
            pluginPath = pluginPath + "Data/";
            var dataDirectory = !Directory.Exists(pluginPath) ?
                                Directory.CreateDirectory(pluginPath) :
                                new DirectoryInfo(pluginPath);

//			var files = dataDirectory.GetFiles("*.json");

            //Cache files paths
            _dataFilePath  = dataDirectory.FullName + DataFileName;
            _prefsFilePath = dataDirectory.FullName + PrefsFileName;

            //Parse data about plugin preferences
            if (File.Exists(dataDirectory.FullName + PrefsFileName))
            {
                var fileContents = File.ReadAllText(_prefsFilePath);
                if (!string.IsNullOrEmpty(fileContents))
                {
                    _preferences = JsonUtility.FromJson <SceneSearcherPreferences>(fileContents);
                }
            }
            if (_preferences == null)
            {
                _preferences = new SceneSearcherPreferences();
            }

            //Parse data about already cached scenes
            if (File.Exists(dataDirectory.FullName + DataFileName))
            {
                var fileContents = File.ReadAllText(_dataFilePath);
                if (!string.IsNullOrEmpty(fileContents))
                {
                    _scenesData = JsonUtility.FromJson <ScenesData>(fileContents);
                }
            }
            if (_scenesData == null)
            {
                _scenesData = new ScenesData();
            }
        }
Exemple #3
0
        private void DrawSelectFolderToSearchScenes()
        {
            _scenesInFolderLabel = "Add scenes in folder (" + _scenesInSelectedFolder.Count + ")";
            _showSelectFolder    = EditorGUILayout.Foldout(_showSelectFolder, _scenesInFolderLabel, true, EditorStyles.boldLabel);
            if (!_showSelectFolder)
            {
                return;
            }

            GuiLine();

            EditorGUILayout.Space();
            EditorGUILayout.Space();


            EditorGUILayout.LabelField("Select folder to search scenes automatically. All found scenes in this folder will be processed.");

            EditorGUILayout.BeginHorizontal();

            //Select folder and recusrively scan contents to find scenes
            if (GUILayout.Button("Select Folder"))
            {
                var path = EditorUtility.OpenFolderPanel("Select folder to scan", Application.dataPath, "");
                var sceneFilesInDirectory = Directory.GetFiles(path, "*.unity", SearchOption.AllDirectories);
                _selectedFolder = path;
                foreach (var file in sceneFilesInDirectory)
                {
                    var sceneModel = new SceneModel(file);
                    _scenesInSelectedFolder.Scenes.Add(sceneModel);
                }
            }

            EditorGUILayout.LabelField("Selected folder : " + _selectedFolder);

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.LabelField("Scenes in selected folder : " + _scenesInSelectedFolder.Count);

            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("Add Selected Scenes"))
            {
                var processedScenesDictionary = _scenesData.Scenes.ToDictionary(x => x.ScenePathInProject, x => x);
                foreach (var scene in _scenesInSelectedFolder.Scenes)
                {
                    if (!processedScenesDictionary.ContainsKey(scene.ScenePathInProject))
                    {
                        processedScenesDictionary.Add(scene.ScenePathInProject, scene);
                    }
                }
                _scenesData.Scenes = processedScenesDictionary.Values.ToList();
                _scenesInSelectedFolder.Scenes.Clear();
            }

            if (GUILayout.Button("Reset Selection"))
            {
                if (EditorUtility.DisplayDialog("Reset selected folder?", "Are you sure you want to reset selected folder?", "YES",
                                                "NO"))
                {
                    _selectedFolder         = "";
                    _scenesInSelectedFolder = new ScenesData();
                }
            }

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();
            EditorGUILayout.Space();

            _showDataInSelectedFolder = EditorGUILayout.Foldout(_showDataInSelectedFolder, "Scenes in selected folder", true, EditorStyles.boldLabel);
            if (_showDataInSelectedFolder && _scenesInSelectedFolder.Count != 0)
            {
                _folderScenesPosition = GUILayout.BeginScrollView(_folderScenesPosition);

                foreach (var scene in _scenesInSelectedFolder.Scenes)
                {
                    DrawSceneModel(scene, SceneDataLocation.FromSelectedFolder);
                }
                GUILayout.EndScrollView();
            }
        }