private static string ConvertLuaPathSourceToExported(string sourceLuaPath)
        {
            string exportedLuaPath = string.Format("{0}/{1}{2}"
                                                   , XLuaSetting.GetInstance().ExportedLuaRoot
                                                   , sourceLuaPath.Substring(sourceLuaPath.LastIndexOf(XLuaSetting.LUA_SCRIPT_SIGN) + XLuaSetting.LUA_SCRIPT_SIGN.Length)
                                                   , XLuaSetting.LUA_EXPORTED_EXTENSION);

            return(exportedLuaPath);
        }
        public static void ReimportAllLuaScript()
        {
            string root = XLuaSetting.GetInstance().ExportedLuaRoot;

            if (Directory.Exists(root))
            {
                Directory.Delete(root, true);
            }

            Directory.CreateDirectory(root);
            string[] emptyStrings = new string[0];
            OnPostprocessAllAssets(AssetDatabase.GetAllAssetPaths()
                                   , emptyStrings
                                   , emptyStrings
                                   , emptyStrings);
        }
        public override void OnGUI(string searchContext)
        {
            base.OnGUI(searchContext);

            XLuaSetting setting = XLuaSetting.GetInstance();

            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("保存"))
            {
                XLuaSetting.GetInstance().Save();
            }
            if (GUILayout.Button("重新导入所有Lua脚本"))
            {
                LuaScriptPostprocessor.ReimportAllLuaScript();
            }
            EditorGUILayout.EndHorizontal();

            setting.ExportedLuaRoot = (EGLUtility.Folder("Lua的导出目录", setting.ExportedLuaRoot));
        }
        private static void OnPostprocessAllAssets(string[] importedAssets
                                                   , string[] deletedAssets
                                                   , string[] movedAssets
                                                   , string[] movedFromAssetPaths)
        {
            if (string.IsNullOrEmpty(XLuaSetting.GetInstance().ExportedLuaRoot))
            {
                return;
            }

            bool changed = false;

            try
            {
                for (int iAsset = 0; iAsset < importedAssets.Length; iAsset++)
                {
                    string iterAsset = importedAssets[iAsset];
                    if (!IsLuaScript(iterAsset))
                    {
                        continue;
                    }

                    CreateLua(iterAsset);
                    changed = true;
                }

                for (int iAsset = 0; iAsset < deletedAssets.Length; iAsset++)
                {
                    string iterAsset = deletedAssets[iAsset];
                    if (!IsLuaScript(iterAsset))
                    {
                        continue;
                    }

                    changed |= DeleteLua(iterAsset);
                }

                for (int iAsset = 0; iAsset < movedAssets.Length; iAsset++)
                {
                    string iterAsset = movedFromAssetPaths[iAsset];
                    if (IsLuaScript(iterAsset))
                    {
                        changed |= DeleteLua(iterAsset);
                    }

                    iterAsset = movedAssets[iAsset];
                    if (IsLuaScript(iterAsset))
                    {
                        CreateLua(iterAsset);
                        changed = true;
                    }
                }
            }
            catch (Exception e)
            {
                MDebug.LogError("XLua", "Postprocess lua script Exception:\n" + e.ToString());
            }
            finally
            {
                if (changed)
                {
                    AssetDatabase.Refresh(ImportAssetOptions.Default);
                }
            }
        }