private static void refreshData() { mConfig = XConfig.GetConfig <XRuntimeConfig>(XRuntimeConst.ConfigPath_Resources, AssetLoadType.Resources, false); mDataRefreshed = true; }
public async Task <bool> Start() { if (mInited) { return(true); } mConfig = XConfig.GetConfig <XRuntimeConfig>(XRuntimeConst.ConfigPath_Resources, AssetLoadType.Resources, false); if (mConfig == null) { mStartException = new XRTException("[TinaX.ILRuntime] Connot found config file.", XRuntimeErrorCode.ConfigFileInvalid);; return(false); } #region config if (!mConfig.EnableILRuntime) { return(true); } if (mConfig.EntryMethod.IsNullOrEmpty()) { mStartException = new XRTException("[TinaX.ILRuntime] Entry method is empty", XRuntimeErrorCode.InvalidEntryMethod); return(false); } int _method_last_index = mConfig.EntryMethod.LastIndexOf('.'); if (_method_last_index <= 0) { mStartException = new XRTException("[TinaX.ILRuntime] Entry method is invalid:" + mConfig.EntryMethod, XRuntimeErrorCode.InvalidEntryMethod); return(false); } mEntryMethod_Type = mConfig.EntryMethod.Substring(0, _method_last_index); mEntryMethod_Method = mConfig.EntryMethod.Substring(_method_last_index + 1, mConfig.EntryMethod.Length - _method_last_index - 1); #endregion bool success = await TryInitILAppDomain(); if (success) { registerCLR(); //cli binding string type_name = "ILRuntime.Runtime.Generated.CLRBindings"; string method_name = "Initialize"; var assemblys = AppDomain.CurrentDomain.GetAssemblies(); Type type = null; foreach (var asm in assemblys) { type = asm.GetType(type_name); if (type != null) { break; } } if (type != null) { var method = type.GetMethod(method_name, new Type[] { typeof(ILAppDomain) }); if (method != null) { method.Invoke(null, new object[] { mAppDomain }); } else { Debug.LogError("[TinaX.ILRuntime] CLR binding failed. the method \"Initialize\" not found"); } } else { Debug.LogWarning("[TinaX.ILRuntime] CLRBindings code not found. Please generate CLR binding code in Menu or ProjectSettings."); } } mInited = true; return(true); }
public static SettingsProvider XRuntimeSetting() { return(new SettingsProvider(XRuntimeEditorConst.ProjectSetting_Node, SettingsScope.Project, new string[] { "Nekonya", "TinaX", "ILRuntime", "TinaX.ILRuntime" }) { label = "X ILRuntime", activateHandler = (searconContent, uielementRoot) => { mDataRefreshed = false; }, guiHandler = (searchContent) => { if (!mDataRefreshed) { refreshData(); } if (mConfig == null) { GUILayout.Space(20); GUILayout.Label(XRuntimeProjectSettingI18N.NoConfig); if (GUILayout.Button(XRuntimeProjectSettingI18N.BtnCreateConfigFile, style_btn_normal, GUILayout.MaxWidth(120))) { mConfig = XConfig.CreateConfigIfNotExists <XRuntimeConfig>(XRuntimeConst.ConfigPath_Resources, AssetLoadType.Resources); refreshData(); } } else { GUILayout.Space(20); //Entry Method EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(XRuntimeProjectSettingI18N.EntryMethod, GUILayout.MaxWidth(120)); mConfig.EntryMethod = EditorGUILayout.TextField(mConfig.EntryMethod); EditorGUILayout.EndHorizontal(); GUILayout.Space(3); EditorGUILayout.HelpBox(XRuntimeProjectSettingI18N.Tips_EntryMethod, MessageType.None); //Assembly Load Mode EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(XRuntimeProjectSettingI18N.AssemblyLoadMode, GUILayout.MaxWidth(180)); mConfig.AssemblyLoadMode = (AssemblyLoadingMethod)EditorGUILayout.EnumPopup(mConfig.AssemblyLoadMode); EditorGUILayout.EndHorizontal(); GUILayout.Space(5); if (mConfig.AssemblyLoadMode == AssemblyLoadingMethod.FrameworkAssetsManager) { EditorGUILayout.HelpBox(XRuntimeProjectSettingI18N.Tips_AssemblyLoadMode_Framework, MessageType.None); } else if (mConfig.AssemblyLoadMode == AssemblyLoadingMethod.LoadFromSystemIO) { EditorGUILayout.HelpBox(XRuntimeProjectSettingI18N.Tips_AssemblyLoadMode_SystemIO, MessageType.None); } GUILayout.Space(10); //Framework load mode only if (mConfig.AssemblyLoadMode == AssemblyLoadingMethod.FrameworkAssetsManager) { //Load Path EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(XRuntimeProjectSettingI18N.LoadPath_FrameworkAssetsManager, GUILayout.MaxWidth(180)); mConfig.Dll_LoadPathByFrameworkAssetsManager = EditorGUILayout.TextField(mConfig.Dll_LoadPathByFrameworkAssetsManager); EditorGUILayout.EndHorizontal(); //Symbol Load Path EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(XRuntimeProjectSettingI18N.Synbol_LoadPath_FrameworkAssetsManager, GUILayout.MaxWidth(180)); mConfig.Symbol_LoadPathByFrameworkAssetsManager = EditorGUILayout.TextField(mConfig.Symbol_LoadPathByFrameworkAssetsManager); EditorGUILayout.EndHorizontal(); } GUILayout.Space(20); EditorGUILayout.HelpBox(XRuntimeProjectSettingI18N.Tips_ConnotHotFix, MessageType.Warning); GUILayout.Space(35); TinaXEditor.Utils.EditorGUIUtil.HorizontalLine(); //CLR OUTPUT EditorGUILayout.LabelField(XRuntimeProjectSettingI18N.CLRBinding_Output_Folder); EditorGUILayout.BeginHorizontal(); mConfig.CLRBindingOutputFolder = EditorGUILayout.TextField(mConfig.CLRBindingOutputFolder); if (GUILayout.Button("Select", style_btn_normal, GUILayout.Width(65))) { var path = EditorUtility.OpenFolderPanel("Select CLR BindingOutputFolder", "Assets/", ""); if (!path.IsNullOrEmpty()) { var root_path = Directory.GetCurrentDirectory().Replace("\\", "/"); if (path.StartsWith(root_path)) { path = path.Substring(root_path.Length + 1, path.Length - root_path.Length - 1); path = path.Replace("\\", "/"); mConfig.CLRBindingOutputFolder = path; } else { Debug.LogError("Invalid Path: " + path); } } } EditorGUILayout.EndHorizontal(); } }, deactivateHandler = () => { if (mConfig != null) { EditorUtility.SetDirty(mConfig); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } } }); }