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(); window.titleContent = new GUIContent("载具构建器"); window.Show(); } private List _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(); 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; } } }