Ejemplo n.º 1
0
        public static Scene CreateEmptyScene(string sceneName, string parentFolderName)
        {
            GameLevelToolkitWindow toolkit = GameLevelToolkitWindow.GetRefreshedToolkitWindow();
            string projectDirectory        = null;

            if (toolkit.settings == null)
            {
                projectDirectory = toolkit.projectDirectoryPathName;
            }
            else
            {
                projectDirectory = GameLevelToolkitWindow.GetProjectPathStringWithSlash();
            }

            if (!Directory.Exists("Assets/" + projectDirectory + "Scenes/" + SceneAndResourceFolderName.folderNameValue + "/" + parentFolderName))
            {
                AssetDatabase.CreateFolder("Assets/" + projectDirectory + "Scenes/" + SceneAndResourceFolderName.folderNameValue, parentFolderName);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }

            string fullSceneDirectory = "Assets/" + projectDirectory + "Scenes/" + SceneAndResourceFolderName.folderNameValue + "/" + parentFolderName + "/";
            Scene  newScene           = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);

            newScene.name = sceneName;
            EditorSceneManager.SaveScene(newScene, fullSceneDirectory + sceneName + ".unity");
            return(newScene);
        }
        private void AddScene()
        {
            if (HasSceneName() == true)
            {
                Debug.LogError("Scene Name Is Required");
                return;
            }

            GameLevelToolkitWindow toolkit = GameLevelToolkitWindow.GetRefreshedToolkitWindow();
            string targetSceneFolderPath   = GameLevelToolkitWindow.GetProjectPathStringWithSlash();


            //Check If scene Already Exists
            string targetSceneFile = "Assets/" + targetSceneFolderPath + "Scenes/" + targetSceneFolderPath + SceneAndResourceFolderName.folderNameValue + "/" + selectedGameLevel.gameLevelName + "_" + sceneNameToCreate + ".unity";

            if (System.IO.File.Exists(targetSceneFile))
            {
                Debug.LogError("Scene Already Exists");
                return;
            }

            CreateScene.CreateEmptyScene(selectedGameLevel.gameLevelName + "_" + sceneNameToCreate, selectedGameLevel.gameLevelName);

            selectedGameLevel.assignedScenes.Add(sceneNameToCreate);
            EditorUtility.SetDirty(selectedGameLevel);

            if (automaticallyAddSceneToBuild == true)
            {
                List <EditorBuildSettingsScene> editorBuildSettingsScenes = new List <EditorBuildSettingsScene>();

                //Get The Existing Build List
                foreach (EditorBuildSettingsScene item in EditorBuildSettings.scenes)
                {
                    editorBuildSettingsScenes.Add(item);
                }

                EditorBuildSettingsScene editorScene = new EditorBuildSettingsScene(targetSceneFile, true);

                if (editorBuildSettingsScenes.Count > 0)
                {
                    bool masterSceneNotFoundInBuild = false;
                    for (int i = 0; i < editorBuildSettingsScenes.Count; i++)
                    {
                        if (editorBuildSettingsScenes[i].path == editorScene.path)
                        {
                            masterSceneNotFoundInBuild = true;
                            break;
                        }
                    }
                    if (masterSceneNotFoundInBuild == false)
                    {
                        editorBuildSettingsScenes.Add(editorScene);
                    }
                }

                EditorBuildSettings.scenes = editorBuildSettingsScenes.ToArray();
            }

            OpenGameLevel.OpenLevel(selectedGameLevel, true, false, true);
        }
        public static void AddMasterSceneToBuild()
        {
            List <EditorBuildSettingsScene> buildScenes = GetEditorBuildSettingsScenes();

            //Add The Master Scene
            string masterscenePath = "Assets/" + GameLevelToolkitWindow.GetProjectPathStringWithSlash() + "Scenes/" + "Game Levels/Master Scene/Master Scene.unity";
            EditorBuildSettingsScene masterScene = new EditorBuildSettingsScene(masterscenePath, true);

            if (buildScenes.Count > 0)
            {
                bool masterSceneNotFoundInBuild = false;
                for (int i = 0; i < buildScenes.Count; i++)
                {
                    if (buildScenes[i].path == masterScene.path)
                    {
                        masterSceneNotFoundInBuild = true;
                        break;
                    }
                }
                if (masterSceneNotFoundInBuild == false)
                {
                    buildScenes.Add(masterScene);
                }
            }
            else
            {
                buildScenes.Add(masterScene);
            }

            EditorBuildSettings.scenes = buildScenes.ToArray();
        }
        public static string GetGameLevelAssetFileDirectory(GameLevel level)
        {
            GameLevelToolkitWindow toolkit = GameLevelToolkitWindow.GetRefreshedToolkitWindow();
            string projectDirectory        = GameLevelToolkitWindow.GetProjectPathStringWithSlash();

            string gameLevelDirectory = "Assets/" + projectDirectory + "Resources/" + SceneAndResourceFolderName.folderNameValue + "/" + "Existing " + SceneAndResourceFolderName.folderNameValue + "/" + level.name + ".asset";

            return(gameLevelDirectory);
        }
