78 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|