public int GetConfigIndex(SceneConfig thisEntry) { var index = -1; if (sceneConfig == null) { return(index); } if (thisEntry == null) { return(index); } if (!sceneConfig.config.Contains(thisEntry)) { return(index); } for (var i = 0; i < sceneConfig.config.Count; i++) { if (sceneConfig.config[i] == thisEntry) { index = i; } } return(index); }
/// <summary> /// Load a specific scene config /// </summary> public void LoadSceneConfig(SceneConfig config, bool unloadExisting) { for (int i = 0; i < config.sceneList.Count; i++) { if (i == 0) { // if we need to unload existing, then load the first in single mode, otherwise everything is additive LoadScene(config.sceneList[i], !unloadExisting); } else { // and the rest additive LoadScene(config.sceneList[i], true); } } }
public void ReorderListEntry(SceneConfig thisEntry, ListSort sort) { if (thisEntry == null) { return; } // get our current index var index = GetConfigIndex(thisEntry); // remove the old entry sceneConfig.config.RemoveAt(index); switch (sort) { case ListSort.MovetoTop: { // insert at the top sceneConfig.config.Insert(0, thisEntry); break; } case ListSort.MoveToBottom: { // add it to the end sceneConfig.config.Add(thisEntry); break; } case ListSort.MoveUp: { var newIndex = (index - 1); sceneConfig.config.Insert(newIndex, thisEntry); break; } case ListSort.MoveDown: { var newIndex = (index + 1); sceneConfig.config.Insert(newIndex, thisEntry); break; } } }
public override void OnInspectorGUI() { serializedObject.Update(); sceneConfig = (MultiSceneLoader)target; EditorGUILayout.Space(); GUILayout.BeginVertical(); { GUILayout.Label(Loc.WindowTitle, EditorStyles.boldLabel); GUILayout.Label(Loc.TopDesc, EditorStyles.helpBox); GUILayout.Space(15f); GUILayout.Label(Loc.ConfigList, EditorStyles.boldLabel); GUILayout.BeginHorizontal(); { GUILayout.Space(15f); GUILayout.BeginVertical(); { // Render our config editors for (var j = 0; j < sceneConfig.config.Count; j++) { var entry = sceneConfig.config[j]; if (foldoutState.ContainsKey(entry)) { foldoutState[entry] = EditorGUILayout.Foldout(foldoutState[entry], entry.name); } else { foldoutState.Add(entry, false); foldoutState[entry] = EditorGUILayout.Foldout(foldoutState[entry], entry.name); } if (foldoutState[entry]) { GUILayout.BeginHorizontal(); { GUILayout.Space(10f); GUILayout.BeginVertical(); { GUILayout.BeginHorizontal(); { GUILayout.Label(Loc.ConfigName, GUILayout.Width(120f)); entry.name = GUILayout.TextField(entry.name); } GUILayout.EndHorizontal(); // scene list for (var i = 0; i < entry.sceneList.Count; i++) { GUILayout.BeginHorizontal(); { entry.sceneList[i] = EditorGUILayout.ObjectField(Loc.SceneName, entry.sceneList[i], typeof(Object), false); if (GUILayout.Button("-", GUILayout.Width(35f))) { entry.sceneList.Remove(entry.sceneList[i]); } } GUILayout.EndHorizontal(); } if (GUILayout.Button(Loc.AddNewScene)) { entry.sceneList.Add(new Object()); } GUILayout.Space(15f); if (sceneConfig.config.Count > 1) { GUILayout.Label(Loc.MoveConfig, EditorStyles.helpBox); GUILayout.BeginHorizontal(); { if (GUILayout.Button(Loc.MoveTop)) { ReorderListEntry(entry, ListSort.MovetoTop); } if (GetConfigIndex(entry) != 0) { if (GUILayout.Button(Loc.MoveUp)) { ReorderListEntry(entry, ListSort.MoveUp); } } if (GetConfigIndex(entry) != sceneConfig.config.Count - 1) { if (GUILayout.Button(Loc.MoveDown)) { ReorderListEntry(entry, ListSort.MoveDown); } } if (GUILayout.Button(Loc.MoveBottom)) { ReorderListEntry(entry, ListSort.MoveToBottom); } } GUILayout.EndHorizontal(); } if (GUILayout.Button(Loc.RemoveConfig)) { sceneConfig.config.Remove(entry); foldoutState.Remove(entry); } GUILayout.Space(15f); } GUILayout.EndVertical(); } GUILayout.EndHorizontal(); } } } GUILayout.EndVertical(); } GUILayout.EndHorizontal(); if (GUILayout.Button(Loc.AddNewConfig)) { var newConfig = new SceneConfig() { name = Loc.NewConfigName }; sceneConfig.config.Add(newConfig); } EditorGUILayout.Space(); GUILayout.Label(Loc.LoadAllScenes, EditorStyles.boldLabel); EditorGUILayout.Space(); if (GUILayout.Button(Loc.LoadAllScenes, GUILayout.MinHeight(100), GUILayout.Height(50))) { sceneConfig.LoadAllScenes(); } GUILayout.Label(Loc.LoadAllScenesDesc, EditorStyles.helpBox); EditorGUILayout.Space(); GUILayout.Label(Loc.LoadSubScenes, EditorStyles.boldLabel); GUILayout.Label(Loc.LoadSubScenesDesc, EditorStyles.helpBox); foreach (var entry in sceneConfig.config) { EditorGUILayout.Space(); var buttonText = string.Format(Loc.LoadXScenes, entry.name); if (GUILayout.Button(buttonText, GUILayout.MinHeight(100), GUILayout.Height(50))) { sceneConfig.LoadSceneConfig(entry, true); } GUILayout.Label(Loc.LoadOnlyScenes + entry.name + ".", EditorStyles.helpBox); } } GUILayout.EndVertical(); serializedObject.ApplyModifiedProperties(); if (GUI.changed) { EditorUtility.SetDirty(sceneConfig); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } }