diff --git a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab index 575ba43..2cdea5c 100644 --- a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab +++ b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab @@ -377,7 +377,7 @@ MonoBehaviour: m_Right: 20 m_Top: 20 m_Bottom: 20 - m_ChildAlignment: 4 + m_ChildAlignment: 3 m_Spacing: 12 m_ChildForceExpandWidth: 0 m_ChildForceExpandHeight: 0 @@ -494,7 +494,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_IgnoreLayout: 0 - m_MinWidth: 400 + m_MinWidth: 300 m_MinHeight: -1 m_PreferredWidth: -1 m_PreferredHeight: -1 diff --git a/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI.cs b/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI.cs index dd83239..03e043d 100644 --- a/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI.cs +++ b/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI.cs @@ -23,7 +23,7 @@ namespace AxibugEmuOnline.Client public override bool Enable => m_bPoped; private bool m_bPoped = false; - private List m_runtimeMenuItems = new List(); + private List m_runtimeMenuItems = new List(); private int m_selectIndex = -1; public int SelectIndex @@ -36,7 +36,9 @@ namespace AxibugEmuOnline.Client m_selectIndex = value; - var itemUIRect = m_runtimeMenuItems[m_selectIndex].transform as RectTransform; + OptionUI_MenuItem optionUI_MenuItem = m_runtimeMenuItems[m_selectIndex]; + optionUI_MenuItem.OnFocus(); + var itemUIRect = optionUI_MenuItem.transform as RectTransform; SelectBorder.pivot = itemUIRect.pivot; SelectBorder.sizeDelta = itemUIRect.rect.size; DOTween.To(() => SelectBorder.position, (value) => SelectBorder.position = value, itemUIRect.position, 0.125f); @@ -61,21 +63,7 @@ namespace AxibugEmuOnline.Client MenuRoot.anchoredPosition = temp; } - protected override void Update() - { - if (Input.GetKeyDown(KeyCode.T)) - { - if (m_bPoped) Hide(); - else Pop(new List - { - new ExecuteMenu("²âÊԲ˵¥1"), - new ExecuteMenu("Copilot"), - new ExecuteMenu("ChatGPT 4o"), - }); - } - } - - public void Pop(IEnumerable menus) + public void Pop(List menus, int defaultIndex = 0) { ReleaseRuntimeMenus(); foreach (var menu in menus) CreateRuntimeMenuItem(menu); @@ -85,7 +73,9 @@ namespace AxibugEmuOnline.Client Canvas.ForceUpdateCanvases(); m_selectIndex = 0; - var itemUIRect = m_runtimeMenuItems[m_selectIndex].transform as RectTransform; + OptionUI_MenuItem optionUI_MenuItem = m_runtimeMenuItems[defaultIndex]; + optionUI_MenuItem.OnFocus(); + var itemUIRect = optionUI_MenuItem.transform as RectTransform; SelectBorder.pivot = itemUIRect.pivot; SelectBorder.position = itemUIRect.position; SelectBorder.sizeDelta = itemUIRect.rect.size; @@ -161,6 +151,17 @@ namespace AxibugEmuOnline.Client { SelectIndex--; } + + protected override void OnCmdBack() + { + Hide(); + } + + protected override bool OnCmdEnter() + { + m_runtimeMenuItems[SelectIndex].OnExecute(); + return true; + } } public abstract class OptionMenu diff --git a/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_ExecuteItem.cs b/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_ExecuteItem.cs index 0208f2f..b06669c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_ExecuteItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_ExecuteItem.cs @@ -1,22 +1,14 @@ -using UnityEngine; -using UnityEngine.UI; - namespace AxibugEmuOnline.Client { - public class OptionUI_ExecuteItem : MonoBehaviour + public class OptionUI_ExecuteItem : OptionUI_MenuItem { - [SerializeField] Text m_MenuNameTxt; - [SerializeField] Image m_Icon; - - public void SetData(ExecuteMenu executeMenu) + public override void OnExecute() + { + MenuData.OnExcute(); + } + + public override void OnFocus() { - m_MenuNameTxt.text = executeMenu.Name; - if (executeMenu.Icon == null) m_Icon.gameObject.SetActiveEx(false); - else - { - m_Icon.gameObject.SetActiveEx(true); - m_Icon.sprite = executeMenu.Icon; - } } } } diff --git a/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_MenuItem.cs b/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_MenuItem.cs new file mode 100644 index 0000000..c9e82b0 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_MenuItem.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using UnityEngine.UI; + +namespace AxibugEmuOnline.Client +{ + public abstract class OptionUI_MenuItem : MonoBehaviour + { + [SerializeField] Text m_MenuNameTxt; + [SerializeField] Image m_Icon; + + protected OptionMenu m_Menu; + + public void SetData(OptionMenu menuData) + { + m_Menu = menuData; + m_MenuNameTxt.text = menuData.Name; + if (menuData.Icon == null) m_Icon.gameObject.SetActiveEx(false); + else + { + m_Icon.gameObject.SetActiveEx(true); + m_Icon.sprite = menuData.Icon; + } + + OnSetData(menuData); + } + + protected virtual void OnSetData(OptionMenu menuData) { } + + public abstract void OnExecute(); + public abstract void OnFocus(); + } + + public abstract class OptionUI_MenuItem : OptionUI_MenuItem + where T : OptionMenu + { + protected T MenuData => m_Menu as T; + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_MenuItem.cs.meta b/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_MenuItem.cs.meta new file mode 100644 index 0000000..840d151 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/UI/OptionUI/OptionUI_MenuItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bba0d5ebcd10fb459209fb11e4d274d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: