添加打包配置页,将原上传配置页相关功能移动到打包配置页
This commit is contained in:
parent
7cb3596c4e
commit
29a8705ef8
8
Assets/VersionFlow/Editor/InspectorEditors.meta
Normal file
8
Assets/VersionFlow/Editor/InspectorEditors.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a1d01bcac8137274ab74956daabe5cac
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using VersionFlow.Runtime;
|
||||
|
||||
namespace VersionFlow.Editors
|
||||
{
|
||||
[CustomEditor(typeof(BuilderConfig))]
|
||||
public class BuilderConfigEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
DrawUploader();
|
||||
}
|
||||
|
||||
Dictionary<PatchUploader, Editor> m_uploaderEditorMapper = new Dictionary<PatchUploader, Editor>();
|
||||
private void DrawUploader()
|
||||
{
|
||||
var builder = target as BuilderConfig;
|
||||
|
||||
var uploaderTypes = builder.GetAllPatcherType();
|
||||
|
||||
var options = uploaderTypes.Select(t => $"{t.Namespace}.{t.Name}").ToList();
|
||||
|
||||
var selectIndex = options.IndexOf(builder.uploaderClassName);
|
||||
|
||||
|
||||
selectIndex = EditorGUILayout.Popup("选择上传器", selectIndex, options.Select(op => PatchUploaderUtility.GetPatcherPrettyName(op)).ToArray());
|
||||
if (selectIndex != -1)
|
||||
{
|
||||
var selectClassName = options[selectIndex];
|
||||
builder.uploaderClassName = selectClassName;
|
||||
}
|
||||
|
||||
var patchLoader = builder.GetPatchLoader();
|
||||
if (patchLoader != null)
|
||||
{
|
||||
if (!m_uploaderEditorMapper.TryGetValue(patchLoader, out Editor editor))
|
||||
{
|
||||
editor = Editor.CreateEditor(patchLoader);
|
||||
m_uploaderEditorMapper[patchLoader] = editor;
|
||||
}
|
||||
editor.OnInspectorGUI();
|
||||
|
||||
string json = patchLoader.GetCfgJson();
|
||||
builder.UploaderCfgDict.SetCfgJson(patchLoader.GetType(), json);
|
||||
}
|
||||
|
||||
if (GUI.changed)
|
||||
{
|
||||
EditorUtility.SetDirty(target);
|
||||
patchLoader.CfgChanged(builder, builder.UploaderCfgDict.GetUploaderCfg(patchLoader.GetType()));
|
||||
}
|
||||
|
||||
if (!patchLoader.Status)
|
||||
{
|
||||
EditorGUILayout.HelpBox(patchLoader.Status, MessageType.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -11,33 +11,20 @@ using VersionFlow.Runtime;
|
||||
|
||||
namespace VersionFlow.Editors
|
||||
{
|
||||
[CustomEditor(typeof(BuilderConfig))]
|
||||
public class BuilderConfigEditor : Editor
|
||||
public class PackEditor : Editor
|
||||
{
|
||||
static bool FoldOutGroup;
|
||||
|
||||
static private BundleManifest RemoteVersion;
|
||||
static private string UpdateVersion;
|
||||
|
||||
static public BundleManifest Report;
|
||||
static private List<BundleCompare> CompareResult;
|
||||
static private string outputPath;
|
||||
static private Dictionary<string, BundleExtraInfo> bundleExtraInfo;
|
||||
static bool FoldOutGroup;
|
||||
static public BundleManifest Report;
|
||||
|
||||
private static void ResetState()
|
||||
{
|
||||
RemoteVersion = null;
|
||||
UpdateVersion = null;
|
||||
|
||||
Report = null;
|
||||
CompareResult = null;
|
||||
outputPath = null;
|
||||
bundleExtraInfo = null;
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
DrawUploader();
|
||||
|
||||
var builder = target as BuilderConfig;
|
||||
|
||||
EditorGUILayout.Space(20);
|
||||
@ -68,7 +55,7 @@ namespace VersionFlow.Editors
|
||||
if (CompareResult == null && GUILayout.Button("Build"))
|
||||
{
|
||||
var bc = (BuilderConfig)target;
|
||||
bc.OnCalcBundleHash = BuilderConfigEditor.CalcBundleHash;
|
||||
bc.OnCalcBundleHash = CalcBundleHash;
|
||||
Report = bc.Build(UpdateVersion, out outputPath, out bundleExtraInfo);
|
||||
CompareResult = bc.CompareBundleManifest(Report, RemoteVersion);
|
||||
}
|
||||
@ -86,201 +73,6 @@ namespace VersionFlow.Editors
|
||||
}
|
||||
}
|
||||
|
||||
Dictionary<PatchUploader, Editor> m_uploaderEditorMapper = new Dictionary<PatchUploader, Editor>();
|
||||
private void DrawUploader()
|
||||
{
|
||||
var builder = target as BuilderConfig;
|
||||
|
||||
var uploaderTypes = builder.GetAllPatcherType();
|
||||
|
||||
var options = uploaderTypes.Select(t => $"{t.Namespace}.{t.Name}").ToList();
|
||||
|
||||
var selectIndex = options.IndexOf(builder.uploaderClassName);
|
||||
|
||||
|
||||
selectIndex = EditorGUILayout.Popup("选择上传器", selectIndex, options.Select(op => PatchUploaderUtility.GetPatcherPrettyName(op)).ToArray());
|
||||
if (selectIndex != -1)
|
||||
{
|
||||
var selectClassName = options[selectIndex];
|
||||
builder.uploaderClassName = selectClassName;
|
||||
}
|
||||
|
||||
var patchLoader = builder.GetPatchLoader();
|
||||
if (patchLoader != null)
|
||||
{
|
||||
if (!m_uploaderEditorMapper.TryGetValue(patchLoader, out Editor editor))
|
||||
{
|
||||
editor = Editor.CreateEditor(patchLoader);
|
||||
m_uploaderEditorMapper[patchLoader] = editor;
|
||||
}
|
||||
editor.OnInspectorGUI();
|
||||
|
||||
string json = patchLoader.GetCfgJson();
|
||||
builder.UploaderCfgDict.SetCfgJson(patchLoader.GetType(), json);
|
||||
}
|
||||
|
||||
if (GUI.changed)
|
||||
{
|
||||
EditorUtility.SetDirty(target);
|
||||
patchLoader.CfgChanged(builder, builder.UploaderCfgDict.GetUploaderCfg(patchLoader.GetType()));
|
||||
}
|
||||
|
||||
if (!patchLoader.Status)
|
||||
{
|
||||
EditorGUILayout.HelpBox(patchLoader.Status, MessageType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawGroupItems()
|
||||
{
|
||||
Undo.RecordObject(target, target.name);
|
||||
|
||||
EditorGUILayout.BeginVertical();
|
||||
|
||||
var builder = target as BuilderConfig;
|
||||
builder.DuplicateBundleBeInstallBundle = EditorGUILayout.Toggle("重复依赖资源的bundle作为随包资源", builder.DuplicateBundleBeInstallBundle);
|
||||
builder.ShaderBundleBeInstallBundle = EditorGUILayout.Toggle("shaderbundle作为随包资源", builder.ShaderBundleBeInstallBundle);
|
||||
|
||||
foreach (var group in builder.Groups)
|
||||
{
|
||||
var temp = GUI.color;
|
||||
|
||||
GUI.color = GetGroupColor(group, out var errorMsg);
|
||||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||||
{
|
||||
EditorGUILayout.LabelField(errorMsg);
|
||||
//Name And Optionnal
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
group.MarkColor = EditorGUILayout.ColorField("标记颜色", group.MarkColor);
|
||||
group.GroupName = EditorGUILayout.TextField(group.GroupName, GUILayout.Width(100));
|
||||
|
||||
var groupDeleteColor = GUI.color;
|
||||
GUI.color = Color.red;
|
||||
if (GUILayout.Button("X", GUILayout.Width(30)))
|
||||
{
|
||||
builder.Groups.Remove(group);
|
||||
break;
|
||||
}
|
||||
GUI.color = groupDeleteColor;
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
group.OptionBundle = EditorGUILayout.Toggle($"可选下载包", group.OptionBundle);
|
||||
group.InstallReady = EditorGUILayout.Toggle($"跟随主包", group.InstallReady);
|
||||
|
||||
//buildMode
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
var EnumType = typeof(BuildEntity.EnumBuildMode);
|
||||
var values = Enum.GetValues(EnumType);
|
||||
foreach (BuildEntity.EnumBuildMode modeValue in values)
|
||||
{
|
||||
var modeName = Enum.GetName(EnumType, modeValue);
|
||||
|
||||
var tempColor = GUI.color;
|
||||
if (modeValue == group.BuildMode) GUI.color = Color.green;
|
||||
else GUI.color = Color.white;
|
||||
if (GUILayout.Button(new GUIContent(modeName, GetDescrib(modeValue))))
|
||||
{
|
||||
group.BuildMode = modeValue;
|
||||
}
|
||||
GUI.color = tempColor;
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginVertical(new GUIStyle { padding = new RectOffset(5, 5, 5, 5) });
|
||||
{
|
||||
for (int i = 0; i < group.FolderList.Count; i++)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
var foldAsset = group.FolderList[i];
|
||||
var deleteColor = GUI.color;
|
||||
GUI.color = Color.red;
|
||||
if (GUILayout.Button("-", GUILayout.Width(20)))
|
||||
{
|
||||
group.FolderList.RemoveAt(i);
|
||||
break;
|
||||
}
|
||||
GUI.color = deleteColor;
|
||||
group.FolderList[i] = (DefaultAsset)EditorGUILayout.ObjectField(foldAsset, typeof(DefaultAsset), false);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
//draw add Folder
|
||||
var addFolderColor = GUI.color;
|
||||
GUI.color = Color.yellow;
|
||||
if (GUILayout.Button("添加资源目录"))
|
||||
{
|
||||
group.FolderList.Add(null);
|
||||
}
|
||||
GUI.color = addFolderColor;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
GUI.color = temp;
|
||||
}
|
||||
|
||||
//Draw Add Group Button
|
||||
var addColor = GUI.color;
|
||||
GUI.color = Color.yellow;
|
||||
if (GUILayout.Button("添加组"))
|
||||
{
|
||||
builder.Groups.Add(new BuildEntity());
|
||||
}
|
||||
GUI.color = addColor;
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
if (GUI.changed)
|
||||
{
|
||||
MarkInBundleFiles.RefreshProjectBundleMark();
|
||||
EditorUtility.SetDirty(target);
|
||||
}
|
||||
|
||||
Color GetGroupColor(BuildEntity group, out string errorMsg)
|
||||
{
|
||||
errorMsg = null;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(group.GroupName))
|
||||
{
|
||||
errorMsg = "非法名称";
|
||||
return Color.red;
|
||||
}
|
||||
if (builder.Groups.Count(item => item.GroupName == group.GroupName) > 1)
|
||||
{
|
||||
errorMsg = "名称重复";
|
||||
return Color.red;
|
||||
}
|
||||
if (group.FolderList.Count == 0)
|
||||
{
|
||||
errorMsg = "未包含任何目录";
|
||||
return Color.red;
|
||||
}
|
||||
if (group.FolderList.Count(f => f == null) > 0)
|
||||
{
|
||||
errorMsg = "存在无效目录";
|
||||
return Color.red;
|
||||
}
|
||||
|
||||
if (group.OptionBundle) return Color.cyan;
|
||||
|
||||
return Color.white;
|
||||
}
|
||||
|
||||
string GetDescrib<T>(T value) where T : Enum
|
||||
{
|
||||
var enumType = typeof(T);
|
||||
var desAtt = enumType.GetField(value.ToString()).GetCustomAttribute<DescriptionAttribute>();
|
||||
return desAtt != null ? desAtt.Description : value.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawCompareResult(List<BundleCompare> compareResult, Dictionary<string, BundleExtraInfo> bundleExtraInfo)
|
||||
{
|
||||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||||
@ -508,5 +300,167 @@ namespace VersionFlow.Editors
|
||||
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
private static void ResetState()
|
||||
{
|
||||
RemoteVersion = null;
|
||||
UpdateVersion = null;
|
||||
|
||||
Report = null;
|
||||
CompareResult = null;
|
||||
outputPath = null;
|
||||
bundleExtraInfo = null;
|
||||
}
|
||||
|
||||
private void DrawGroupItems()
|
||||
{
|
||||
Undo.RecordObject(target, target.name);
|
||||
|
||||
EditorGUILayout.BeginVertical();
|
||||
|
||||
var builder = target as BuilderConfig;
|
||||
builder.DuplicateBundleBeInstallBundle = EditorGUILayout.Toggle("重复依赖资源的bundle作为随包资源", builder.DuplicateBundleBeInstallBundle);
|
||||
builder.ShaderBundleBeInstallBundle = EditorGUILayout.Toggle("shaderbundle作为随包资源", builder.ShaderBundleBeInstallBundle);
|
||||
|
||||
foreach (var group in builder.Groups)
|
||||
{
|
||||
var temp = GUI.color;
|
||||
|
||||
GUI.color = GetGroupColor(group, out var errorMsg);
|
||||
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||||
{
|
||||
EditorGUILayout.LabelField(errorMsg);
|
||||
//Name And Optionnal
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
group.MarkColor = EditorGUILayout.ColorField("标记颜色", group.MarkColor);
|
||||
group.GroupName = EditorGUILayout.TextField(group.GroupName, GUILayout.Width(100));
|
||||
|
||||
var groupDeleteColor = GUI.color;
|
||||
GUI.color = Color.red;
|
||||
if (GUILayout.Button("X", GUILayout.Width(30)))
|
||||
{
|
||||
builder.Groups.Remove(group);
|
||||
break;
|
||||
}
|
||||
GUI.color = groupDeleteColor;
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
group.OptionBundle = EditorGUILayout.Toggle($"可选下载包", group.OptionBundle);
|
||||
group.InstallReady = EditorGUILayout.Toggle($"跟随主包", group.InstallReady);
|
||||
|
||||
//buildMode
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
var EnumType = typeof(BuildEntity.EnumBuildMode);
|
||||
var values = Enum.GetValues(EnumType);
|
||||
foreach (BuildEntity.EnumBuildMode modeValue in values)
|
||||
{
|
||||
var modeName = Enum.GetName(EnumType, modeValue);
|
||||
|
||||
var tempColor = GUI.color;
|
||||
if (modeValue == group.BuildMode) GUI.color = Color.green;
|
||||
else GUI.color = Color.white;
|
||||
if (GUILayout.Button(new GUIContent(modeName, GetDescrib(modeValue))))
|
||||
{
|
||||
group.BuildMode = modeValue;
|
||||
}
|
||||
GUI.color = tempColor;
|
||||
}
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginVertical(new GUIStyle { padding = new RectOffset(5, 5, 5, 5) });
|
||||
{
|
||||
for (int i = 0; i < group.FolderList.Count; i++)
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
{
|
||||
var foldAsset = group.FolderList[i];
|
||||
var deleteColor = GUI.color;
|
||||
GUI.color = Color.red;
|
||||
if (GUILayout.Button("-", GUILayout.Width(20)))
|
||||
{
|
||||
group.FolderList.RemoveAt(i);
|
||||
break;
|
||||
}
|
||||
GUI.color = deleteColor;
|
||||
group.FolderList[i] = (DefaultAsset)EditorGUILayout.ObjectField(foldAsset, typeof(DefaultAsset), false);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
//draw add Folder
|
||||
var addFolderColor = GUI.color;
|
||||
GUI.color = Color.yellow;
|
||||
if (GUILayout.Button("添加资源目录"))
|
||||
{
|
||||
group.FolderList.Add(null);
|
||||
}
|
||||
GUI.color = addFolderColor;
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
}
|
||||
EditorGUILayout.EndVertical();
|
||||
GUI.color = temp;
|
||||
}
|
||||
|
||||
//Draw Add Group Button
|
||||
var addColor = GUI.color;
|
||||
GUI.color = Color.yellow;
|
||||
if (GUILayout.Button("添加组"))
|
||||
{
|
||||
builder.Groups.Add(new BuildEntity());
|
||||
}
|
||||
GUI.color = addColor;
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
if (GUI.changed)
|
||||
{
|
||||
MarkInBundleFiles.RefreshProjectBundleMark();
|
||||
EditorUtility.SetDirty(target);
|
||||
}
|
||||
|
||||
Color GetGroupColor(BuildEntity group, out string errorMsg)
|
||||
{
|
||||
errorMsg = null;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(group.GroupName))
|
||||
{
|
||||
errorMsg = "非法名称";
|
||||
return Color.red;
|
||||
}
|
||||
if (builder.Groups.Count(item => item.GroupName == group.GroupName) > 1)
|
||||
{
|
||||
errorMsg = "名称重复";
|
||||
return Color.red;
|
||||
}
|
||||
if (group.FolderList.Count == 0)
|
||||
{
|
||||
errorMsg = "未包含任何目录";
|
||||
return Color.red;
|
||||
}
|
||||
if (group.FolderList.Count(f => f == null) > 0)
|
||||
{
|
||||
errorMsg = "存在无效目录";
|
||||
return Color.red;
|
||||
}
|
||||
|
||||
if (group.OptionBundle) return Color.cyan;
|
||||
|
||||
return Color.white;
|
||||
}
|
||||
|
||||
string GetDescrib<T>(T value) where T : Enum
|
||||
{
|
||||
var enumType = typeof(T);
|
||||
var desAtt = enumType.GetField(value.ToString()).GetCustomAttribute<DescriptionAttribute>();
|
||||
return desAtt != null ? desAtt.Description : value.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 390bca0e4e3f95c478211fc551302829
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -163,7 +163,7 @@ namespace VersionFlow.Editors
|
||||
fetchBundles.Clear();
|
||||
|
||||
var builder = PatchUploaderUtility.FindBuilderInProject();
|
||||
m_remoteInfo = BuilderConfigEditor.FetchRemoteVersion(builder);
|
||||
m_remoteInfo = PackEditor.FetchRemoteVersion(builder);
|
||||
|
||||
foreach (var bundle in m_remoteInfo.remoteVersion.Bundles)
|
||||
{
|
||||
|
||||
@ -8,8 +8,11 @@ namespace VersionFlow.Editors
|
||||
public class VersionFlowSettingWnd : EditorWindow
|
||||
{
|
||||
private BuilderConfig m_builder;
|
||||
|
||||
private Editor m_packEditor;
|
||||
private Editor m_builderEditor;
|
||||
private Editor m_settingEditor;
|
||||
|
||||
private Vector2 m_builderEditorScroll;
|
||||
|
||||
[MenuItem("VersionFlow/Setting", priority = int.MinValue)]
|
||||
@ -24,6 +27,7 @@ namespace VersionFlow.Editors
|
||||
titleContent = new GUIContent("VersionFlow");
|
||||
m_builder = PatchUploaderUtility.FindBuilderInProject();
|
||||
|
||||
m_packEditor = Editor.CreateEditor(m_builder, typeof(PackEditor));
|
||||
m_builderEditor = Editor.CreateEditor(m_builder);
|
||||
m_settingEditor = Editor.CreateEditor(m_builder.vfSetting);
|
||||
|
||||
@ -60,6 +64,7 @@ namespace VersionFlow.Editors
|
||||
|
||||
private void DrawEditorTabRegion()
|
||||
{
|
||||
DrawEditorTabItem(m_packEditor, "打包设置");
|
||||
DrawEditorTabItem(m_builderEditor, "上传设置");
|
||||
DrawEditorTabItem(m_settingEditor, "运行时设置");
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user