Ejemplo n.º 5
0
        private void DuplicateLevel()
        {
            if (HasNewLocationNameAssigned() == true)
            {
                Debug.LogError("Has No New Location Name Assigned");
                return;
            }

            if (gameLevelToCreateDuplicateOf == null)
            {
                Debug.LogError("Location Required to Duplicate");
                return;
            }

            GameLevelToolkitWindow toolkit = GameLevelToolkitWindow.GetRefreshedToolkitWindow();
            string projectPathName         = GameLevelToolkitWindow.GetProjectPathStringWithSlash();

            //Check if there is a location already existing with that name.
            GameLevel existingGameLevel = (GameLevel)AssetDatabase.LoadAssetAtPath("Assets/" + projectPathName + "Resources/" + SceneAndResourceFolderName.folderNameValue + "/" + newGameLevelName + "/" + newGameLevelName + ".asset", typeof(GameLevel));

            if (existingGameLevel != null)
            {
                Debug.LogError("Location With Same Name Already Exists");
                return;
            }

            //Create the Location Resource
            GameLevel gameLevelResource = GameLevelData.CreateInstance <GameLevel>();

            AssetDatabase.CreateAsset(GameLevel.CreateInstance <GameLevel>(), "Assets/" + projectPathName + "Resources/" + SceneAndResourceFolderName.folderNameValue + "/" + "Existing " + SceneAndResourceFolderName.folderNameValue + "/" + newGameLevelName + ".asset");
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
            GameLevel createdGameLevel = (GameLevel)AssetDatabase.LoadAssetAtPath("Assets/" + projectPathName + "Resources/" + SceneAndResourceFolderName.folderNameValue + "/" + "Existing " + SceneAndResourceFolderName.folderNameValue + "/" + newGameLevelName + ".asset", typeof(GameLevel));

            createdGameLevel.gameLevelName           = newGameLevelName;
            createdGameLevel.assignedScenesDirectory = "Assets/" + projectPathName + "Scenes/" + SceneAndResourceFolderName.folderNameValue + "/" + newGameLevelName;
            createdGameLevel.levelDependencies       = gameLevelToCreateDuplicateOf.levelDependencies;
            createdGameLevel.assignedScenes          = gameLevelToCreateDuplicateOf.assignedScenes;
            GameLevelToolkitWindow.GetGameLevelsData().gameLevelsCreatedByUser.Add(createdGameLevel);

            //Create the Scene Directory
            string scenesFolder = AssetDatabase.CreateFolder("Assets/" + projectPathName + "Scenes/" + SceneAndResourceFolderName.folderNameValue, newGameLevelName);

            //Copy the Existing Scenes
            for (int i = 0; i < gameLevelToCreateDuplicateOf.assignedScenes.Count; i++)
            {
                string sceneToCopy = gameLevelToCreateDuplicateOf.assignedScenesDirectory + "/" + gameLevelToCreateDuplicateOf.gameLevelName + "_" + gameLevelToCreateDuplicateOf.assignedScenes[i] + ".unity";
                string destination = createdGameLevel.assignedScenesDirectory + "/" + newGameLevelName + "_" + gameLevelToCreateDuplicateOf.assignedScenes[i] + ".unity";
                FileUtil.CopyFileOrDirectory(sceneToCopy, destination);
            }

            EditorUtility.SetDirty(createdGameLevel);
            EditorUtility.SetDirty(toolkit.gameLevelsData);

            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
Ejemplo n.º 6
0
        public static GameLevel ReturnLocationFromDirectory(string directory)
        {
            GameLevelToolkitWindow toolkit = GameLevelToolkitWindow.GetRefreshedToolkitWindow();
            string projectPathName         = GameLevelToolkitWindow.GetProjectPathStringWithSlash();

            GameLevel existingGameLevel = (GameLevel)AssetDatabase.LoadAssetAtPath("Assets/" + projectPathName + "/Resources/" + SceneAndResourceFolderName.folderNameValue + "/" + directory + "/" + directory + ".asset", typeof(GameLevel));

            return(null);
        }
Ejemplo n.º 7
0
        private void FilterPotentialLevels()
        {
            List <EditorBuildSettingsScene> editorBuildSettingsScenes = BuildSettingsSceneManagement.GetEditorBuildSettingsScenes();

            List <GameLevel> filteredGameLevelsList = new List <GameLevel>();

            foreach (GameLevel item in targetLevels)
            {
                //Get Scene and Scene Path
                bool doesAllScenesExistInBuild = false;
                for (int i = 0; i < item.assignedScenes.Count; i++)
                {
                    bool   sceneExistsInBuild            = false;
                    string gameLevelName                 = item.gameLevelName;
                    string scenePath                     = "Assets/" + GameLevelToolkitWindow.GetProjectPathStringWithSlash() + "Scenes/Game Levels/" + gameLevelName + "/" + gameLevelName + "_" + item.assignedScenes[i] + ".unity";
                    EditorBuildSettingsScene targetScene = new EditorBuildSettingsScene(scenePath, true);

                    for (int r = 0; r < editorBuildSettingsScenes.Count; r++)
                    {
                        if (editorBuildSettingsScenes[r].path == targetScene.path)
                        {
                            sceneExistsInBuild = true;
                            break;
                        }
                    }

                    if (sceneExistsInBuild == false)
                    {
                        doesAllScenesExistInBuild = false;
                        break;
                    }
                    else
                    {
                        doesAllScenesExistInBuild = true;
                    }
                }

                if (doesAllScenesExistInBuild == false)
                {
                    filteredGameLevelsList.Add(item);
                }
            }

            targetLevels = filteredGameLevelsList.ToArray();

            List <string> levelsToString = new List <string>();

            foreach (GameLevel item in targetLevels)
            {
                levelsToString.Add(item.gameLevelName);
            }
            targetLevelOptions = levelsToString.ToArray();
        }
        public static string GetGameLevelResourceFolder(string locationName, bool includeSlashEnding = false)
        {
            GameLevelToolkitWindow toolkit = GameLevelToolkitWindow.GetRefreshedToolkitWindow();
            string projectDirectory        = GameLevelToolkitWindow.GetProjectPathStringWithSlash();

            string targetDirectory = "Assets/" + projectDirectory + "Resources/" + SceneAndResourceFolderName.folderNameValue + "/" + locationName;

            if (includeSlashEnding == true)
            {
                targetDirectory += "/";
            }
            return(targetDirectory);
        }
Ejemplo n.º 9
0
        public static GameLevel ReturnGameLevel(string locationName)
        {
            GameLevelToolkitWindow toolkit = GameLevelToolkitWindow.GetRefreshedToolkitWindow();
            string projectPathName         = GameLevelToolkitWindow.GetProjectPathStringWithSlash();

            GameLevel existingGameLevel = (GameLevel)AssetDatabase.LoadAssetAtPath("Assets/" + projectPathName + "/Resources/" + SceneAndResourceFolderName.folderNameValue + "/" + locationName + "/" + locationName + ".asset", typeof(GameLevel));

            if (existingGameLevel != null)
            {
                Debug.LogError("Location With Same Name Already Exists");
                return(existingGameLevel);
            }
            return(null);
        }
Ejemplo n.º 10
0
        public void OpenMasterScene()
        {
            List <Scene> loadedScenes = new List <Scene>();

            for (int i = 0; i < SceneManager.sceneCount; i++)
            {
                loadedScenes.Add(SceneManager.GetSceneAt(i));
            }
            Scene[] loadedScenesArray = loadedScenes.ToArray();
            EditorSceneManager.SaveModifiedScenesIfUserWantsTo(loadedScenesArray);

            string scenePath = "Assets/" + GameLevelToolkitWindow.GetProjectPathStringWithSlash() + "Scenes/" + SceneAndResourceFolderName.folderNameValue + "/Master Scene/Master Scene.unity";

            if (openAdditively == true)
            {
                EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Additive);
            }
            else
            {
                EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Single);
            }
        }
