162 lines
6.5 KiB
C#
162 lines
6.5 KiB
C#
using System;
|
||
using System.Reflection;
|
||
using UnityEditor;
|
||
using UnityEngine;
|
||
|
||
|
||
namespace HybridCLR.Editor.Installer
|
||
{
|
||
public class InstallerWindow : EditorWindow
|
||
{
|
||
private InstallerController m_Controller;
|
||
|
||
string _hybridclrVersion = "";
|
||
string _il2cppPlusVersion = "";
|
||
|
||
private void OnEnable()
|
||
{
|
||
m_Controller = new InstallerController();
|
||
}
|
||
|
||
private void OnGUI()
|
||
{
|
||
var rect = new Rect
|
||
{
|
||
x = EditorGUIUtility.currentViewWidth - 24,
|
||
y = 5,
|
||
width = 24,
|
||
height = 24
|
||
};
|
||
var content = EditorGUIUtility.IconContent("Settings");
|
||
content.tooltip = "点击打开HybridCLR Settings";
|
||
if (GUI.Button(rect, content, GUI.skin.GetStyle("IconButton")))
|
||
{
|
||
SettingsService.OpenProjectSettings("Project/HybridCLR Settings");
|
||
}
|
||
|
||
string il2cppBranch = m_Controller.Il2CppBranch;
|
||
string minCompatibleVersion = m_Controller.GetMinCompatibleVersion(il2cppBranch);
|
||
GUI.enabled = true;
|
||
GUILayout.Space(10f);
|
||
|
||
EditorGUILayout.BeginVertical("box");
|
||
bool hasInstall = m_Controller.HasInstalledHybridCLR();
|
||
EditorGUILayout.LabelField($"安装状态:{(hasInstall ? "已安装" : "未安装")}", EditorStyles.boldLabel);
|
||
|
||
string hybridclrLocalVersion = m_Controller.HybridclrLocalVersion;
|
||
string il2cppPlusLocalVersion = m_Controller.Il2cppPlusLocalVersion;
|
||
if (hasInstall)
|
||
{
|
||
EditorGUILayout.LabelField($"HybridCLR 版本: {hybridclrLocalVersion}");
|
||
GUILayout.Space(5f);
|
||
EditorGUILayout.LabelField($"il2cpp_plus 版本: {il2cppPlusLocalVersion}");
|
||
GUILayout.Space(5f);
|
||
//GUIInstallButton("检查更新", "检查", UpdateHybridCLR);
|
||
//GUILayout.Space(40f);
|
||
}
|
||
|
||
GUISelectUnityDirectory($"il2cpp_plus分支对应的Unity兼容版本的il2cpp路径", "Select");
|
||
GUILayout.Space(10f);
|
||
|
||
|
||
EditorGUILayout.BeginHorizontal();
|
||
EditorGUILayout.LabelField("待安装的 hybridclr 仓库版本号(或branch或tag)(默认取最新版本):", GUILayout.MaxWidth(400));
|
||
_hybridclrVersion = EditorGUILayout.TextField(_hybridclrVersion);
|
||
EditorGUILayout.EndHorizontal();
|
||
|
||
EditorGUILayout.BeginHorizontal();
|
||
EditorGUILayout.LabelField($"待安装的 il2cpp_plus 仓库版本号(或branch或tag)(默认取{il2cppBranch}-main分支最新版本):", GUILayout.MaxWidth(400));
|
||
_il2cppPlusVersion = EditorGUILayout.TextField(_il2cppPlusVersion);
|
||
EditorGUILayout.EndHorizontal();
|
||
|
||
|
||
GUIInstallButton("安装hybridclr+il2cpp_plus代码到本地目录", "安装", InitHybridCLR);
|
||
EditorGUILayout.EndVertical();
|
||
}
|
||
|
||
private void GUIInstallButton(string content, string button, Action onClick)
|
||
{
|
||
EditorGUILayout.BeginHorizontal();
|
||
EditorGUILayout.LabelField(content);
|
||
GUI.enabled = m_Controller.CheckValidIl2CppInstallDirectory(m_Controller.Il2CppBranch, m_Controller.Il2CppInstallDirectory) == InstallErrorCode.Ok;
|
||
if (GUILayout.Button(button, GUILayout.Width(100)))
|
||
{
|
||
onClick?.Invoke();
|
||
GUIUtility.ExitGUI();
|
||
}
|
||
GUI.enabled = true;
|
||
EditorGUILayout.EndHorizontal();
|
||
|
||
}
|
||
|
||
|
||
private void GUISelectUnityDirectory(string content, string selectButton)
|
||
{
|
||
EditorGUILayout.BeginHorizontal();
|
||
EditorGUILayout.LabelField(content, GUILayout.MaxWidth(300));
|
||
string il2cppInstallDirectory = m_Controller.Il2CppInstallDirectory = EditorGUILayout.TextField(m_Controller.Il2CppInstallDirectory);
|
||
if (GUILayout.Button(selectButton, GUILayout.Width(100)))
|
||
{
|
||
string temp = EditorUtility.OpenFolderPanel(content, m_Controller.Il2CppInstallDirectory, string.Empty);
|
||
if (!string.IsNullOrEmpty(temp))
|
||
{
|
||
il2cppInstallDirectory = m_Controller.Il2CppInstallDirectory = temp;
|
||
}
|
||
}
|
||
EditorGUILayout.EndHorizontal();
|
||
|
||
InstallErrorCode err = m_Controller.CheckValidIl2CppInstallDirectory(m_Controller.Il2CppBranch, il2cppInstallDirectory);
|
||
switch (err)
|
||
{
|
||
case InstallErrorCode.Ok:
|
||
{
|
||
break;
|
||
}
|
||
case InstallErrorCode.Il2CppInstallPathNotExists:
|
||
{
|
||
EditorGUILayout.HelpBox("li2cpp 路径不存在", MessageType.Error);
|
||
break;
|
||
}
|
||
case InstallErrorCode.InvalidUnityInstallPath:
|
||
{
|
||
EditorGUILayout.HelpBox($"Unity安装目录必须包含版本号,否则无法识别版本", MessageType.Error);
|
||
break;
|
||
}
|
||
case InstallErrorCode.Il2CppInstallPathNotMatchIl2CppBranch:
|
||
{
|
||
EditorGUILayout.HelpBox($"il2cpp 版本不兼容,最小版本为 {m_Controller.GetMinCompatibleVersion(m_Controller.Il2CppBranch)}", MessageType.Error);
|
||
break;
|
||
}
|
||
case InstallErrorCode.NotIl2CppPath:
|
||
{
|
||
EditorGUILayout.HelpBox($"当前选择的路径不是il2cpp目录(必须类似 xxx/il2cpp)", MessageType.Error);
|
||
break;
|
||
}
|
||
default: throw new Exception($"not support {err}");
|
||
}
|
||
}
|
||
|
||
private void InitHybridCLR()
|
||
{
|
||
m_Controller.InitHybridCLR(m_Controller.Il2CppBranch, m_Controller.Il2CppInstallDirectory, _hybridclrVersion, _il2cppPlusVersion);
|
||
}
|
||
|
||
private void UpdateHybridCLR()
|
||
{
|
||
bool hasUpdateIl2Cpp = m_Controller.HasUpdateIl2Cpp(m_Controller.Il2CppBranch);
|
||
if (hasUpdateIl2Cpp)
|
||
{
|
||
bool ret = EditorUtility.DisplayDialog("检查更新", "版本不一致", "更新","取消");
|
||
if (ret)
|
||
{
|
||
InitHybridCLR();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
EditorUtility.DisplayDialog("检查更新", "暂无更新", "确定");
|
||
}
|
||
}
|
||
}
|
||
}
|