using UnityEditor; using UnityEngine; using System.Collections.Generic; using System.IO; using Cysharp.Threading.Tasks; using System; using AutoConfig; using Luban.Editor; using UnityEngine.Networking; public class ConfigInfo { public string Name; public string DocID; public bool Check; public bool IsDownloadOK; public bool IsError; } public class ConfigWindow : EditorWindow { private List m_Configs; private bool ExportClient; private bool ExportServer; private bool NeedDownload; private Vector2 scrollPosition = Vector2.zero; private string cookie; const string DATA_TABLE_ASSEMBLY_REFERENCE_PATH = "Assets/Code/Scripts/Gameplay/DataTable/FrameWork.asmref"; const string DATA_TABLE_OUTSIDE_ASSEMBLY_REFERENCE_PATH = "Assets/Code/Scripts/Gameplay/FrameWork.asmref"; /// /// 0 未知 /// 1 checking /// 2 ok /// 3 failed /// private int _authState = 0; public static void ShowWindow() { var window = GetWindow(); window.titleContent = new GUIContent("自动化配置工具"); window.maximized = false; window.minSize = new Vector2(300, 300); int width = 600; int height = 400; var x = (Screen.currentResolution.width - width) / 2; var y = (Screen.currentResolution.height - height) / 2; Rect centerRect = new Rect(x, y, width, height); window.position = centerRect; window._authState = 0; window.InitData(); window.Show(); window.Focus(); } public void InitData() { var dir = new DirectoryInfo(ConfigTools.CONFIG_DIR); var combiePath = dir.FullName + "Datas/AConfigList.xlsx"; // var configPath = ConfigTools.CONFIG_DIR + "/config_list.txt"; // var lines = File.ReadAllLines(configPath); m_Configs = new List(); if (File.Exists(combiePath)) { var excelDataList = ReadExcelList.ReadList(combiePath); for (var i = 0; i < excelDataList.Count; i++) { var lineData = excelDataList[i]; var docName = lineData.excelName; var docId = lineData.docId; ConfigInfo ci = new ConfigInfo(); ci.Name = docName; ci.DocID = docId; ci.Check = true; ci.IsDownloadOK = false; m_Configs.Add(ci); } m_Configs.Sort((a,b)=>a.Name.CompareTo(b.Name)); } else { Debug.LogError($"配置文件不存在,path={combiePath}"); } ExportClient = true; ExportServer = false; NeedDownload = true; cookie = EditorPrefs.GetString("ConfCookie", ""); } void OnGUI() { if (m_Configs == null) { InitData(); } OnGUIContent(); } private async void _StartChecking() { if (string.IsNullOrEmpty(cookie)) return; _authState = 1; var downLoader = new WPExcelDownloader("AConfigList.xlsx", "e3_AQIA8QbmAKEFwoGRFPhT9uizRsOaA", cookie); Debug.Log("开始检查授权"); var checkResult = await downLoader.OnlyCheck(); if (checkResult) { Debug.Log("授权成功"); _authState = 2; } else { Debug.LogError("授权失败"); _authState = 3; } } private void _ShowSIDConfig() { cookie = EditorGUILayout.TextField("Cookie:", cookie); GUILayout.BeginHorizontal(); if (GUILayout.Button("重新检查授权")) { _StartChecking(); } if (GUILayout.Button("打开授权网页")) { _OpenAuthWindow(); } GUILayout.EndHorizontal(); } private void _OpenAuthWindow() { var url = "https://doc.weixin.qq.com/sheet/e3_Ab4A8gbmAKEPGX4tMzIRYCedjxh0O"; Application.OpenURL(url); } private async void _RefreshList() { await ConfigTools.DownloadConfig(cookie); InitData(); } void OnGUIContent() { GUILayout.Space(10); switch (_authState) { case 0: // 未知 if (string.IsNullOrEmpty(cookie)) { // 未配置 EditorGUILayout.HelpBox("请先配置sid和cookie", MessageType.Error); _ShowSIDConfig(); } else { // 已配置 _ShowSIDConfig(); _StartChecking(); } break; case 1: EditorGUILayout.HelpBox("检查授权中", MessageType.Warning); _ShowSIDConfig(); break; case 2: EditorGUILayout.HelpBox("授权成功", MessageType.Info); _ShowSIDConfig(); break; case 3: EditorGUILayout.HelpBox("授权失败", MessageType.Error); _ShowSIDConfig(); break; } if (GUILayout.Button("刷新Config List")) { EditorPrefs.SetString("ConfCookie", cookie); _RefreshList(); } GUILayout.Space(10); EditorGUILayout.BeginHorizontal(); GUILayout.Label("配置列表:", EditorStyles.boldLabel); GUILayout.Label("共计:" + m_Configs.Count); EditorGUILayout.EndHorizontal(); scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); for (int i = 0; i < m_Configs.Count; i++) { var name = m_Configs[i].Name; if (m_Configs[i].Check) { if (m_Configs[i].IsDownloadOK) name += "\t[下载成功]"; else if (m_Configs[i].IsError) name += "\t[下载失败]"; } m_Configs[i].Check = EditorGUILayout.ToggleLeft(name, m_Configs[i].Check); } EditorGUILayout.EndScrollView(); GUILayout.Space(10); GUILayout.BeginHorizontal(); bool exportC = EditorGUILayout.ToggleLeft("导出客户端", ExportClient); if (exportC != ExportClient) { if (exportC) ExportServer = false; ExportClient = exportC; } // bool exportS = EditorGUILayout.ToggleLeft("导出服务器", ExportServer); // if (exportS != ExportServer) // { // if (exportS) // ExportClient = false; // // ExportServer = exportS; // } GUILayout.EndHorizontal(); GUILayout.Space(10); NeedDownload = EditorGUILayout.ToggleLeft("下载选中配置", NeedDownload); GUILayout.Space(10); GUILayout.BeginHorizontal(); if (GUILayout.Button("全选")) { for (int i = 0; i < m_Configs.Count; i++) { m_Configs[i].Check = true; } } if (GUILayout.Button("全不选")) { for (int i = 0; i < m_Configs.Count; i++) { m_Configs[i].Check = false; } } GUILayout.EndHorizontal(); GUILayout.Space(10); GUILayout.BeginHorizontal(); string buttonName = "开始"; if (NeedDownload) { buttonName += " 【下载配置】"; } if (ExportClient) { buttonName += " 【导出到 Client】"; } if (ExportServer) { buttonName += " 【导出到 Server】"; } if (GUILayout.Button(buttonName)) { if (string.IsNullOrEmpty(cookie)) { EditorUtility.DisplayDialog("配置工具", "请先配置sid和cookie", "OK"); return; } PlayerPrefs.SetString("ConfCookie", cookie); _AsyncAction(); } GUILayout.EndHorizontal(); } private void MoveDataTableAssemblyReference(bool isOut) { if (isOut) AssetDatabase.MoveAsset(DATA_TABLE_ASSEMBLY_REFERENCE_PATH, DATA_TABLE_OUTSIDE_ASSEMBLY_REFERENCE_PATH); else AssetDatabase.MoveAsset(DATA_TABLE_OUTSIDE_ASSEMBLY_REFERENCE_PATH, DATA_TABLE_ASSEMBLY_REFERENCE_PATH); } private async void _AsyncAction() { bool needDownload = false; for (int i = 0; i < m_Configs.Count; i++) { m_Configs[i].IsDownloadOK = false; if (m_Configs[i].Check) needDownload = true; } if (needDownload && NeedDownload) { await AutoConfig.DownloadConfig.AutoProcessConfig(m_Configs, cookie); } else { Debug.Log("当前没有需要下载的配置,已跳过"); } await UniTask.Delay(100); if (ExportClient) { var lubanAsset = AssetDatabase.LoadAssetAtPath("Assets/Editor/Tools/Luban_Client.asset"); lubanAsset.Gen(); } if (ExportServer) ConfigTools.ConfigExportServer(); } }