Ejemplo n.º 11
0
        private void Uninstall()
        {
            string resourcesFolderDir = "Assets/" + GameLevelToolkitWindow.GetProjectPathStringWithSlash() + "Resources/" + SceneAndResourceFolderName.folderNameValue;
            string scenesFolderDir    = "Assets/" + GameLevelToolkitWindow.GetProjectPathStringWithSlash() + "Scenes/" + SceneAndResourceFolderName.folderNameValue;

            //Destroy Resources
            FileUtil.DeleteFileOrDirectory(resourcesFolderDir);
            FileUtil.DeleteFileOrDirectory(resourcesFolderDir + ".meta");

            //Destroy Created Scenes Folder
            FileUtil.DeleteFileOrDirectory(scenesFolderDir);
            FileUtil.DeleteFileOrDirectory(scenesFolderDir + ".meta");

            if (GameLevelToolkitWindow.toolkitWindow != null)
            {
                GameLevelToolkitWindow.toolkitWindow.initialDataHasBeenCreated = false;
            }

            AssetDatabase.Refresh();

            Debug.Log("Successful Uninstall");
        }
        private void CreateLevel()
        {
            GameLevelToolkitWindow toolkit = GameLevelToolkitWindow.GetRefreshedToolkitWindow();
            string projectPathName         = GameLevelToolkitWindow.GetProjectPathStringWithSlash();

            //Check If the Location Already Exists
            GameLevel existingLocation = (GameLevel)AssetDatabase.LoadAssetAtPath("Assets/" + projectPathName + "Resources/" + SceneAndResourceFolderName.folderNameValue + "/" + gameLevelName + "/" + gameLevelName + ".asset", typeof(GameLevel));

            if (existingLocation != null)
            {
                Debug.LogError("Level With Same Name Already Exists");
                return;
            }

            //First We Will need to make sure we have all the required data before proceeding
            if (gameLevelName == null || gameLevelName == "")
            {
                Debug.LogError("Level Name Cannot Be Empty");
                return;
            }

            //Check If Any Scene Names are empty
            for (int i = 0; i < scenesToCreateInGameLevel.Count; i++)
            {
                if (scenesToCreateInGameLevel[i].VerifySceneNameIsNotEmpty() == true)
                {
                    Debug.LogError("Scene Name Cannot Be Empty");
                    return;
                }
            }

            for (int i = 0; i < scenesToCreateInGameLevel.Count; i++)
            {
                string sceneDirectory = gameLevelName;
                CreateScene.CreateEmptyScene(gameLevelName + "_" + scenesToCreateInGameLevel[i].sceneName, sceneDirectory);
            }

            //Create the Location Resources
            string resourceFolder = AssetDatabase.CreateFolder("Assets/" + projectPathName + "Resources/Locations", gameLevelName);
            string newFolderPath  = AssetDatabase.GUIDToAssetPath(resourceFolder);

            //Check Does FolderExist To Place Resource File Inside
            if (!Directory.Exists("Assets/" + projectPathName + "Resources/" + SceneAndResourceFolderName.folderNameValue + "/Existing " + SceneAndResourceFolderName.folderNameValue))
            {
                AssetDatabase.CreateFolder("Assets/" + projectPathName + "Resources/" + SceneAndResourceFolderName.folderNameValue, "Existing " + SceneAndResourceFolderName.folderNameValue);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }

            GameLevel gameLevelResource = GameLevelData.CreateInstance <GameLevel>();

            AssetDatabase.CreateAsset(GameLevel.CreateInstance <GameLevel>(), "Assets/" + projectPathName + "Resources/" + SceneAndResourceFolderName.folderNameValue + "/Existing " + SceneAndResourceFolderName.folderNameValue + "/" + gameLevelName + ".asset");
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();


            GameLevel createdGameLevel = (GameLevel)AssetDatabase.LoadAssetAtPath("Assets/" + projectPathName + "Resources/" + SceneAndResourceFolderName.folderNameValue + "/Existing " + SceneAndResourceFolderName.folderNameValue + "/" + gameLevelName + ".asset", typeof(GameLevel));

            createdGameLevel.gameLevelName           = gameLevelName;
            createdGameLevel.assignedScenesDirectory = "Assets/" + projectPathName + "Scenes/" + SceneAndResourceFolderName.folderNameValue + "/" + gameLevelName;
            createdGameLevel.assignedCategory        = categories[selectedCategoryValue];
            GameLevelToolkitWindow.GetGameLevelsData().gameLevelsCreatedByUser.Add(createdGameLevel);
            EditorUtility.SetDirty(createdGameLevel);

            for (int i = 0; i < scenesToCreateInGameLevel.Count; i++)
            {
                createdGameLevel.assignedScenes.Add(scenesToCreateInGameLevel[i].sceneName);
            }

            for (int i = 0; i < gameLevelDependencies.Count; i++)
            {
                createdGameLevel.levelDependencies.Add(gameLevelDependencies[i]);
            }
            EditorUtility.SetDirty(toolkit.gameLevelsData);

            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();

            OpenGameLevel.OpenLevel(createdGameLevel, true, false, true);

            if (addLevelToUnityBuildScenes == true)
            {
                BuildSettingsSceneManagement.AddLevelToBuild(createdGameLevel);
            }
        }
        private void AddSceneToLocation()
        {
            string projectPathName = GameLevelToolkitWindow.GetProjectPathStringWithSlash();

            if (targetGameLevel == null)
            {
                Debug.LogError("Target Location Is Required");
                return;
            }

            string originalScenePath = null;

            if (useRootDirectory == true)
            {
                originalScenePath = "Assets/" + targetSceneFolderPath + ".unity";
            }
            else
            {
                originalScenePath = "Assets/" + projectPathName + "Scenes/" + targetSceneFolderPath + "/" + targetSceneName + ".unity";
            }

            //Check to See If the scene belongs to an existing location
            bool          sceneExistsInAGameLevel         = false;
            string        sceneNameWithoutGameLevelPrefix = null;
            GameLevelData gameLevelData = GameLevelToolkitWindow.GetGameLevelsData();

            for (int i = 0; i < gameLevelData.gameLevelsCreatedByUser.Count; i++)
            {
                for (int g = 0; g < gameLevelData.gameLevelsCreatedByUser[i].assignedScenes.Count; g++)
                {
                    string assignedSceneName = gameLevelData.gameLevelsCreatedByUser[i].gameLevelName + "_" + gameLevelData.gameLevelsCreatedByUser[i].assignedScenes[g];

                    if (assignedSceneName == targetSceneName)
                    {
                        sceneNameWithoutGameLevelPrefix = gameLevelData.gameLevelsCreatedByUser[i].assignedScenes[g];
                        //Remove this scene from its location that it is apart of
                        gameLevelData.gameLevelsCreatedByUser[i].assignedScenes.Remove(targetSceneName);
                        sceneExistsInAGameLevel = true;
                    }
                }
            }

            //Rename the scene based on the location naming convention
            string targetGameLevelPrefix = targetGameLevel.gameLevelName;
            string finalSceneName        = null;

            if (sceneExistsInAGameLevel == true)
            {
                finalSceneName = targetGameLevelPrefix + "_" + sceneNameWithoutGameLevelPrefix + ".unity";
                targetGameLevel.assignedScenes.Add(finalSceneName);
            }
            else
            {
                finalSceneName = targetGameLevelPrefix + "_" + targetSceneName + ".unity";
                targetGameLevel.assignedScenes.Add(targetSceneName);
            }

            AssetDatabase.RenameAsset(originalScenePath, finalSceneName);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();

            //Move the scene to the correct Directory
            string adjustedDirectoryToMoveSceneFrom = "Assets/" + projectPathName + targetSceneFolderPath + "/" + targetSceneName + ".unity";
            string directoryToMoveSceneTo           = targetGameLevel.assignedScenesDirectory + "/" + finalSceneName;

            FileUtil.MoveFileOrDirectory(adjustedDirectoryToMoveSceneFrom, directoryToMoveSceneTo);
            EditorUtility.SetDirty(targetGameLevel);
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
        }
