public override void OnInspectorGUI() { ScriptableScenePackage scenePackage = (ScriptableScenePackage)target; Undo.RecordObject(scenePackage, "ScenePackage"); EditorGUI.BeginChangeCheck(); { SceneAsset[] scenes = FindAssetExtension.GetAllInstances <SceneAsset>(); string[] sceneNames = new string[scenes.Length]; for (int i = 0; i < scenes.Length; i++) { sceneNames[i] = scenes[i].name; } sceneNames = sceneNames.OrderBy(x => x).ToArray(); int currentIndex = 0; for (int i = 0; i < scenes.Length; i++) { if (sceneNames[i] == scenePackage.activeScene) { currentIndex = i; break; } } scenePackage.activeScene = sceneNames[EditorGUILayout.Popup("Active Scene", currentIndex, sceneNames)]; GUILayout.Space(10); EditorGUILayout.BeginVertical("box"); { scenePackage.startScenePackages = (ScriptableScenePackage[])AutoClassInspectorExtension.GenericField("Start Scene package", scenePackage.startScenePackages, typeof(ScriptableScenePackage[])); } EditorGUILayout.EndVertical(); GUILayout.Space(10); DisplayArray("Scenes", ref scenePackage.scenes, sceneNames); GUILayout.Space(5); DisplayArray("Cheat Scenes", ref scenePackage.cheatScenes, sceneNames); GUILayout.Space(10); EditorGUILayout.BeginVertical("box"); { scenePackage.endScenePackages = (ScriptableScenePackage[])AutoClassInspectorExtension.GenericField("End Scene package", scenePackage.endScenePackages, typeof(ScriptableScenePackage[])); } EditorGUILayout.EndVertical(); DisplayArray("Optional Scenes", ref scenePackage.optionalScenes, sceneNames); GUILayout.Space(20); scenePackage.folderName = EditorGUILayout.TextField("Folder Name", scenePackage.folderName); scenePackage.showOnGUI = EditorGUILayout.Toggle("Show on GUI", scenePackage.showOnGUI); scenePackage.participateToOptimization = EditorGUILayout.Toggle("Participate to optimization", scenePackage.participateToOptimization); } if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(scenePackage); } GUILayout.Space(20); if (GUILayout.Button("Load it")) { EditorScenePackageExtension.EditorLoadScenePackage(scenePackage); } }
public override void OnInspectorGUI() { serializedObject.Update(); EditorGUI.BeginChangeCheck(); PersistentDataSystem persistentData = ((PersistentDataSystem)target); EditorGUILayout.PropertyField(serializedObject.FindProperty("dataVersion"), true); GUILayout.Space(5); EditorGUILayout.PropertyField(serializedObject.FindProperty("autoSave"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("saveMode"), true); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("awakeLoadMode"), true); if (persistentData.awakeLoadMode == PersistentDataSystem.AwakeLoadMode.SPECIFIC_CLASS) { //FIND ALL SAVEDDATA BY REFLECTION List <string> options = new List <string>(); foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) { foreach (Type type in assembly.GetTypes()) { if (type.IsSubclassOf(typeof(SavedData))) { options.Add(type.FullName); } } } foldout = EditorGUILayout.Foldout(foldout, "Class To Load"); if (foldout) { GUILayout.Space(5); GUILayout.BeginVertical(); if (GUILayout.Button("Add Element")) { if (persistentData.classToLoad == null) { persistentData.classToLoad = new List <string>(); } persistentData.classToLoad.Add(""); } if (persistentData.classToLoad != null) { EditorGUI.indentLevel++; for (var i = 0; i < persistentData.classToLoad.Count; i++) { GUILayout.BeginHorizontal(); int selectedType = 0; selectedType = options.FindIndex((x) => { return(x.Equals(persistentData.classToLoad[i])); }); if (selectedType == -1) { selectedType = 0; } selectedType = EditorGUILayout.Popup("Type", selectedType, options.ToArray()); persistentData.classToLoad[i] = options[selectedType]; if (GUILayout.Button("X", GUILayout.Width(18))) { persistentData.classToLoad.RemoveAt(i); } GUILayout.EndHorizontal(); } } EditorGUI.indentLevel--; GUILayout.EndVertical(); } EditorGUILayout.Space(); } persistentData.Init(); GUILayout.Space(10); if (persistentData.savedDataDictionnary != null) { foreach (List <SavedData> sdList in persistentData.savedDataDictionnary.Values) { if (sdList != null && sdList.Count > 0) { GUILayout.BeginVertical(EditorStyles.textArea); GUILayout.Space(2); GUIStyle option = new GUIStyle(); option.alignment = TextAnchor.MiddleCenter; option.fontSize = 15; option.fontStyle = FontStyle.Bold; GUILayout.Label(sdList[0].GetType().Name, option); GUILayout.Space(5); foreach (SavedData sd in sdList) { AutoClassInspectorExtension.ShowAutoEditorGUI(sd); GUILayout.Space(2); } GUILayout.EndVertical(); GUILayout.Space(2); } } SaveDataEditor(); } GUILayout.Space(10); LoadDataEditor(); GUILayout.Space(10); if (GUILayout.Button("Unload saved data")) { persistentData.UnloadAllSavedData(); } GUILayout.Space(10); serializedObject.ApplyModifiedProperties(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "Persisdent Data System"); } }