VanguardReMaster/client/Assets/Vanguard/Editor/OverlayPrefabBuilder.cs

78 lines
2.6 KiB
C#

using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.EventSystems;
using Vanguard.UI;
using Vanguard.UI.Overlays;
namespace Vanguard.Editor
{
/// <summary>
/// Собирает статические части overlay-экранов в prefab-ассеты.
/// Runtime использует их через Resources/Overlays, если они есть.
/// </summary>
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<EventSystem>() != 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<EventSystem>();
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);
}
}
}