using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using UnityEditor; using UnityEditor.Compilation; using UnityEditor.UIElements; using UnityEngine; using UnityEngine.UIElements; using Object = UnityEngine.Object; namespace RPGCoreCommon.Settings.Editor { internal class SettingsEditorWindow : EditorWindow { [SerializeField] private VisualTreeAsset _visualTreeAsset; private const string FolderName = "_CustomSettings"; private const string FolderPath = "Assets/" + FolderName; private const string CreateExampleContent = @"using RPGCoreCommon.Settings; [CustomSettings(""Example Custom Settings"")] public class ExampleCustomSettingsSO : CustomSettingsSO { public string exampleText; public int exampleNumber; } "; // ELEMENTS private ScrollView _listElement; private ObjectField _objectField; private InspectorElement _inspectorElement; private VisualElement _errorElement; private VisualElement _missingElement; private Button _reloadDomainButton; private Button _createExampleButton; private Button _createMissingButton; // SETTINGS private MainSettingsSO _mainSettings; private Dictionary _settingsTypeMap; private string _currentKey; [MenuItem("TheVVaS/RPGCore/Settings Editor")] public static void ShowSettingsEditor() { var window = GetWindow(); window.titleContent = new GUIContent("Custom Settings Editor"); window.Show(); } public override void SaveChanges() { _mainSettings.settings.ForEach(EditorUtility.SetDirty); _mainSettings.settings.ForEach(AssetDatabase.SaveAssetIfDirty); EditorUtility.SetDirty(_mainSettings); AssetDatabase.SaveAssetIfDirty(_mainSettings); hasUnsavedChanges = false; } private void CreateGUI() { _visualTreeAsset.CloneTree(rootVisualElement); _listElement = rootVisualElement.Q("cs-left"); _listElement.Clear(); _objectField = rootVisualElement.Q("cs-settings-object"); _objectField.RegisterValueChangedCallback(ev => OnObjectChanged(ev.newValue)); _inspectorElement = rootVisualElement.Q("cs-settings-inspector"); _errorElement = rootVisualElement.Q("cs-error"); _missingElement = rootVisualElement.Q("cs-missing"); _reloadDomainButton = rootVisualElement.Q