InstallerWindow.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System;
  2. using System.Reflection;
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace HybridCLR.Editor.Installer
  6. {
  7. public class InstallerWindow : EditorWindow
  8. {
  9. private InstallerController _controller;
  10. string _hybridclrVersion;
  11. string _il2cppPlusVersion;
  12. private void OnEnable()
  13. {
  14. _controller = new InstallerController();
  15. _hybridclrVersion = _controller.HybridCLRRepoInstalledVersion;
  16. if (string.IsNullOrWhiteSpace(_hybridclrVersion))
  17. {
  18. _hybridclrVersion = "main";
  19. }
  20. _il2cppPlusVersion = _controller.Il2CppRepoInstalledVersion;
  21. if (string.IsNullOrWhiteSpace(_il2cppPlusVersion))
  22. {
  23. _il2cppPlusVersion = $"{_controller.MajorVersion}-main";
  24. }
  25. }
  26. private void OnGUI()
  27. {
  28. var rect = new Rect
  29. {
  30. x = EditorGUIUtility.currentViewWidth - 24,
  31. y = 5,
  32. width = 24,
  33. height = 24
  34. };
  35. var content = EditorGUIUtility.IconContent("Settings");
  36. content.tooltip = "点击打开HybridCLR Settings";
  37. if (GUI.Button(rect, content, GUI.skin.GetStyle("IconButton")))
  38. {
  39. SettingsService.OpenProjectSettings("Project/HybridCLR Settings");
  40. }
  41. GUILayout.Space(10f);
  42. EditorGUILayout.BeginVertical("box");
  43. bool hasInstall = _controller.HasInstalledHybridCLR();
  44. EditorGUILayout.LabelField($"安装状态:{(hasInstall ? "已安装" : "未安装")}", EditorStyles.boldLabel);
  45. if (hasInstall)
  46. {
  47. EditorGUILayout.LabelField($"HybridCLR 版本: {_controller.HybridclrLocalVersion}");
  48. GUILayout.Space(5f);
  49. EditorGUILayout.LabelField($"il2cpp_plus 版本: {_controller.Il2cppPlusLocalVersion}");
  50. GUILayout.Space(5f);
  51. //GUIInstallButton("检查更新", "检查", UpdateHybridCLR);
  52. //GUILayout.Space(40f);
  53. }
  54. GUILayout.Space(10f);
  55. EditorGUILayout.BeginHorizontal();
  56. EditorGUILayout.LabelField("待安装的 hybridclr 仓库版本号(或branch或tag)(默认取最新版本):", GUILayout.MaxWidth(400));
  57. _hybridclrVersion = EditorGUILayout.TextField(_hybridclrVersion);
  58. EditorGUILayout.EndHorizontal();
  59. EditorGUILayout.BeginHorizontal();
  60. EditorGUILayout.LabelField($"待安装的 il2cpp_plus 仓库版本号(或branch或tag)(默认取{_controller.MajorVersion}-main分支最新版本):", GUILayout.MaxWidth(400));
  61. _il2cppPlusVersion = EditorGUILayout.TextField(_il2cppPlusVersion);
  62. EditorGUILayout.EndHorizontal();
  63. GUIInstallButton("安装hybridclr+il2cpp_plus代码到本地目录", "安装");
  64. EditorGUILayout.EndVertical();
  65. }
  66. private void GUIInstallButton(string content, string button)
  67. {
  68. EditorGUILayout.BeginHorizontal();
  69. EditorGUILayout.LabelField(content);
  70. if (GUILayout.Button(button, GUILayout.Width(100)))
  71. {
  72. InstallLocalHybridCLR();
  73. GUIUtility.ExitGUI();
  74. }
  75. EditorGUILayout.EndHorizontal();
  76. }
  77. private void InstallLocalHybridCLR()
  78. {
  79. if (!_controller.IsComaptibleVersion())
  80. {
  81. Debug.LogError($"il2cpp 版本不兼容,最小版本为 {_controller.GetCurrentUnityVersionMinCompatibleVersionStr()}");
  82. return;
  83. }
  84. if (string.IsNullOrWhiteSpace(_hybridclrVersion))
  85. {
  86. _hybridclrVersion = "main";
  87. }
  88. if (string.IsNullOrWhiteSpace(_il2cppPlusVersion))
  89. {
  90. _il2cppPlusVersion = $"{_controller.MajorVersion}-main";
  91. }
  92. _controller.InstallLocalHybridCLR(_hybridclrVersion, _il2cppPlusVersion);
  93. }
  94. }
  95. }