| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | using System;using System.Reflection;using UnityEditor;using UnityEditor.Presets;using UnityEngine;using UnityEngine.UIElements;namespace HybridCLR.Editor.Settings{    public class HybridCLRSettingsProvider : SettingsProvider    {        private SerializedObject _serializedObject;        private SerializedProperty _enable;        private SerializedProperty _useGlobalIl2cpp;        private SerializedProperty _hybridclrRepoURL;        private SerializedProperty _il2cppPlusRepoURL;        private SerializedProperty _hotUpdateAssemblyDefinitions;        private SerializedProperty _hotUpdateAssemblies;        private SerializedProperty _preserveHotUpdateAssemblies;        private SerializedProperty _hotUpdateDllCompileOutputRootDir;        private SerializedProperty _externalHotUpdateAssemblyDirs;        private SerializedProperty _strippedAOTDllOutputRootDir;        private SerializedProperty _patchAOTAssemblies;        private SerializedProperty _outputLinkFile;        private SerializedProperty _outputAOTGenericReferenceFile;        private SerializedProperty _maxGenericReferenceIteration;        private SerializedProperty _maxMethodBridgeGenericIteration;        public HybridCLRSettingsProvider() : base("Project/HybridCLR Settings", SettingsScope.Project) { }        public override void OnActivate(string searchContext, VisualElement rootElement)        {            InitGUI();        }        private void InitGUI()        {            var setting = HybridCLRSettings.LoadOrCreate();            _serializedObject?.Dispose();            _serializedObject = new SerializedObject(setting);            _enable = _serializedObject.FindProperty("enable");            _useGlobalIl2cpp = _serializedObject.FindProperty("useGlobalIl2cpp");            _hybridclrRepoURL = _serializedObject.FindProperty("hybridclrRepoURL");            _il2cppPlusRepoURL = _serializedObject.FindProperty("il2cppPlusRepoURL");            _hotUpdateAssemblyDefinitions = _serializedObject.FindProperty("hotUpdateAssemblyDefinitions");            _hotUpdateAssemblies = _serializedObject.FindProperty("hotUpdateAssemblies");            _preserveHotUpdateAssemblies = _serializedObject.FindProperty("preserveHotUpdateAssemblies");            _hotUpdateDllCompileOutputRootDir = _serializedObject.FindProperty("hotUpdateDllCompileOutputRootDir");            _externalHotUpdateAssemblyDirs = _serializedObject.FindProperty("externalHotUpdateAssembliyDirs");            _strippedAOTDllOutputRootDir = _serializedObject.FindProperty("strippedAOTDllOutputRootDir");            _patchAOTAssemblies = _serializedObject.FindProperty("patchAOTAssemblies");            _outputLinkFile = _serializedObject.FindProperty("outputLinkFile");            _outputAOTGenericReferenceFile = _serializedObject.FindProperty("outputAOTGenericReferenceFile");            _maxGenericReferenceIteration = _serializedObject.FindProperty("maxGenericReferenceIteration");            _maxMethodBridgeGenericIteration = _serializedObject.FindProperty("maxMethodBridgeGenericIteration");        }        public override void OnGUI(string searchContext)        {            if (_serializedObject == null || !_serializedObject.targetObject)            {                InitGUI();            }            _serializedObject.Update();            EditorGUI.BeginChangeCheck();            EditorGUILayout.PropertyField(_enable);            EditorGUILayout.PropertyField(_hybridclrRepoURL);            EditorGUILayout.PropertyField(_il2cppPlusRepoURL);            EditorGUILayout.PropertyField(_useGlobalIl2cpp);            EditorGUILayout.PropertyField(_hotUpdateAssemblyDefinitions);            EditorGUILayout.PropertyField(_hotUpdateAssemblies);            EditorGUILayout.PropertyField(_preserveHotUpdateAssemblies);            EditorGUILayout.PropertyField(_hotUpdateDllCompileOutputRootDir);            EditorGUILayout.PropertyField(_externalHotUpdateAssemblyDirs);            EditorGUILayout.PropertyField(_strippedAOTDllOutputRootDir);            EditorGUILayout.PropertyField(_patchAOTAssemblies);            EditorGUILayout.PropertyField(_outputLinkFile);            EditorGUILayout.PropertyField(_outputAOTGenericReferenceFile);            EditorGUILayout.PropertyField(_maxGenericReferenceIteration);            EditorGUILayout.PropertyField(_maxMethodBridgeGenericIteration);            if (EditorGUI.EndChangeCheck())            {                _serializedObject.ApplyModifiedProperties();                HybridCLRSettings.Save();            }        }        public override void OnDeactivate()        {            base.OnDeactivate();            HybridCLRSettings.Save();        }        static HybridCLRSettingsProvider s_provider;        [SettingsProvider]        public static SettingsProvider CreateMyCustomSettingsProvider()        {            if (s_provider == null)            {                s_provider = new HybridCLRSettingsProvider();            }            return s_provider;        }    }}
 |