NLDClient-yudde/ProjectNLD/Assets/Editor/UnitBuildBuilder/UnitBuildBuilderWindow.cs

164 lines
5.5 KiB
C#

using System;
using System.Collections.Generic;
using DG.DemiEditor;
using Framework;
using Performance;
using UnityEditor;
using UnityEngine;
namespace UnitBuildBuilder
{
public class UnitBuildBuilderWindow : EditorWindow
{
private const string OLD_MODEL_PATH = "Assets/Art_Out/OnlyCollect/Building/";
private const string NEW_MODEL_PATH = "Assets/Art_Out/AutoGen/Building/";
[MenuItem("Tools/*建筑工具/构建器", false, (int)NLDMenuID.BuildBuilder)]
public static void ShowWindow()
{
var window = GetWindow<UnitBuildBuilderWindow>("建筑构造器");
window.Show();
}
private List<UnitBuildBuilderData> _buildDataList;
private Vector2 _scrollPos;
private GUIStyle _styleNormal;
private GUIStyle _styleError;
private void OnGUI()
{
if (_buildDataList == null)
{
_buildDataList = new List<UnitBuildBuilderData>();
_FillDataList();
_styleNormal = GUI.skin.label.Clone();
_styleNormal.normal.textColor = Color.white;
_styleNormal.focused.textColor = Color.white;
_styleNormal.hover.textColor = Color.white;
_styleNormal.active.textColor = Color.white;
_styleError = GUI.skin.label.Clone();
_styleError.normal.textColor = Color.red;
_styleError.focused.textColor = Color.red;
_styleError.hover.textColor = Color.red;
_styleError.active.textColor = Color.red;
}
GUILayout.BeginHorizontal();
GUILayout.Label($"当前共有载具配置, {_buildDataList.Count} 个");
if (GUILayout.Button("刷新"))
{
EditorTableManager.instance.ForceReload();
_FillDataList();
}
GUILayout.EndHorizontal();
_ShowAllBuildData();
if (GUILayout.Button("开始构建", GUILayout.Height(40)))
{
_DoBuild();
}
}
private void _DoBuild()
{
var buildSet = new HashSet<string>();
for (int i = 0; i < _buildDataList.Count; i++)
{
var build = _buildDataList[i];
if (!build.isChecked)
{
continue;
}
if (!buildSet.Add(build.modelPath))
{
continue;
}
_BuildSingle(build);
}
}
private void _BuildSingle(UnitBuildBuilderData buildData)
{
var loadObj = AssetDatabase.LoadAssetAtPath<GameObject>(buildData.modelPath);
if (loadObj == null)
{
Debug.LogError($"模型不存在: {buildData.modelPath}");
return;
}
var combiner = new AutoObjCombine(loadObj);
combiner.DoCombine(NEW_MODEL_PATH);
}
private void _ShowAllBuildData()
{
var totalHeight = _buildDataList.Count * 20 + 20;
var maxHeight = 400;
if (totalHeight < maxHeight)
{
maxHeight = totalHeight;
}
_scrollPos = GUILayout.BeginScrollView(_scrollPos, GUILayout.Height(maxHeight));
GUILayout.BeginVertical();
for (int i = 0; i < _buildDataList.Count; i++)
{
var data = _buildDataList[i];
var style = data.isPrefabExist ? _styleNormal : _styleError;
GUILayout.BeginHorizontal();
data.isChecked = GUILayout.Toggle(data.isChecked, "", GUILayout.Width(20));
GUILayout.Label("ID:" + data.id, GUILayout.Width(80));
GUILayout.Label("名字:", GUILayout.Width(40));
GUILayout.Label(data.buildingName, style, GUILayout.Width(150));
GUILayout.Label("模型名字:" + data.prefabName, GUILayout.Width(300));
GUILayout.EndHorizontal();
}
GUILayout.EndVertical();
GUILayout.EndScrollView();
GUILayout.BeginHorizontal();
if (GUILayout.Button("全选"))
{
for (var i = 0; i < _buildDataList.Count; ++i)
{
_buildDataList[i].isChecked = true;
}
}
if (GUILayout.Button("全不选"))
{
for (var i = 0; i < _buildDataList.Count; ++i)
{
_buildDataList[i].isChecked = false;
}
}
GUILayout.EndHorizontal();
}
private void _FillDataList()
{
_buildDataList.Clear();
var configDataList = EditorTableManager.instance.tables.BuildConfig.DataList;
for (int i = 0; i < configDataList.Count; i++)
{
var build = configDataList[i];
var data = new UnitBuildBuilderData();
data.id = build.Id;
data.buildingName = build.Name;
var oldModelPath = OLD_MODEL_PATH + build.ModelPath + ".prefab";
data.modelPath = oldModelPath;
data.prefabName = build.ModelPath;
data.isPrefabExist = AssetDatabase.LoadAssetAtPath<GameObject>(oldModelPath) != null;
_buildDataList.Add(data);
}
}
}
}