Пример #1
0
        private static void refreshData()
        {
            mConfig = XConfig.GetConfig <XRuntimeConfig>(XRuntimeConst.ConfigPath_Resources, AssetLoadType.Resources, false);



            mDataRefreshed = true;
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
                    }
                }
            });
        }