using System.IO; using UnityEditor; using UnityEngine; using UnityEngine.EventSystems; using Vanguard.UI; using Vanguard.UI.Overlays; namespace Vanguard.Editor { /// /// Собирает статические части overlay-экранов в prefab-ассеты. /// Runtime использует их через Resources/Overlays, если они есть. /// public static class OverlayPrefabBuilder { private const string DirectoryPath = "Assets/Vanguard/Resources/Overlays"; [MenuItem("Vanguard/Rebuild Overlay Prefabs")] public static void BuildOverlayPrefabs() { Directory.CreateDirectory(DirectoryPath); AssetDatabase.Refresh(); OverlayPrefabs.Disabled = true; var hadEventSystem = Object.FindAnyObjectByType() != null; var canvas = UiKit.CreateCanvas("Overlay Prefab Canvas"); try { var list = new CardListView(canvas.transform, _ => null); Save(list.Root, "CardListView"); var detail = new CardDetailOverlay(canvas.transform, _ => null); Save(detail.Root, "CardDetailOverlay"); var menu = new CardActionMenuView(); menu.Build(canvas.transform); Save(menu.Root, "CardActionMenu"); var zones = new ZoneBlockStripView(); zones.Build( canvas.transform, "ZoneBlockStrip", new Vector2(0f, 0f), new Vector2(0f, 0f), Vector2.zero, new Vector2(360f, 108f)); Save(zones.Root, "ZoneBlockStrip"); } finally { OverlayPrefabs.Disabled = false; Object.DestroyImmediate(canvas.gameObject); if (!hadEventSystem) { var eventSystem = Object.FindAnyObjectByType(); if (eventSystem != null) Object.DestroyImmediate(eventSystem.gameObject); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } Debug.Log("Vanguard overlay prefabs rebuilt: " + DirectoryPath); } private static void Save(RectTransform root, string name) { if (root == null) return; var path = DirectoryPath + "/" + name + ".prefab"; root.gameObject.SetActive(true); PrefabUtility.SaveAsPrefabAsset(root.gameObject, path); } } }