internal SceneCondition CreateNewCondition(string name, System.Type conditionType)
        {
            if (string.IsNullOrEmpty(name))
            {
                Debug.LogError("Name not provided");
                return(null);
            }

            if (conditionType == null)
            {
                return(null);
            }

            if (!conditionType.IsOrIsSubclassOf(typeof(SceneCondition)))
            {
                Debug.LogError("Provided type does not derive from Scene Condition, cannot create");
                return(null);
            }

            SceneCondition newCondition =
                AssetDatabaseExtensions.CreateSubScriptableObject(TargetManager,
                                                                  conditionType, name) as SceneCondition;

            Undo.RegisterCreatedObjectUndo(newCondition, "Create Condition");

            return(newCondition);
        }
        private void InitializeDefaults()
        {
            SceneManagerAssetPath = AssetDatabase.GetAssetPath(SerializedManager.targetObject);

            bool wasCreated = false;

            AssetFilter assetFilter = AssetDatabaseExtensions.
                                      FindOrCreateSubScriptableObject <AssetFilter>(SceneManagerAssetPath, "SceneFilter", out wasCreated);

            if (wasCreated)
            {
                assetFilter.IncludeIfNoMatch = true;
            }

            SerializedSceneFilter = new SerializedObject(assetFilter);

            SceneHunter sceneHunter = AssetDatabaseExtensions.
                                      GetFirstSubAssetOf <SceneHunter>(SceneManagerAssetPath);

            if (sceneHunter == null)
            {
                sceneHunter = AssetDatabaseExtensions.
                              CreateSubScriptableObject <UnitySceneHunter>(SceneManagerAssetPath, "SceneHunter");
            }

            ScenePopulator = new SerializedObject(sceneHunter);

            SceneNodes = AssetDatabaseExtensions.
                         FindOrCreateSubScriptableObject <SceneNodeCollection>(SceneManagerAssetPath, "SceneNodes", out wasCreated);

            if (wasCreated)
            {
                SceneNodes.SceneManager = TargetManager;
            }

            SceneNodes.PopulateSceneInfos();

            SceneNodesObject = new SerializedObject(SceneNodes);
            SceneNodesProp   = SceneNodesObject.FindProperty("sceneNodes");

            if (AssetDatabaseExtensions.GetSubAssetsOfType <SceneVariableContainer>(TargetManager).Count() == 0)
            {
                TargetManager.SceneVariables.name = "ManagerVariables";
                AssetDatabase.AddObjectToAsset(TargetManager.SceneVariables, TargetManager);
                AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(TargetManager));
            }
            SerializedManager.ApplyModifiedProperties();

            ScenesProp       = SerializedManager.FindProperty("scenes");
            EntrySceneIdProp = SerializedManager.FindProperty("entrySceneId");
            AnyScenesProp    = SerializedManager.FindProperty("anyScene");

            UseOnPlayProp = SerializedManager.FindProperty("useOnPlay");
            GoToOnPlay    = SerializedManager.FindProperty("goToOnPlay");

            SerializedVariables = new SerializedSceneVariableCollection(TargetManager.SceneVariables);
        }
        internal void CreateNewVariable(string name, System.Type typeToCreate)
        {
            if (!CanCreateVariable(name, typeToCreate))
            {
                return;
            }

            ScriptableObject variableType =
                AssetDatabaseExtensions.CreateSubScriptableObject(SceneVariablesContainer,
                                                                  typeToCreate, name);

            Undo.SetCurrentGroupName("Variable " + name + " creation");
            int undoGroup = Undo.GetCurrentGroup();

            Undo.RegisterCreatedObjectUndo(variableType, "Created " + name);

            Undo.RegisterCompleteObjectUndo(SceneVariablesContainer, "Created " + name);

            SceneVariablesContainer.CreateNewVariable(name, variableType);

            SerializedContainer.Update();

            Undo.CollapseUndoOperations(undoGroup);
        }