1
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
using MuHua;
|
||||
|
||||
/// <summary>
|
||||
/// UI菜单管理器
|
||||
/// </summary>
|
||||
public class UIMenuManager : ModuleUISingle<UIMenuManager> {
|
||||
/// <summary> 菜单模板 </summary>
|
||||
public VisualTreeAsset menuTreeAsset;
|
||||
/// <summary> 项目模板 </summary>
|
||||
public VisualTreeAsset itemTreeAsset;
|
||||
|
||||
private UIMenuPanel menu;
|
||||
|
||||
public override VisualElement Element => root.Q<VisualElement>("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() {
|
||||
|
||||
}
|
||||
|
||||
/// <summary> 创建菜单 </summary>
|
||||
public UIMenuPanel BuildMenu(Vector3 position) {
|
||||
VisualElement element = menuTreeAsset.Instantiate();
|
||||
Element.Add(element);
|
||||
element.transform.position = position;
|
||||
return new UIMenuPanel(element, itemTreeAsset);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// UI菜单面板
|
||||
/// </summary>
|
||||
public class UIMenuPanel : ModuleUIPanel {
|
||||
|
||||
public ModuleUIItems<UIItem, DataMenuItem> items;
|
||||
|
||||
public VisualElement Container => Q<VisualElement>("Container");
|
||||
|
||||
public UIMenuPanel(VisualElement element, VisualTreeAsset templateAsset) : base(element) {
|
||||
items = new ModuleUIItems<UIItem, DataMenuItem>(Container, templateAsset,
|
||||
(data, element) => new UIItem(data, element));
|
||||
}
|
||||
public void Release() => items.Release();
|
||||
|
||||
/// <summary> UI项目 </summary>
|
||||
public class UIItem : ModuleUIItem<DataMenuItem> {
|
||||
public UIItem(DataMenuItem value, VisualElement element) : base(value, element) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 菜单项目
|
||||
/// </summary>
|
||||
public class DataMenuItem {
|
||||
/// <summary> 名称 </summary>
|
||||
public string name;
|
||||
/// <summary> 回调 </summary>
|
||||
public Action callback;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 422a458e7229d6b4a8fff66af1840238
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user