152 lines
5.2 KiB
C#
152 lines
5.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Sirenix.OdinInspector;
|
|
using Sirenix.OdinInspector.Editor;
|
|
using Sirenix.Utilities;
|
|
using Sirenix.Utilities.Editor;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace SDKPackage.Editor
|
|
{
|
|
public class SDKPackageEditorWindow : OdinEditorWindow
|
|
{
|
|
[TableList(AlwaysExpanded = true, ShowIndexLabels = false,
|
|
NumberOfItemsPerPage = 20, IsReadOnly = false)]
|
|
[ShowInInspector]
|
|
[PropertyOrder(1)]
|
|
[HideLabel]
|
|
private List<SDKPackageEntry> _packageEntries = new List<SDKPackageEntry>();
|
|
|
|
[HorizontalGroup("Actions", Width = 0.5f)]
|
|
[Button("全选", ButtonSizes.Small)]
|
|
private void SelectAll()
|
|
{
|
|
foreach (var entry in _packageEntries)
|
|
entry.selected = true;
|
|
}
|
|
|
|
[HorizontalGroup("Actions")]
|
|
[Button("全不选", ButtonSizes.Small)]
|
|
private void DeselectAll()
|
|
{
|
|
foreach (var entry in _packageEntries)
|
|
entry.selected = false;
|
|
}
|
|
|
|
[HorizontalGroup("Actions")]
|
|
[Button("刷新列表", ButtonSizes.Small)]
|
|
private void RefreshList()
|
|
{
|
|
_packageEntries = SDKPackageHelper.BuildPackageEntries();
|
|
ClearPreview();
|
|
}
|
|
|
|
[PropertySpace(4)]
|
|
[HorizontalGroup("InstallActions")]
|
|
[Button("预览变更", ButtonSizes.Medium)]
|
|
[EnableIf("HasSelectedPackages")]
|
|
private void Preview()
|
|
{
|
|
UpdatePreview(SDKPackageHelper.GetChangePreview(_packageEntries));
|
|
}
|
|
|
|
[HorizontalGroup("InstallActions")]
|
|
[Button("安装选中包", ButtonSizes.Medium)]
|
|
[EnableIf("HasSelectedPackages")]
|
|
private void Install()
|
|
{
|
|
_logContent = "";
|
|
SDKPackageHelper.InstallPackages(_packageEntries, Log);
|
|
_currentDefines = SDKPackageHelper.GetCurrentDefines();
|
|
UpdatePreview(SDKPackageHelper.GetChangePreview(_packageEntries));
|
|
}
|
|
|
|
[ShowIf("_hasNewDefines")]
|
|
[Title("新增宏定义", titleAlignment: TitleAlignments.Left)]
|
|
[ListDrawerSettings(IsReadOnly = true)]
|
|
[ShowInInspector]
|
|
[PropertyOrder(3)]
|
|
private List<string> _newDefines = new List<string>();
|
|
|
|
[ShowIf("_hasSkippedDefines")]
|
|
[Title("跳过宏定义(已存在)", titleAlignment: TitleAlignments.Left)]
|
|
[ListDrawerSettings(IsReadOnly = true)]
|
|
[ShowInInspector]
|
|
[PropertyOrder(3)]
|
|
private List<string> _skippedDefines = new List<string>();
|
|
|
|
[ShowIf("_hasPreviewFiles")]
|
|
[Title("文件变更预览", titleAlignment: TitleAlignments.Left)]
|
|
[ListDrawerSettings(IsReadOnly = true, NumberOfItemsPerPage = 10)]
|
|
[ShowInInspector]
|
|
[PropertyOrder(4)]
|
|
private List<PackageFilePreview> _previewFiles = new List<PackageFilePreview>();
|
|
|
|
[Title("当前宏定义", titleAlignment: TitleAlignments.Left)]
|
|
[PropertyOrder(5)]
|
|
[HideLabel]
|
|
[DisplayAsString]
|
|
[MultiLineProperty(3)]
|
|
[ShowInInspector]
|
|
private string _currentDefines;
|
|
|
|
[Title("安装日志", titleAlignment: TitleAlignments.Left)]
|
|
[PropertyOrder(6)]
|
|
[MultiLineProperty(8)]
|
|
[HideLabel]
|
|
[ShowInInspector]
|
|
private string _logContent = "";
|
|
|
|
private bool _hasNewDefines;
|
|
private bool _hasSkippedDefines;
|
|
private bool _hasPreviewFiles;
|
|
|
|
[MenuItem("Tools/*SDK包管理器", false, 210)]
|
|
public static void ShowWindow()
|
|
{
|
|
var window = GetWindow<SDKPackageEditorWindow>();
|
|
window.titleContent = new GUIContent("SDK包管理器");
|
|
window.position = GUIHelper.GetEditorWindowRect().AlignCenter(800, 700);
|
|
window.Show();
|
|
}
|
|
|
|
protected override void OnEnable()
|
|
{
|
|
base.OnEnable();
|
|
_packageEntries = SDKPackageHelper.BuildPackageEntries();
|
|
_currentDefines = SDKPackageHelper.GetCurrentDefines();
|
|
_logContent = "";
|
|
ClearPreview();
|
|
}
|
|
|
|
private bool HasSelectedPackages => _packageEntries != null && _packageEntries.Any(e => e.selected);
|
|
|
|
private void UpdatePreview(ChangePreview preview)
|
|
{
|
|
_newDefines = preview?.NewDefines ?? new List<string>();
|
|
_skippedDefines = preview?.SkippedDefines ?? new List<string>();
|
|
_previewFiles = preview?.PackageFiles ?? new List<PackageFilePreview>();
|
|
_hasNewDefines = _newDefines.Count > 0;
|
|
_hasSkippedDefines = _skippedDefines.Count > 0;
|
|
_hasPreviewFiles = _previewFiles.Count > 0;
|
|
}
|
|
|
|
private void ClearPreview()
|
|
{
|
|
_newDefines = new List<string>();
|
|
_skippedDefines = new List<string>();
|
|
_previewFiles = new List<PackageFilePreview>();
|
|
_hasNewDefines = false;
|
|
_hasSkippedDefines = false;
|
|
_hasPreviewFiles = false;
|
|
}
|
|
|
|
private void Log(string message)
|
|
{
|
|
_logContent = string.IsNullOrEmpty(_logContent) ? message : $"{_logContent}\n{message}";
|
|
Debug.Log($"[SDKPackage] {message}");
|
|
}
|
|
}
|
|
} |