Ejemplo n.º 14
0
        public static void OpenLevel(GameLevel targetGameLevel, bool includeMasterScene, bool keepCurrentScenesThatAreOpenOpeneded, bool includeDependencies)
        {
            List <Scene> loadedScenes = new List <Scene>();

            for (int i = 0; i < SceneManager.sceneCount; i++)
            {
                loadedScenes.Add(SceneManager.GetSceneAt(i));
            }
            Scene[] loadedScenesArray = loadedScenes.ToArray();
            EditorSceneManager.SaveModifiedScenesIfUserWantsTo(loadedScenesArray);

            //Load The Master Scene
            if (includeMasterScene == true)
            {
                string masterScenePath = "Assets/" + GameLevelToolkitWindow.GetProjectPathStringWithSlash() + "Scenes/" + SceneAndResourceFolderName.folderNameValue + "/Master Scene/Master Scene.unity";
                Scene  masterScene;

                if (keepCurrentScenesThatAreOpenOpeneded == true)
                {
                    masterScene = EditorSceneManager.OpenScene(masterScenePath, OpenSceneMode.Additive);
                }
                else
                {
                    masterScene = EditorSceneManager.OpenScene(masterScenePath, OpenSceneMode.Single);
                }

                EditorSceneManager.SetActiveScene(masterScene);
            }

            //Unload Any Existing Scenes If Required
            if (includeMasterScene == false && keepCurrentScenesThatAreOpenOpeneded == false)
            {
                for (int i = 0; i < SceneManager.sceneCount; i++)
                {
                    Scene scene = SceneManager.GetSceneAt(i);
                    if (!IsActiveScene(scene))
                    {
                        CloseScene(scene);
                    }
                    if (scene.name == "Master Scene")
                    {
                        if (!IsActiveScene(scene))
                        {
                            EditorSceneManager.SetActiveScene(scene);
                        }
                    }
                }
            }

            //Load The Locations Scenes
            LoadLocationsScenesAdditively(targetGameLevel);

            //Load Dependencies If Required
            if (includeDependencies == true)
            {
                for (int i = 0; i < targetGameLevel.levelDependencies.Count; i++)
                {
                    LoadLocationsScenesAdditively(targetGameLevel.levelDependencies[i]);
                }
            }
        }
        public static void AddLevelToBuild(GameLevel level, List <EditorBuildSettingsScene> buildScenes = null, bool updateSceneBuild = true)
        {
            if (buildScenes == null)
            {
                buildScenes = GetEditorBuildSettingsScenes();
            }

            //Add Game Level
            for (int i = 0; i < level.assignedScenes.Count; i++)
            {
                bool   sceneExistsInBuild      = false;
                string scenePath               = "Assets/" + GameLevelToolkitWindow.GetProjectPathStringWithSlash() + "Scenes/Game Levels/" + level.gameLevelName + "/" + level.gameLevelName + "_" + level.assignedScenes[i] + ".unity";
                EditorBuildSettingsScene scene = new EditorBuildSettingsScene(scenePath, true);

                for (int g = 0; g < buildScenes.Count; g++)
                {
                    if (buildScenes[g].path == scene.path)
                    {
                        sceneExistsInBuild = true;
                        break;
                    }
                }

                if (sceneExistsInBuild == false)
                {
                    buildScenes.Add(scene);
                }
            }

            //Add Dependencies
            for (int i = 0; i < level.levelDependencies.Count; i++)
            {
                for (int g = 0; g < level.levelDependencies[i].assignedScenes.Count; g++)
                {
                    bool   sceneExistsInBuild            = false;
                    string gameLevelName                 = level.levelDependencies[i].gameLevelName;
                    string scenePath                     = "Assets/" + GameLevelToolkitWindow.GetProjectPathStringWithSlash() + "Scenes/Game Levels/" + gameLevelName + "/" + gameLevelName + "_" + level.levelDependencies[i].assignedScenes[g] + ".unity";
                    EditorBuildSettingsScene targetScene = new EditorBuildSettingsScene(scenePath, true);

                    for (int f = 0; f < buildScenes.Count; f++)
                    {
                        if (buildScenes[f].path == targetScene.path)
                        {
                            sceneExistsInBuild = true;
                            break;
                        }
                    }

                    if (sceneExistsInBuild == false)
                    {
                        buildScenes.Add(targetScene);
                    }
                }
            }

            //Add Dependencies of Dependencies
            for (int i = 0; i < level.levelDependencies.Count; i++)
            {
                for (int g = 0; g < level.levelDependencies[i].levelDependencies.Count; g++)
                {
                    GameLevel targetDependency = level.levelDependencies[i].levelDependencies[g];

                    for (int f = 0; f < targetDependency.assignedScenes.Count; f++)
                    {
                        bool   sceneExistsInBuild            = false;
                        string gameLevelName                 = targetDependency.gameLevelName;
                        string scenePath                     = "Assets/" + GameLevelToolkitWindow.GetProjectPathStringWithSlash() + "Scenes/Game Levels/" + gameLevelName + "/" + gameLevelName + "_" + targetDependency.assignedScenes[f] + ".unity";
                        EditorBuildSettingsScene targetScene = new EditorBuildSettingsScene(scenePath, true);

                        for (int r = 0; r < buildScenes.Count; r++)
                        {
                            if (buildScenes[r].path == targetScene.path)
                            {
                                sceneExistsInBuild = true;
                                break;
                            }
                        }

                        if (sceneExistsInBuild == false)
                        {
                            buildScenes.Add(targetScene);
                        }
                    }
                }
            }

            if (updateSceneBuild == true)
            {
                EditorBuildSettings.scenes = buildScenes.ToArray();
            }
        }