ETPackageCreateWindow.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using System;
  2. using UnityEditor;
  3. using UnityEngine;
  4. namespace ET.PackageManager.Editor
  5. {
  6. public class ETPackageCreateWindow : EditorWindow
  7. {
  8. #if !ODIN_INSPECTOR
  9. [MenuItem("ET/ETPackage 创建")]
  10. #endif
  11. private static void OpenWindow()
  12. {
  13. var window = GetWindow<ETPackageCreateWindow>();
  14. if (window != null)
  15. window.Show();
  16. }
  17. public static void CloseWindow()
  18. {
  19. GetWindow<ETPackageCreateWindow>()?.Close();
  20. }
  21. public EPackageCreateType PackageCreateType = EPackageCreateType.All;
  22. public EPackageRuntimeRefType RuntimeRefType = EPackageRuntimeRefType.All;
  23. public EPackageCreateFolderType FolderType = EPackageCreateFolderType.All;
  24. public string PackageAuthor;
  25. public string PackageName;
  26. public string PackageId;
  27. public string DisplayName;
  28. public string AssemblyName;
  29. public string Description;
  30. public bool ForceCreate;
  31. private string PackagePath;
  32. private void OnGUI()
  33. {
  34. EditorGUILayout.LabelField("提示:安装Odin 可使用更详细丰富的界面");
  35. GUILayout.Space(10);
  36. if (GUILayout.Button("ETPackage 创建文档"))
  37. {
  38. Application.OpenURL("https://lib9kmxvq7k.feishu.cn/wiki/O6Ukw7k3SiBHmek8MMwc5HdInev");
  39. }
  40. GUILayout.Space(10);
  41. PackageCreateType = (EPackageCreateType)EditorGUILayout.EnumFlagsField("生成类型", PackageCreateType);
  42. RuntimeRefType = (EPackageRuntimeRefType)EditorGUILayout.EnumFlagsField("Runtime引用类型", RuntimeRefType);
  43. FolderType = (EPackageCreateFolderType)EditorGUILayout.EnumFlagsField("CodeMode类型", FolderType);
  44. GUILayout.Space(10);
  45. PackageAuthor = EditorGUILayout.TextField("作者", PackageAuthor);
  46. PackageName = EditorGUILayout.TextField("模块名称 cn.etetet.{0}", PackageName);
  47. PackageId = EditorGUILayout.TextField("模块ID", PackageId);
  48. DisplayName = EditorGUILayout.TextField("显示名称", DisplayName);
  49. AssemblyName = EditorGUILayout.TextField("程序集名称", AssemblyName);
  50. Description = EditorGUILayout.TextField("描述", Description);
  51. ForceCreate = EditorGUILayout.Toggle("强制创建", ForceCreate);
  52. GUILayout.Space(10);
  53. if (GUILayout.Button("创建", GUILayout.Height(50)))
  54. {
  55. Create();
  56. }
  57. }
  58. private void Create()
  59. {
  60. if ((int)PackageCreateType == 0)
  61. {
  62. UnityTipsHelper.Show("必须选择生成类型");
  63. return;
  64. }
  65. if (string.IsNullOrEmpty(PackageAuthor))
  66. {
  67. UnityTipsHelper.Show("必须输入 作者名称");
  68. return;
  69. }
  70. if (OnRuntimeRefTypeShowIf() && string.IsNullOrEmpty(AssemblyName))
  71. {
  72. UnityTipsHelper.Show("必须输入 程序集名称");
  73. return;
  74. }
  75. if (string.IsNullOrEmpty(DisplayName))
  76. {
  77. UnityTipsHelper.Show("必须输入 显示名称");
  78. return;
  79. }
  80. if (string.IsNullOrEmpty(PackageName))
  81. {
  82. UnityTipsHelper.Show("必须输入 模块名称");
  83. return;
  84. }
  85. PackagePath = ETPackageCreateHelper.GetPackagePath(ref PackageName);
  86. var projPath = EditorHelper.GetProjPath(PackagePath);
  87. if (!ETPackageCreateHelper.CreateDirectory(projPath, ForceCreate))
  88. {
  89. UnityTipsHelper.Show($"模块[ {PackageName} ] 已存在 请勿重复创建");
  90. return;
  91. }
  92. ETPackageCreateHelper.CreatePackage(
  93. new ETPackageCreateData
  94. {
  95. PackageAuthor = this.PackageAuthor,
  96. PackagePath = this.PackagePath,
  97. PackageId = int.Parse(this.PackageId),
  98. PackageName = this.PackageName,
  99. AssemblyName = this.AssemblyName,
  100. DisplayName = this.DisplayName,
  101. Description = this.Description,
  102. PackageCreateType = this.PackageCreateType,
  103. RuntimeRefType = this.RuntimeRefType,
  104. FolderType = this.FolderType,
  105. });
  106. UnityTipsHelper.Show($"创建成功 [ {PackageName} ]");
  107. PackageExecuteMenuItemHelper.ETAll();
  108. CloseWindow();
  109. AssetDatabase.SaveAssets();
  110. EditorApplication.ExecuteMenuItem("Assets/Refresh");
  111. }
  112. private bool OnRuntimeRefTypeShowIf()
  113. {
  114. return PackageCreateType.HasFlag(EPackageCreateType.Runtime);
  115. }
  116. }
  117. }