NLDClient-yudde/ProjectNLD/Assets/Editor/Tools/AutoConfig/ConfigWindow.cs

500 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 class DownloadConfigData
{
public string excelName;
public bool isDone
{
get
{
return downloader.isFinished;
}
}
public WPExcelDownloader downloader;
}
public class ConfigWindow : EditorWindow
{
private List<ConfigInfo> m_Configs;
private bool ExportClient;
private bool ExportServer;
private bool NeedDownload;
private bool _isGenMixKey;
private bool _isDownloading;
private Vector2 scrollPosition = Vector2.zero;
private Vector2 _scrollPositionDownload = 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";
public const string DATA_STRING_LOCALIZE_CN = "Assets/Config/Data/Localize/CN";
public const string DATA_STRING_LOCALIZE_EN = "Assets/Config/Data/Localize/EN";
/// <summary>
/// 0 未知
/// 1 checking
/// 2 ok
/// 3 failed
/// </summary>
private int _authState = 0;
public static void ShowWindow()
{
var window = GetWindow<ConfigWindow>();
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<ConfigInfo>();
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;
m_Configs.Add(ci);
}
m_Configs.Sort((a,
b) => a.Name.CompareTo(b.Name));
}
else
{
Debug.LogError($"配置文件不存在path={combiePath}");
}
ExportClient = true;
ExportServer = false;
_isGenMixKey = 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_AXoAQAavAFIi9riMuy9Q5CMxcHei1", cookie);//e3_AQIA8QbmAKEFwoGRFPhT9uizRsOaA
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_AXoAQAavAFI2YSsTvvuQ9aS06iieP";
Application.OpenURL(url);
}
private async void _RefreshList()
{
await ConfigTools.DownloadConfig(cookie);
InitData();
}
private void _ShowAuthState()
{
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;
}
}
private void _ShowRefreshConfigList()
{
GUILayout.BeginHorizontal();
if (GUILayout.Button("刷新Config List"))
{
EditorPrefs.SetString("ConfCookie", cookie);
_RefreshList();
}
if (GUILayout.Button("打开excel所在路径"))
{
var openPath = ConfigTools.CONFIG_DIR + "Datas/";
EditorUtility.RevealInFinder(openPath);
}
GUILayout.EndHorizontal();
}
private void _ShowExcelList()
{
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
for (int i = 0; i < m_Configs.Count; i++)
{
var excelName = m_Configs[i].Name;
m_Configs[i].Check = EditorGUILayout.ToggleLeft(excelName, m_Configs[i].Check);
}
EditorGUILayout.EndScrollView();
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);
EditorGUILayout.BeginHorizontal();
ExportClient = EditorGUILayout.ToggleLeft("导出客户端", ExportClient);
ExportServer = EditorGUILayout.ToggleLeft("导出服务端", ExportServer);
EditorGUILayout.EndHorizontal();
GUILayout.Space(10);
EditorGUILayout.BeginHorizontal();
_isGenMixKey = EditorGUILayout.ToggleLeft("导出时生成MixKey", _isGenMixKey);
GUILayout.Space(10);
NeedDownload = EditorGUILayout.ToggleLeft("下载选中配置", NeedDownload);
GUILayout.EndHorizontal();
}
private void _ShowGenBtn()
{
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 _OnGUIContent()
{
GUILayout.Space(10);
_ShowAuthState();
_ShowRefreshConfigList();
GUILayout.Space(10);
EditorGUILayout.BeginHorizontal();
GUILayout.Label("配置列表:", EditorStyles.boldLabel);
GUILayout.Label("共计:" + m_Configs.Count);
EditorGUILayout.EndHorizontal();
if (_isDownloading)
{
EditorGUILayout.HelpBox("正在下载中,请稍后", MessageType.Warning);
_ShowDonwloadExcels();
}
else
{
_ShowExcelList();
GUILayout.Space(10);
_ShowGenBtn();
}
GUILayout.Space(10);
if (GUILayout.Button("生成MixKey配置"))
{
_GenMixKeyConfig();
//GenMixKeyTool.ReplaceMixKey();
}
}
private void _ShowDonwloadExcels()
{
var configList = DownloadConfig.downloadConfigs;
_scrollPositionDownload = GUILayout.BeginScrollView(_scrollPositionDownload);
for (int i = 0; i < configList.Count; i++)
{
var config = configList[i];
GUILayout.BeginHorizontal();
GUILayout.Label(config.excelName, GUILayout.Width(200));
if (config.isDone)
{
if (config.downloader.isCanceled)
{
GUILayout.Label("取消下载", GUILayout.Width(100));
}
else if (!config.downloader.isDownloaded)
{
GUILayout.Label("下载失败", GUILayout.Width(100));
}
else
{
GUILayout.Label("下载完成", GUILayout.Width(100));
}
}
else
{
GUILayout.Label("下载中", GUILayout.Width(100));
if (GUILayout.Button("取消下载"))
{
config.downloader.Cancel();
}
}
GUILayout.EndHorizontal();
}
GUILayout.EndScrollView();
if (GUILayout.Button("全部取消", GUILayout.Height(40)))
{
for (int i = 0; i < configList.Count; i++)
{
var config = configList[i];
if (config.isDone)
{
continue;
}
config.downloader.Cancel();
}
}
}
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++)
{
if (m_Configs[i].Check)
needDownload = true;
}
if (needDownload && NeedDownload)
{
_isDownloading = true;
await DownloadConfig.AutoProcessConfig(m_Configs, cookie);
_isDownloading = false;
}
else
{
Debug.Log("当前没有需要下载的配置,已跳过");
}
await UniTask.Delay(100);
if (ExportClient)
{
var lubanAsset = AssetDatabase.LoadAssetAtPath<LubanExportConfig>("Assets/Editor/Tools/Luban_Client.asset");
var lubanLocalizeCNAsset = AssetDatabase.LoadAssetAtPath<LubanExportConfig>("Assets/Editor/Tools/Luban_Client_CN.asset");
var lubanLocalizeENAsset = AssetDatabase.LoadAssetAtPath<LubanExportConfig>("Assets/Editor/Tools/Luban_Client_EN.asset");
var genSuccess = lubanAsset.Gen();
var genCNSuccess = lubanLocalizeCNAsset.Gen();
var genENSuccess = lubanLocalizeENAsset.Gen();
_ClearLocalizeDir();
if (genSuccess && _isGenMixKey)
{
_GenMixKeyConfig();
}
}
if (ExportServer)
{
var lubanAsset = AssetDatabase.LoadAssetAtPath<LubanExportConfig>("Assets/Editor/Tools/Luban_Server.asset");
lubanAsset.Gen();
}
}
private void _GenMixKeyConfig()
{
//GenMixKeyTool.GenMixKeyFile();
MixKeyGenJson.IsGenJsonProcess = true;
GenMixKeyTool.GenMixKeyJson();
}
/// <summary>
/// 清理本地化生成的无用json文件
/// </summary>
private void _ClearLocalizeDir()
{
if (Directory.Exists(DATA_STRING_LOCALIZE_CN))
{
foreach (var file in Directory.GetFileSystemEntries(DATA_STRING_LOCALIZE_CN))
{
if (!file.Contains("stringcfg"))
{
File.Delete(file);
}
}
}
if (Directory.Exists(DATA_STRING_LOCALIZE_EN))
{
foreach (var file in Directory.GetFileSystemEntries(DATA_STRING_LOCALIZE_EN))
{
if (!file.Contains("stringcfg"))
{
File.Delete(file);
}
}
}
AssetDatabase.Refresh();
}
}