NLDClient-yudde/ProjectNLD/Assets/Editor/VehicleBuilder/VehicleBuildWindow.cs

161 lines
5.2 KiB
C#

using System;
using System.Collections.Generic;
using DG.DemiEditor;
using Framework;
using UnityEditor;
using UnityEngine;
namespace VehicleBuilder
{
public class VehicleBuildWindow : EditorWindow
{
[MenuItem("Tools/*载具/载具构建器")]
public static void ShowWindow()
{
var window = GetWindow<VehicleBuildWindow>();
window.titleContent = new GUIContent("载具构建器");
window.Show();
}
private List<VehicleBuildData> _buildData;
private GUIStyle _styleNormal;
private GUIStyle _styleError;
private Vector2 _scrollPos1;
private void OnGUI()
{
if (_buildData == null)
{
_InitData();
}
if (_buildData == null)
{
EditorGUILayout.HelpBox("载具配置表为空", MessageType.Error);
return;
}
GUILayout.BeginHorizontal();
GUILayout.Label($"共有 {_buildData.Count} 个载具");
if (GUILayout.Button("刷新", GUILayout.Width(100)))
{
_buildData = null;
EditorTableManager.instance.ForceReload();
GUILayout.EndHorizontal();
return;
}
GUILayout.EndHorizontal();
_ShowVehicleInfos();
if (GUILayout.Button("开始构建", GUILayout.Height(60)))
{
_Build();
}
}
private void _ShowVehicleInfos()
{
var maxHeight = 200;
_scrollPos1 = EditorGUILayout.BeginScrollView(_scrollPos1, GUILayout.Height(maxHeight));
GUILayout.BeginVertical();
for (int i = 0; i < _buildData.Count; i++)
{
var buildData = _buildData[i];
GUILayout.BeginHorizontal();
buildData.isChecked = GUILayout.Toggle(buildData.isChecked, "", GUILayout.Width(20));
var hasError = !string.IsNullOrEmpty(buildData.errorInfo);
GUILayout.Label("ID: " + buildData.vehicleConfig.ID, GUILayout.Width(100));
if (hasError)
{
GUILayout.Label("名称: " + buildData.vehicleConfig.Name, _styleError, GUILayout.Width(100));
}
else
{
GUILayout.Label("名称: " + buildData.vehicleConfig.Name, GUILayout.Width(100));
}
GUILayout.Label("车体名字: " + buildData.bodyName, GUILayout.Width(120));
GUILayout.Label("炮台名字: " + buildData.batteryName, GUILayout.Width(120));
GUILayout.EndHorizontal();
if (buildData.isChecked && hasError)
{
GUILayout.BeginHorizontal();
GUILayout.Space(100);
GUILayout.Label(buildData.errorInfo, _styleError);
GUILayout.EndHorizontal();
}
}
GUILayout.EndVertical();
EditorGUILayout.EndScrollView();
GUILayout.BeginHorizontal();
if (GUILayout.Button("全选"))
{
for (int i = 0; i < _buildData.Count; i++)
{
var buildData = _buildData[i];
buildData.isChecked = true;
}
}
if (GUILayout.Button("全不选"))
{
for (int i = 0; i < _buildData.Count; i++)
{
var buildData = _buildData[i];
buildData.isChecked = false;
}
}
GUILayout.EndHorizontal();
}
private void _Build()
{
for (int i = 0; i < _buildData.Count; i++)
{
var buildData = _buildData[i];
if (buildData.isChecked)
{
buildData.DoBuild();
}
}
AssetDatabase.Refresh();
}
private void _InitData()
{
_buildData = new List<VehicleBuildData>();
var configList = EditorTableManager.instance.tables.VehicleConfig.DataList;
for (int i = 0; i < configList.Count; i++)
{
var config = configList[i];
var data = new VehicleBuildData();
data.vehicleConfig = config;
data.Init();
_buildData.Add(data);
}
_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;
}
}
}