// using UnityEngine;
// using UnityEditor;
// using System.IO;
// using System.Collections.Generic;
// using ArtResource;
// namespace EditorArt_Tools
// {
// ///
// /// 批量创建场景资源配置表
// ///
// public class BatchCreateSceneResources : EditorWindow
// {
// private const string SO_ROOT_PATH = "Assets/Art_SubModule/Art_SO/DecorateScene";
// private const string JSON_ROOT_PATH = "Assets/Art_SubModule/Art_Json/DecorateScene";
// private const string MANIFEST_PATH = "Assets/Art_SubModule/Art_SO/art_table_manifest.json";
// private int startIndex = 15;
// private int endIndex = 50;
// private string prefix = "Scene";
// private string suffix = "Resource";
// [MenuItem("美术工具/批量创建场景资源")]
// public static void ShowWindow()
// {
// var window = GetWindow("批量创建场景资源");
// window.minSize = new Vector2(400, 300);
// window.Show();
// }
// private void OnGUI()
// {
// EditorGUILayout.LabelField("批量创建场景资源配置表", EditorStyles.boldLabel);
// EditorGUILayout.Space(10);
// EditorGUILayout.HelpBox(
// "将在以下路径创建配置表:\n" +
// $"SO: {SO_ROOT_PATH}\n" +
// $"JSON: {JSON_ROOT_PATH}",
// MessageType.Info);
// EditorGUILayout.Space(10);
// prefix = EditorGUILayout.TextField("前缀:", prefix);
// suffix = EditorGUILayout.TextField("后缀:", suffix);
// startIndex = EditorGUILayout.IntField("起始序号:", startIndex);
// endIndex = EditorGUILayout.IntField("结束序号:", endIndex);
// EditorGUILayout.Space(10);
// if (startIndex > endIndex)
// {
// EditorGUILayout.HelpBox("起始序号不能大于结束序号!", MessageType.Error);
// return;
// }
// int count = endIndex - startIndex + 1;
// EditorGUILayout.HelpBox($"将创建 {count} 个配置表", MessageType.Info);
// EditorGUILayout.Space(10);
// // 预览前几个文件名
// EditorGUILayout.LabelField("文件名预览:", EditorStyles.boldLabel);
// for (int i = 0; i < Mathf.Min(3, count); i++)
// {
// int index = startIndex + i;
// string fileName = $"{prefix}{index}{suffix}";
// EditorGUILayout.LabelField($" {i + 1}. {fileName}.asset / {fileName}.json");
// }
// if (count > 3)
// {
// EditorGUILayout.LabelField($" ... (共 {count} 个)");
// }
// EditorGUILayout.Space(20);
// GUI.backgroundColor = Color.green;
// if (GUILayout.Button("开始创建", GUILayout.Height(40)))
// {
// CreateResources();
// }
// GUI.backgroundColor = Color.white;
// }
// private void CreateResources()
// {
// if (startIndex > endIndex)
// {
// EditorUtility.DisplayDialog("错误", "起始序号不能大于结束序号!", "确定");
// return;
// }
// // 确保目录存在
// if (!Directory.Exists(SO_ROOT_PATH))
// {
// Directory.CreateDirectory(SO_ROOT_PATH);
// }
// if (!Directory.Exists(JSON_ROOT_PATH))
// {
// Directory.CreateDirectory(JSON_ROOT_PATH);
// }
// int successCount = 0;
// int skipCount = 0;
// List createdFiles = new List();
// int baseTableId = GetNextAvailableTableId();
// for (int i = startIndex; i <= endIndex; i++)
// {
// string fileName = $"{prefix}{i}{suffix}";
// string soPath = $"{SO_ROOT_PATH}/{fileName}.asset";
// string jsonPath = $"{JSON_ROOT_PATH}/{fileName}.json";
// // 检查文件是否已存在
// if (File.Exists(soPath) || File.Exists(jsonPath))
// {
// skipCount++;
// Debug.LogWarning($"文件已存在,跳过: {fileName}");
// continue;
// }
// // 创建 ScriptableObject
// var newTable = ScriptableObject.CreateInstance();
// newTable.TableName = fileName;
// newTable.TableId = baseTableId + (i - startIndex);
// newTable.Items = new List();
// // 保存 SO 文件
// AssetDatabase.CreateAsset(newTable, soPath);
// // 创建 JSON 文件
// var jsonData = new ArtTableJsonData
// {
// TableId = newTable.TableId,
// TableName = newTable.TableName,
// Items = new List()
// };
// string json = JsonUtility.ToJson(jsonData, true);
// File.WriteAllText(jsonPath, json);
// createdFiles.Add(fileName);
// successCount++;
// // 显示进度
// float progress = (float)(i - startIndex + 1) / (endIndex - startIndex + 1);
// EditorUtility.DisplayProgressBar("创建资源", $"正在创建 {fileName}...", progress);
// }
// EditorUtility.ClearProgressBar();
// // 刷新 AssetDatabase
// AssetDatabase.SaveAssets();
// AssetDatabase.Refresh();
// // 更新 Manifest
// UpdateManifest();
// // 显示结果
// string message = $"创建完成!\n成功创建: {successCount} 个\n跳过已存在: {skipCount} 个";
// if (createdFiles.Count > 0)
// {
// message += $"\n\n创建的文件:\n{string.Join("\n", createdFiles.ToArray())}";
// }
// EditorUtility.DisplayDialog("批量创建完成", message, "确定");
// Debug.Log($"[BatchCreateSceneResources] {message}");
// }
// private int GetNextAvailableTableId()
// {
// // 查找所有现有的 ArtTableSO,获取最大的 TableId
// string[] guids = AssetDatabase.FindAssets("t:ArtTableSO");
// int maxId = 0;
// foreach (string guid in guids)
// {
// string path = AssetDatabase.GUIDToAssetPath(guid);
// var table = AssetDatabase.LoadAssetAtPath(path);
// if (table != null && table.TableId > maxId)
// {
// maxId = table.TableId;
// }
// }
// return maxId + 1;
// }
// private void UpdateManifest()
// {
// try
// {
// // 查找所有ArtTableSO文件
// string[] guids = AssetDatabase.FindAssets("t:ArtTableSO", new[] { "Assets/Art_SubModule/Art_SO" });
// List tablePaths = new List();
// foreach (string guid in guids)
// {
// string path = AssetDatabase.GUIDToAssetPath(guid);
// if (!string.IsNullOrEmpty(path))
// {
// tablePaths.Add(path);
// }
// }
// // 排序路径
// tablePaths.Sort();
// // 创建或更新manifest
// ArtTableManifest manifest;
// // 如果文件存在,读取现有的预加载配置
// if (File.Exists(MANIFEST_PATH))
// {
// string existingJson = File.ReadAllText(MANIFEST_PATH);
// manifest = JsonUtility.FromJson(existingJson);
// // 确保字段不为null
// if (manifest == null)
// {
// manifest = new ArtTableManifest();
// }
// if (manifest.preloadTableIds == null)
// {
// manifest.preloadTableIds = new int[0];
// }
// }
// else
// {
// // 创建新的manifest
// manifest = new ArtTableManifest
// {
// preloadTableIds = new int[0]
// };
// }
// // 更新路径列表
// manifest.tablePaths = tablePaths.ToArray();
// // 序列化为JSON
// string json = JsonUtility.ToJson(manifest, true);
// // 确保目录存在
// string directory = Path.GetDirectoryName(MANIFEST_PATH);
// if (!Directory.Exists(directory))
// {
// Directory.CreateDirectory(directory);
// }
// // 写入文件
// File.WriteAllText(MANIFEST_PATH, json);
// AssetDatabase.ImportAsset(MANIFEST_PATH);
// Debug.Log($"[BatchCreateSceneResources] Manifest文件已更新: {MANIFEST_PATH}, 共 {tablePaths.Count} 个表");
// }
// catch (System.Exception ex)
// {
// Debug.LogError($"[BatchCreateSceneResources] 更新Manifest文件失败: {ex.Message}");
// }
// }
// [System.Serializable]
// public class ArtTableManifest
// {
// public string[] tablePaths;
// public int[] preloadTableIds;
// }
// [System.Serializable]
// public class ArtTableJsonData
// {
// public int TableId;
// public string TableName;
// public List Items;
// }
// [System.Serializable]
// public class ArtItemJsonData
// {
// public int Id;
// public string Name;
// public string Desc;
// public string SpritePath;
// public string SpineAssetPath;
// public string SpineAnimName;
// }
// }
// }