using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; using MuHua; /// /// UI菜单管理器 /// public class UIMenuManager : ModuleUISingle { /// 菜单模板 public VisualTreeAsset menuTreeAsset; /// 项目模板 public VisualTreeAsset itemTreeAsset; private UIMenuPanel menu; public override VisualElement Element => root.Q("Menu"); protected override void Awake() => NoReplace(false); public void Open() { if (menu != null) { Close(); } Vector3 mousePosition = UITool.GetMousePosition(Element); menu = BuildMenu(mousePosition); } public void Close() { Element.Clear(); } public void Settings() { } /// 创建菜单 public UIMenuPanel BuildMenu(Vector3 position) { VisualElement element = menuTreeAsset.Instantiate(); Element.Add(element); element.transform.position = position; return new UIMenuPanel(element, itemTreeAsset); } } /// /// UI菜单面板 /// public class UIMenuPanel : ModuleUIPanel { public ModuleUIItems items; public VisualElement Container => Q("Container"); public UIMenuPanel(VisualElement element, VisualTreeAsset templateAsset) : base(element) { items = new ModuleUIItems(Container, templateAsset, (data, element) => new UIItem(data, element)); } public void Release() => items.Release(); /// UI项目 public class UIItem : ModuleUIItem { public UIItem(DataMenuItem value, VisualElement element) : base(value, element) { } } } /// /// 菜单项目 /// public class DataMenuItem { /// 名称 public string name; /// 回调 public Action callback; }