Files
Fishing2NetTest/Assets/Scripts/Editor/Builder/BuilderWindow.cs
2026-03-05 18:07:55 +08:00

170 lines
4.3 KiB
C#

using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace NBF
{
public class BuilderWindow : EditorWindow
{
public const int Width = 400;
public const int Height = 645;
[MenuItem("构建/打开构建面板", false, 9)]
public static void ShowWindow()
{
BuilderWindow wnd = GetWindow<BuilderWindow>("APP打包器", true);
wnd.minSize = new Vector2(Width, Height);
}
#region
private GUIStyle _styleTitleSmall;
private GUIStyle StyleTitleSmall
{
get
{
if (_styleTitleSmall == null)
{
_styleTitleSmall = new GUIStyle(EditorStyles.label)
{
fontStyle = FontStyle.Bold,
fontSize = 12
};
}
return _styleTitleSmall;
}
}
#endregion
private readonly HashSet<int> _selectTaskId = new HashSet<int>();
private string Ver;
protected void OnEnable()
{
Ver = PlayerSettings.bundleVersion;
_selectTaskId.Clear();
}
protected void OnGUI()
{
EditorGUILayout.Space();
DrawMenu();
ShowTitle($"环境选择");
Ver = EditorGUILayout.TextField("打包版本号", Ver);
ShowTitle("任务列表");
var tasks = Builder.BuildTaskInfo;
foreach (var task in tasks)
{
var select = _selectTaskId.Contains(task.Id);
GUI.color = select ? Color.white : Color.grey;
if (task.Visable)
{
//复选框
var s = EditorGUILayout.Toggle(task.Name, select, GUILayout.Height(20));
if (s)
{
_selectTaskId.Add(task.Id);
}
else
{
_selectTaskId.Remove(task.Id);
}
}
}
EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
GUI.color = Color.white;
if (GUILayout.Button("执行打包", GUILayout.Height(45)))
{
Run();
}
}
private void Run(bool distributed = false, bool cloud = false)
{
var ids = _selectTaskId.ToArray();
if (!cloud)
{
BuildContext buildContext = new BuildContext
{
Ver = Ver,
};
Builder.RunBuildTasks(buildContext, ids);
}
else
{
Debug.LogError("远端构建暂未完成==");
}
}
private void DrawMenu()
{
ShowTitle("快速选中");
GUILayout.BeginHorizontal();
if (GUILayout.Button("提审包", GUILayout.Height(30)))
{
SelectAll();
}
if (GUILayout.Button("自测包", GUILayout.Height(30)))
{
SelectSelfTest();
}
if (GUILayout.Button("取消选择", GUILayout.Height(30)))
{
_selectTaskId.Clear();
}
EditorGUILayout.EndHorizontal();
}
#region
private void SelectAll()
{
_selectTaskId.Clear();
foreach (var task in Builder.BuildTaskInfo)
{
_selectTaskId.Add(task.Id);
}
}
private void SelectSelfTest()
{
_selectTaskId.Clear();
_selectTaskId.Add(BuildTaskId.Excel);
_selectTaskId.Add(BuildTaskId.AB);
_selectTaskId.Add(BuildTaskId.App);
_selectTaskId.Add(BuildTaskId.CopyShare);
}
#endregion
private void ShowTitle(string str)
{
EditorGUILayout.Space();
GUILayout.Label(str, StyleTitleSmall);
EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
}
private bool HasSelectTask(int id)
{
return _selectTaskId.Contains(id);
}
}
}