123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /// #pkgName FGUI包名
- /// #panelName UIPanel名字
- /// #UIName = $"{#pkgName}{#panelName}" UIKey名字
- /// 该脚本由模板创建
- /// created by cb 2024
- using FairyGUI;
- using System.Collections.Generic;
- using XGame;
- using XGame.Framework;
- using XGame.Framework.UI;
- namespace FL.FGUI
- {
- /// <summary>
- /// UI逻辑处理类
- /// </summary>
- /// <typeparam name=""></typeparam>
- public partial class MainHomeBottomPanelCtrl : UIController<MainHomeBottomPanelVM>
- {
- private UIKey _tempKey;
- /// <summary>
- /// 已开启的Normal层UI队列
- /// </summary>
- private List<UIKey> _normalUIs = new();
- protected override void OnEnable(object intent)
- {
- AddUIListenres();
- VM.BtnCtrl.onChanged.Add(OnBtnCtrlChanged);
- FrameworkEvent.Instance.AddListener(XGame.Framework.EventDefine.UI_OPENED, OnUIOpened);
- FrameworkEvent.Instance.AddListener(XGame.Framework.EventDefine.UI_CLOSED, OnUIClosed);
- Mock();
- }
- protected override void OnDisable()
- {
- RemoveUIListenres();
- VM.BtnCtrl.onChanged.Remove(OnBtnCtrlChanged);
- FrameworkEvent.Instance.RemoveListener(XGame.Framework.EventDefine.UI_OPENED, OnUIOpened);
- FrameworkEvent.Instance.RemoveListener(XGame.Framework.EventDefine.UI_CLOSED, OnUIClosed);
- _tempKey = null;
- _normalUIs.Clear();
- }
- #region UI事件
- private void AddUIListenres()
- {
- VM.ClosePanelBtn.onClick.Add(OnClickClosePanelBtn);
- }
- private void RemoveUIListenres()
- {
- VM.ClosePanelBtn.onClick.Remove(OnClickClosePanelBtn);
- }
- private void OnClickClosePanelBtn(EventContext context)
- {
- if (_normalUIs.Count > 0)
- {
- var uikey = _normalUIs[0];
- _normalUIs.RemoveAt(0);
- Context.UI.Close(uikey);
- return;
- }
- VM.BtnCtrl.selectedIndex = 0;
- }
- #endregion
- private void Mock()
- { //TODO 临时代码
- VM.SetUnlockState(4, false, "主线4\r解锁");
- VM.SetUnlockState(5, false, "主线5\r解锁");
- }
- #region UI开启/关闭监听事件
- private bool IsUnlock(int index)
- { //TODO 临时代码
- return index switch
- {
- 4 => false,
- 5 => false,
- _ => true
- };
- }
- private UIKey IndexToKey(int index)
- {
- return index switch
- {
- 1 => UIKeys.PlayerMainPanel,
- 2 => UIKeys.PartnerMainPanel,
- 3 => UIKeys.PartnerEpiMainPanel,
- 6 => UIKeys.DragonEggTreasurePanel,
- _ => null,
- };
- }
- private int KeyToIndex(UIKey uiKey)
- {
- if (uiKey == UIKeys.PlayerMainPanel) return 1;
- if (uiKey == UIKeys.PartnerMainPanel) return 2;
- if (uiKey == UIKeys.PartnerEpiMainPanel) return 3;
- if (uiKey == UIKeys.DragonEggTreasurePanel) return 6;
- return -1;
- }
- private void OnBtnCtrlChanged(EventContext context)
- {
- Log.Debug($"OnBtnCtrlChanged. previousIndex:{VM.BtnCtrl.previousIndex} selectedIndex:{VM.BtnCtrl.selectedIndex}");
- if (VM.BtnCtrl.selectedIndex == 7)
- { // 7为单独显示返回按钮
- return;
- }
- CloseAllNormalUI();
- var lastUIKey = IndexToKey(VM.BtnCtrl.previousIndex);
- if (lastUIKey != null)
- {
- _tempKey = lastUIKey;
- Context.UI.Close(lastUIKey);
- }
- _tempKey = null;
- if (!IsUnlock(VM.BtnCtrl.selectedIndex))
- {
- Context.ShowTips("功能未解锁!");
- VM.BtnCtrl.selectedIndex = 0;
- return;
- }
- var nextUIKey = IndexToKey(VM.BtnCtrl.selectedIndex);
- if (nextUIKey != null)
- {
- _tempKey = nextUIKey;
- var async = Context.UI.OpenAsync(nextUIKey);
- async.On(_ =>
- {
- _tempKey = null;
- });
- }
- }
- private void OnUIOpened(int eventId, object args)
- {
- var uikey = args as UIKey;
- Log.Debug($"收到UI开启事件 UIKey:{uikey} selectedIndex:{VM.BtnCtrl.selectedIndex}");
- if (uikey == _tempKey) return; // 避免重复监听
- var index = KeyToIndex(uikey);
- if (index != -1)
- { // 是控制器关联的UI
- if (index != VM.BtnCtrl.selectedIndex)
- { // 控制器索引不一致
- VM.BtnCtrl.selectedIndex = index;
- }
- return;
- }
- if (_normalUIs.Contains(uikey))
- {
- Log.Error($"重复记录UI开启事件. UIKey:{uikey}");
- return;
- }
- var layer = UIKeys.GetLayer(uikey);
- if (layer != UILayer.Normal)
- return;
- if (VM.BtnCtrl.selectedIndex == 0)
- {// 7为单独显示返回按钮
- VM.BtnCtrl.selectedIndex = 7;
- }
- _normalUIs.Insert(0, uikey);
- }
- private void OnUIClosed(int eventId, object args)
- {
- var uikey = args as UIKey;
- Log.Debug($"收到UI关闭事件 UIKey:{uikey} selectedIndex:{VM.BtnCtrl.selectedIndex}");
- if (uikey == _tempKey) return; // 避免重复监听
- if (UIKeys.GetLayer(uikey) == UILayer.Normal)
- {
- _normalUIs.Remove(uikey);
- }
- var index = KeyToIndex(uikey);
- if (index != -1)
- { // 是控制器关联的UI
- if (index == VM.BtnCtrl.selectedIndex)
- { // 控制器索引是当前关闭的UI
- VM.BtnCtrl.selectedIndex = 0;
- }
- }
- }
- /// <summary>
- /// 关闭所有的Normal层UI
- /// </summary>
- private void CloseAllNormalUI()
- {
- if (_normalUIs.Count == 0)
- return;
- for(var i = _normalUIs.Count - 1; i >= 0; i--)
- {
- var uikey = _normalUIs[i];
- _normalUIs.RemoveAt(i);
- _tempKey = uikey;
- Context.UI.Close(uikey);
- }
- _tempKey = null;
- }
- #endregion
- }
- }
|